{
  "scriptappy": "1.0.0",
  "info": {
    "name": "ExtensionAPI",
    "description": "The Extension API consists of methods and properties used to create custom visualization extensions.",
    "version": "1.1.1",
    "stability": "stable",
    "x-qlik-visibility": "public"
  },
  "entries": {
    "define": {
      "description": "The extension as an AMD module.",
      "kind": "function",
      "params": [
        {
          "name": "dependencies",
          "kind": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "name": "cb",
          "type": "#/definitions/ExtensionFn"
        }
      ]
    },
    "qext": {
      "description": "The extension metadata file (QEXT) is a JSON file, and is used by Qlik Sense to identify the visualization extension.\nIt contains the metadata used for the library or assets panel. When deployed to Qlik Sense, the visualization extension is displayed in the Charts section of the assets panel or library panel.",
      "kind": "interface",
      "entries": {
        "name": {
          "description": "This is the name of the visualization extension and is displayed in the library as well as in the preview.\n  It is recommended to use a unique name for the visualization to avoid interference with other visualizations that may have the same name.",
          "type": "string"
        },
        "type": {
          "description": "This defines the type of extension. It should always be `'visualization'` for visualization extensions.",
          "kind": "literal",
          "value": "'visualization'"
        },
        "description": {
          "description": "This defines the description visible in the preview of the visualization extension.",
          "optional": true,
          "type": "string"
        },
        "icon": {
          "description": "This defines the icon displayed in the library.",
          "optional": true,
          "defaultValue": "'extension'",
          "kind": "union",
          "items": [
            {
              "kind": "literal",
              "value": "'bar-chart-vertical'"
            },
            {
              "kind": "literal",
              "value": "'extension'"
            },
            {
              "kind": "literal",
              "value": "'filterpane'"
            },
            {
              "kind": "literal",
              "value": "'gauge-chart'"
            },
            {
              "kind": "literal",
              "value": "'line-chart'"
            },
            {
              "kind": "literal",
              "value": "'list'"
            },
            {
              "kind": "literal",
              "value": "'map'"
            },
            {
              "kind": "literal",
              "value": "'pie-chart'"
            },
            {
              "kind": "literal",
              "value": "'scatter-chart'"
            },
            {
              "kind": "literal",
              "value": "'table'"
            },
            {
              "kind": "literal",
              "value": "'text-image'"
            },
            {
              "kind": "literal",
              "value": "'treemap'"
            }
          ],
          "type": "string"
        },
        "preview": {
          "description": "This defines which preview image is to be used. The preview image is displayed in a pop-up when you select the visualization extension in the library.",
          "optional": true,
          "type": "string"
        },
        "version": {
          "description": "This defines your individual version handling of the visualization extension. This setting is manually defined. Semantic versioning is recommended.",
          "optional": true,
          "type": "string"
        },
        "author": {
          "description": "This defines the author of the visualization extension. This setting is manually defined.",
          "optional": true,
          "type": "string"
        }
      },
      "examples": [
        "```json\n{\n  \"name\": \"Hello World\",\n  \"description\": \"Hello world example\",\n  \"preview\": \"helloworld.png\",\n  \"type\": \"visualization\",\n  \"version\": 1,\n  \"author\": \"Qlik International\"\n}\n```"
      ]
    }
  },
  "definitions": {
    "BackendAPI": {
      "kind": "class",
      "constructor": {
        "kind": "function",
        "description": "Helper functions for Engine calls and access to Engine data. Available for extensions as\n`this.backendApi`.",
        "params": []
      },
      "entries": {
        "abortSearch": {
          "description": "Aborts the result of a search in a list object.\nClears the existing search and returns the object to the state it was prior to the start of the search.",
          "kind": "function",
          "params": [],
          "returns": {
            "description": "A promise of a Qlik engine response.",
            "nullable": true,
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/empty"
              }
            ]
          },
          "examples": [
            "this.backendApi.abortSearch();"
          ]
        },
        "acceptSearch": {
          "description": "Accepts the result of a search in a list object and the search result is selected in the field.",
          "kind": "function",
          "params": [
            {
              "name": "toggleMode",
              "description": "If `true`, toggle state for selected values.",
              "type": "boolean"
            }
          ],
          "returns": {
            "description": "A promise of a Qlik engine response.",
            "nullable": true,
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/empty"
              }
            ]
          },
          "examples": [
            "this.backendApi.acceptSearch(false);"
          ]
        },
        "applyPatches": {
          "description": "Updates the properties for this object.",
          "kind": "function",
          "params": [
            {
              "name": "qPatches",
              "description": "Array of patches to apply.",
              "kind": "array",
              "items": {
                "type": "QAE.NxPatch"
              }
            },
            {
              "name": "qSoftPatch",
              "description": "Set to `true` if properties should be soft, that is not persisted.",
              "type": "boolean"
            }
          ],
          "returns": {
            "description": "A promise of a Qlik engine reply.",
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/empty"
              }
            ]
          },
          "examples": [
            "this.backendApi.applyPatches([\n  {\n    \"qPath\": \"/qListObjectDef/qDef/qSortCriterias/0/qSortByLoadOrder\",\n    \"qOp\": \"replace\",\n    \"qValue\": \"-1\"\n  },\n  {\n    \"qPath\": \"/meta\",\n    \"qOp\": \"add\",\n    \"qValue\": \"{ \\\"data\\\": \\\"this is the data\\\"}\"\n  }\n], true);"
          ]
        },
        "clearSelections": {
          "description": "Clears unconfirmed selections for this object.",
          "kind": "function",
          "params": [],
          "returns": {
            "description": "A promise of a Qlik engine reply.",
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/empty"
              }
            ]
          },
          "examples": [
            "this.backendApi.clearSelections();"
          ]
        },
        "clearSoftPatches": {
          "description": "Clears all soft patches that have previously been applied to this object using the `applyPatches`\nmethod.",
          "kind": "function",
          "params": [],
          "returns": {
            "description": "A promise of a Qlik engine reply.",
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/empty"
              }
            ]
          },
          "examples": [
            "this.backendApi.clearSoftPatches();"
          ]
        },
        "collapseLeft": {
          "description": "Collapses the left dimensions of a pivot table. Only works for HyperCubes with `qMode = 'P'` which are\nnot always fully expanded.",
          "kind": "function",
          "params": [
            {
              "name": "qRow",
              "description": "Row index.",
              "type": "number"
            },
            {
              "name": "qCol",
              "description": "Column index.",
              "type": "number"
            },
            {
              "name": "qAll",
              "description": "If set to `true`, `qRow` and `qCol` are ignored and\nall cells are collapsed.",
              "optional": true,
              "type": "boolean"
            }
          ],
          "returns": {
            "description": "A promise of a Qlik engine reply.",
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/empty"
              }
            ]
          },
          "examples": [
            "this.backendApi.collapseLeft(0, 0, true);"
          ]
        },
        "collapseTop": {
          "description": "Collapses the top dimensions of a pivot table. Only works for hypercubes with `qMode = 'P'` which are\nnot always fully expanded.",
          "kind": "function",
          "params": [
            {
              "name": "qRow",
              "description": "Row index.",
              "type": "number"
            },
            {
              "name": "qCol",
              "description": "Column index.",
              "type": "number"
            },
            {
              "name": "qAll",
              "description": "If set to true, `qRow` and `qCol` are ignored and all cells\nare collapsed.",
              "optional": true,
              "type": "boolean"
            }
          ],
          "returns": {
            "description": "A promise of a Qlik engine reply.",
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/empty"
              }
            ]
          },
          "examples": [
            "this.backendApi.collapseTop(0, 1);"
          ]
        },
        "eachDataRow": {
          "description": "Loops through data rows for this object. Only rows that are available client side will be used.",
          "kind": "function",
          "params": [
            {
              "name": "callback",
              "description": "Function to call for each row. Parameters are row number and\nrow data as an array of `QAE.NxCell` objects.\nThe loop is terminated if the function returns `false`.",
              "type": "#/definitions/BackendAPI/definitions/eachRow"
            }
          ],
          "examples": [
            "this.backendApi.eachDataRow(function(rownum, row) {\n  html += '<li class=\"state-' + row[0].qState + '\" data-value=\"'\n  + row[0].qElemNumber + '\">' + row[0].qText;\n    if(row[0].qFrequency) {\n      html += '<span>' + row[0].qFrequency + '</span>';\n    }\n  html += '</li>';\n});"
          ]
        },
        "expandLeft": {
          "description": "Expands the left dimensions of a pivot table. Only works for hypercubes with `qMode = 'P'` which are\nnot always fully expanded.",
          "kind": "function",
          "params": [
            {
              "name": "qRow",
              "description": "Row index.",
              "type": "number"
            },
            {
              "name": "qCol",
              "description": "Column index.",
              "type": "number"
            },
            {
              "name": "qAll",
              "description": "If set to `true`, ignore `qRow` and `qCol` and\nexpands all cells.",
              "optional": true,
              "type": "boolean"
            }
          ],
          "returns": {
            "description": "A promise of a Qlik engine reply.",
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/empty"
              }
            ]
          },
          "examples": [
            "this.backendApi.expandLeft(0, 0, true);"
          ]
        },
        "expandTop": {
          "description": "Expands the top dimensions of a pivot table. Only works for hypercubes with `qMode = 'P'` which are\nnot always fully expanded.",
          "kind": "function",
          "params": [
            {
              "name": "qRow",
              "description": "Row index.",
              "type": "number"
            },
            {
              "name": "qCol",
              "description": "Column index.",
              "type": "number"
            },
            {
              "name": "qAll",
              "description": "If set to `true`, `qRow` and `qCol` are ignored and\nall cells are expanded.",
              "optional": true,
              "type": "boolean"
            }
          ],
          "returns": {
            "description": "A promise of a Qlik engine reply.",
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/empty"
              }
            ]
          },
          "examples": [
            "this.backendApi.expandTop(0, 1);"
          ]
        },
        "getData": {
          "description": "Gets data from Qlik engine for this object.",
          "kind": "function",
          "params": [
            {
              "name": "qPages",
              "description": "An array of `QAE.NxPage` objects.",
              "kind": "array",
              "items": {
                "type": "QAE.NxPage"
              }
            }
          ],
          "returns": {
            "description": "A promise of `Array<QAE.NxDataPage>`.",
            "type": "Promise",
            "generics": [
              {
                "kind": "array",
                "items": {
                  "type": "QAE.NxDataPage"
                }
              }
            ]
          },
          "examples": [
            "var self = this;\nvar requestPage = [{\n  qTop: i + this.currpos,\n  qLeft: 0,\n  qWidth: 10,\n  qHeight: this.displayrows\n}];\n\nthis.backendApi.getData(requestPage).then(function(dataPages) {\n  self.paint($element);\n});"
          ]
        },
        "getDataRow": {
          "description": "Gets a data row for this object.",
          "kind": "function",
          "params": [
            {
              "name": "rownum",
              "description": "The row number.",
              "type": "number"
            }
          ],
          "returns": {
            "description": "An array of `QAE.NxCell` or `null` if the row is not available\nclient side and need to be fetched with `getData`.",
            "nullable": true,
            "kind": "array",
            "items": {
              "type": "QAE.NxCell"
            }
          },
          "examples": [
            "var cells = this.backendApi.getDataRow(row);\nif(cells) {\n  cells.each(function(cell) {\n    console.log('cell text: ', cell.qText);\n  });\n}"
          ]
        },
        "getDimensionInfos": {
          "description": "Gets `qDimensionInfo` for this object.",
          "kind": "function",
          "params": [],
          "returns": {
            "description": "An array of `QAE.NxDimensionInfo` objects.",
            "kind": "array",
            "items": {
              "type": "QAE.NxDimensionInfo"
            }
          },
          "examples": [
            "this.backendApi.getDimensionInfos().forEach(function(dimInfo){\n  console.log('title: ', dimInfo.qFallbackTitle);\n});"
          ]
        },
        "getMeasureInfos": {
          "description": "Get `qMeasureInfo` for this object.",
          "kind": "function",
          "params": [],
          "returns": {
            "description": "Array of `QAE.NxMeasureInfo` objects.",
            "kind": "array",
            "items": {
              "type": "QAE.NxMeasureInfo"
            }
          },
          "examples": [
            "this.backendApi.getMeasureInfos().forEach(function(measureInfo){\n  console.log('title: ', measureInfo.qFallbackTitle);\n});"
          ]
        },
        "getPivotData": {
          "description": "Gets pivot data from the Qlik engine for this object. Only works for hypercubes with `qMode = 'P'`.",
          "kind": "function",
          "params": [
            {
              "name": "qPages",
              "description": "An array of request page objects.",
              "kind": "array",
              "items": {
                "type": "QAE.NxPage"
              }
            }
          ],
          "returns": {
            "description": "A promise of pivot data pages.",
            "nullable": true,
            "type": "Promise",
            "generics": [
              {
                "kind": "array",
                "items": {
                  "type": "QAE.NxPivotPage"
                }
              }
            ]
          },
          "examples": [
            "var requestPage = {\n  qTop : 0,\n  qLeft : 0,\n  qWidth : 10,\n  qHeight : count\n};\n\nthis.backendApi.getPivotData([requestPage]).then(function(dataPages) {\n  ...\n});"
          ]
        },
        "getProperties": {
          "description": "Get Properties for this object.",
          "kind": "function",
          "params": [],
          "returns": {
            "description": "A promise of object properties.",
            "type": "Promise",
            "generics": [
              {
                "type": "QAE.GenericObjectProperties"
              }
            ]
          },
          "examples": [
            "var me = this;\nthis.backendApi.getProperties().then(function(reply){\n  reply.title = 'New title';\n  me.backendApi.setProperties(reply);\n});"
          ]
        },
        "getReducedData": {
          "description": "Get reduced data from Qlik engine for this object. This method is intended for preserving\nthe shape of the data, not for viewing the actual data points.",
          "kind": "function",
          "params": [
            {
              "name": "qPages",
              "description": "An array of `QAE.NxPage` objects.",
              "kind": "array",
              "items": {
                "type": "QAE.NxPage"
              }
            },
            {
              "name": "qZoomFactor",
              "description": "If set to -1, the Qlik engine decides the zoom factor.\nIf `qReductionMode` is `'D1'` or `'S'`, the zoom factor is 2ⁿ. If the zoom factor is `5`, the data is reduced by a factor 32.\nIf `qReductionMode` is `'C'`, the zoom factor defines the number of centroids.",
              "type": "number"
            },
            {
              "name": "qReductionMode",
              "description": "Reduction mode. One of:\n\n- `'N'` for no data reduction.\n- `'D1'` to reduce a bar chart or line chart.\n    The profile of the chart is reduced whatever the number of dimensions in the chart.\n- `'S'` to reduce the resolution of a scatter plot.\n- `'C'` to reduce the data of a scatter plot chart.\n- `'ST'` to reduce the data of a stacked pivot table.",
              "type": "string"
            }
          ],
          "returns": {
            "description": "A promise of reduced data pages.",
            "nullable": true,
            "type": "Promise",
            "generics": [
              {
                "kind": "array",
                "items": {
                  "type": "QAE.NxDataPage"
                }
              }
            ]
          },
          "examples": [
            "var requestPage = [{\n  qTop : 0,\n  qLeft : 0,\n  qWidth : 10,\n  qHeight : count\n}];\n\nthis.backendApi.getReducedData(requestPage, -1, \"D1\").then(function(dataPages) {\n  ...\n});"
          ]
        },
        "getRowCount": {
          "description": "Gets the total number of data rows for this object.",
          "kind": "function",
          "params": [],
          "returns": {
            "description": "The total number of data rows.",
            "type": "number"
          },
          "examples": [
            "if (this.backendApi.getRowCount() > lastrow + 1) {\n  morebutton = true;\n}"
          ]
        },
        "getStackData": {
          "description": "Gets stacked data from the Qlik engine for this object. Only works for hypercubes with `qMode = 'S'`.",
          "kind": "function",
          "params": [
            {
              "name": "qPages",
              "description": "An array of request page objects.",
              "kind": "array",
              "items": {
                "type": "QAE.NxPage"
              }
            },
            {
              "name": "qMaxNbrCells",
              "description": "Maximum number of cells at outer level.",
              "optional": true,
              "defaultValue": 1000,
              "type": "number"
            }
          ],
          "returns": {
            "description": "A promise of stacked data pages.",
            "nullable": true,
            "type": "Promise",
            "generics": [
              {
                "kind": "array",
                "items": {
                  "type": "QAE.NxStackPage"
                }
              }
            ]
          },
          "examples": [
            "var requestPage = {\n  qTop : 0,\n  qLeft : 0,\n  qWidth : 10,\n  qHeight : count\n};\n\nthis.backendApi.getStackData([requestPage], 1000).then(function(dataPages) {\n  ...\n});"
          ]
        },
        "hasSelections": {
          "description": "Returns `true` if there are unconfirmed selections for this object.",
          "kind": "function",
          "params": [],
          "returns": {
            "description": "`true` if there are unconfirmed selections.",
            "type": "boolean"
          },
          "examples": [
            "this.backendApi.hasSelections();"
          ]
        },
        "save": {
          "description": "Save this object.",
          "availability": {
            "deprecated": true
          },
          "kind": "function",
          "params": [],
          "returns": {
            "description": "A promise of a Qlik engine reply.",
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/empty"
              }
            ]
          }
        },
        "search": {
          "description": "Search for a term in a list object. Results in an updated layout, containing only matching records.",
          "kind": "function",
          "params": [
            {
              "name": "term",
              "description": "Term to search for.",
              "type": "string"
            }
          ],
          "returns": {
            "description": "A promise of a Qlik engine response. Note that the response will show if the search\noperation was successful or not. It will not contain the matching results.",
            "nullable": true,
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/successful"
              }
            ]
          },
          "examples": [
            "this.backendApi.search(\"A\");"
          ]
        },
        "selectRange": {
          "description": "Select values in this object using ranges. Only applicable to hypercubes.",
          "kind": "function",
          "params": [
            {
              "name": "qRanges",
              "description": "Array of ranges to select.",
              "kind": "array",
              "items": {
                "type": "QAE.NxRangeSelectionInfo"
              }
            },
            {
              "name": "qOrMode",
              "description": "If true, only one of the measures needs to be in range.",
              "type": "boolean"
            }
          ],
          "returns": {
            "description": "A promise of a Qlik engine response with the status of the operation, i.e. if it was\nsuccessful or not, and details on which objects were updated following the selections.",
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/successful"
              }
            ]
          },
          "examples": [
            "var range = {\n  qMeasureIx: 1,\n  qRange: {\n  qMin: 10,\n  qMax: 100,\n  qMinInclEq: true,\n  qMaxInclEq: true\n};\nthis.backendApi.selectRange([range], false);"
          ]
        },
        "selectValues": {
          "description": "Selects values in this object with a Qlik engine call that triggers a repaint of the object.",
          "kind": "function",
          "params": [
            {
              "name": "qDimNo",
              "description": "Dimension number. `0` is the first dimension.",
              "type": "number"
            },
            {
              "name": "qValues",
              "description": "Array of values (`qElemNumber` in the matrix from engine) to select or\ndeselect.",
              "kind": "array",
              "items": {
                "type": "number"
              }
            },
            {
              "name": "qToggleMode",
              "description": "If `true`, values in the field are selected in addition to any\npreviously selected items. If `false`, values in the field are selected while previously selected\nitems are deselected.",
              "type": "boolean"
            }
          ],
          "examples": [
            "$element.find('li').on('qv-activate', function() {\n  if(this.hasAttribute(\"data-value\")) {\n    var value = parseInt(this.getAttribute(\"data-value\"), 10), dim = 0;\n    self.backendApi.selectValues(dim, [value], true);\n  }\n});"
          ]
        },
        "setCacheOptions": {
          "description": "Sets caching of page requests.\n\nWhen enabled, calls to `getData` are throttled and new requests are created based on internal cache settings.\nIf you want full control of requests to `getData`, set `enabled = false`.",
          "kind": "function",
          "params": [
            {
              "name": "opts",
              "kind": "object",
              "entries": {
                "enabled": {
                  "description": "Set to `true` to enable caching.",
                  "type": "boolean"
                }
              }
            }
          ],
          "examples": [
            "this.backendApi.setCacheOptions({\n  enabled: false // disable cache\n})"
          ]
        },
        "setProperties": {
          "description": "Set properties for this object.",
          "kind": "function",
          "params": [
            {
              "name": "props",
              "description": "The properties to set.",
              "type": "QAE.GenericObjectProperties"
            }
          ],
          "returns": {
            "description": "A promise of a Qlik engine reply.",
            "type": "Promise",
            "generics": [
              {
                "type": "#/definitions/BackendAPI/definitions/empty"
              }
            ]
          },
          "examples": [
            "var me = this;\nthis.backendApi.getProperties().then(function(reply){\n  reply.title = 'New title';\n  me.backendApi.setProperties(reply);\n});"
          ]
        }
      },
      "definitions": {
        "eachRow": {
          "kind": "interface",
          "params": [
            {
              "name": "rowIdx",
              "type": "number"
            },
            {
              "name": "row",
              "kind": "array",
              "items": {
                "type": "QAE.NxCell"
              }
            }
          ],
          "entries": {}
        },
        "empty": {
          "kind": "object",
          "entries": {}
        },
        "successful": {
          "kind": "object",
          "entries": {
            "qSuccess": {
              "type": "boolean"
            }
          }
        }
      }
    },
    "Extension": {
      "description": "Interface for a Qlik Sense Extension",
      "kind": "interface",
      "entries": {
        "initialProperties": {
          "optional": true,
          "type": "QAE.GenericObjectProperties"
        },
        "definition": {
          "optional": true,
          "type": "#/definitions/PP/entries/Component"
        },
        "mounted": {
          "optional": true,
          "type": "any",
          "kind": "function",
          "params": [
            {
              "name": "$element",
              "type": "jqLiteElement"
            }
          ],
          "this": {
            "type": "#/definitions/ExtensionContext"
          }
        },
        "paint": {
          "optional": true,
          "type": "any",
          "kind": "function",
          "params": [
            {
              "name": "$element",
              "type": "jqLiteElement"
            },
            {
              "name": "layout",
              "type": "QAE.GenericObjectLayout"
            }
          ],
          "returns": {
            "type": "Promise",
            "generics": [
              {
                "type": "void"
              }
            ]
          },
          "this": {
            "type": "#/definitions/ExtensionContext"
          }
        },
        "updateData": {
          "optional": true,
          "type": "any",
          "kind": "function",
          "params": [
            {
              "name": "layout",
              "type": "QAE.GenericObjectLayout"
            }
          ],
          "returns": {
            "type": "Promise",
            "generics": [
              {
                "type": "void"
              }
            ]
          },
          "this": {
            "type": "#/definitions/ExtensionContext"
          }
        },
        "resize": {
          "optional": true,
          "type": "any",
          "kind": "function",
          "params": [
            {
              "name": "$element",
              "type": "jqLiteElement"
            },
            {
              "name": "layout",
              "type": "QAE.GenericObjectLayout"
            }
          ],
          "returns": {
            "type": "Promise",
            "generics": [
              {
                "type": "void"
              }
            ]
          },
          "this": {
            "type": "#/definitions/ExtensionContext"
          }
        },
        "beforeDestroy": {
          "optional": true,
          "type": "any",
          "kind": "function",
          "params": [],
          "this": {
            "type": "#/definitions/ExtensionContext"
          }
        },
        "support": {
          "optional": true,
          "kind": "object",
          "entries": {
            "export": {
              "description": "Enables or disables the ability to export the visualization extension as an image and as a PDF. Also handles the ability to allow the visualization extension to be included in a export from Storytelling (PowerPoint or PDF). When set to `true`, the Export as an image and the Export to PDF context menu options for the visualization extension. This also allow visualization extensions to be part of stories exported to PowerPoint or PDF on the Export story to PowerPoint and Export story to PDF context menu options",
              "optional": true,
              "defaultValue": false,
              "kind": "union",
              "items": [
                {
                  "type": "boolean"
                },
                {
                  "type": "#/definitions/Extension/definitions/supportFn"
                }
              ],
              "type": "any"
            },
            "exportData": {
              "description": "Enables or disables the ability to export data from the visualization extension and save it in an XLSX file. When set to `true`, the Export data context menu option is enabled for the visualization extension.",
              "optional": true,
              "defaultValue": true,
              "kind": "union",
              "items": [
                {
                  "type": "boolean"
                },
                {
                  "type": "#/definitions/Extension/definitions/supportFn"
                }
              ],
              "type": "any"
            },
            "snapshot": {
              "description": "Enables or disables the ability to take snapshots of the visualization extension for use in Data Storytelling.",
              "optional": true,
              "defaultValue": false,
              "kind": "union",
              "items": [
                {
                  "type": "boolean"
                },
                {
                  "type": "#/definitions/Extension/definitions/supportFn"
                }
              ],
              "type": "any"
            },
            "viewData": {
              "description": "Enables or disables the ability to show the visualization extension as a table.",
              "optional": true,
              "defaultValue": false,
              "kind": "union",
              "items": [
                {
                  "type": "boolean"
                },
                {
                  "type": "#/definitions/Extension/definitions/supportFn"
                }
              ],
              "type": "any",
              "examples": [
                "```js\nsupport: {\n  viewData: function(layout) {\n    if(layout.qHyperCube){\n      return (layout.qHyperCube.qDimensionInfo.length > 0) || (layout.qHyperCube.qMeasureInfo.length > 0);\n    }\n    return false;\n  }\n}\n```"
              ]
            }
          }
        }
      },
      "definitions": {
        "supportFn": {
          "kind": "interface",
          "params": [
            {
              "name": "data",
              "type": "QAE.GenericObjectLayout"
            }
          ],
          "returns": {
            "type": "boolean"
          },
          "entries": {}
        }
      }
    },
    "ExtensionContext": {
      "kind": "interface",
      "entries": {
        "backendApi": {
          "type": "#/definitions/BackendAPI"
        },
        "selectValues": {
          "description": "Selects or deselects a value. If not in selection mode, it is initialized and\nthe selection toolbar is displayed.",
          "kind": "function",
          "params": [
            {
              "name": "qDimNo",
              "description": "Dimension number 0 = first dimension.",
              "type": "number"
            },
            {
              "name": "qValues",
              "description": "Array of values (qElemNumber in the matrix from engine) to select or deselect.",
              "kind": "array",
              "items": {
                "type": "number"
              }
            },
            {
              "name": "qToggleMode",
              "description": "Toggle mode.",
              "type": "boolean"
            }
          ],
          "examples": [
            "$element.find('.selectable').on('qv-activate', function() {\n\tif(this.hasAttribute(\"data-value\")) {\n\t\tvar value = parseInt(this.getAttribute(\"data-value\"), 10), dim = 0;\n\t\t\tself.selectValues(dim, [value], true);\n\t\t\t$(this).toggleClass(\"selected\");\n\t\t}\n\t});"
          ]
        },
        "paint": {
          "kind": "function",
          "params": [
            {
              "name": "$element",
              "type": "jqLiteElement"
            },
            {
              "name": "layout",
              "type": "QAE.GenericObjectLayout"
            }
          ],
          "returns": {
            "type": "Promise",
            "generics": [
              {
                "type": "void"
              }
            ]
          },
          "this": {
            "type": "#/definitions/ExtensionContext"
          }
        },
        "updateData": {
          "kind": "function",
          "params": [
            {
              "name": "layout",
              "type": "QAE.GenericObjectLayout"
            }
          ],
          "returns": {
            "type": "Promise",
            "generics": [
              {
                "type": "void"
              }
            ]
          },
          "this": {
            "type": "#/definitions/ExtensionContext"
          }
        }
      }
    },
    "ExtensionFn": {
      "kind": "interface",
      "params": [
        {
          "name": "libs",
          "kind": "array",
          "items": {
            "type": "any"
          }
        }
      ],
      "returns": {
        "type": "#/definitions/Extension"
      },
      "entries": {}
    },
    "PP": {
      "description": "Property panel definitions",
      "kind": "namespace",
      "entries": {
        "Accordion": {
          "description": "The accordion definition property template can be used to add a custom accordion.",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'items'"
            },
            "component": {
              "kind": "literal",
              "value": "'accordion'"
            },
            "items": {
              "type": "object",
              "generics": [
                {
                  "type": "string"
                },
                {
                  "type": "#/definitions/PP/entries/Component"
                }
              ]
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            }
          }
        },
        "Button": {
          "description": "The button definition property template can be used to add a custom property of button type.",
          "kind": "interface",
          "entries": {
            "label": {
              "description": "The label that is displayed on the button.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            },
            "component": {
              "kind": "literal",
              "value": "'button'",
              "description": "Defines how the property is visualized in the property panel. Used to override the default component that comes with the `type` setting.",
              "type": "string"
            },
            "ref": {
              "optional": true,
              "type": "string",
              "description": "Name or ID used to reference a property."
            },
            "type": {
              "optional": true,
              "type": "string",
              "description": "Used for all custom property type definitions. Can be `'string'`, `'integer'`, `'number'`, `'array'` or `'boolean'`.",
              "kind": "union",
              "items": [
                {
                  "kind": "literal",
                  "value": "'string'"
                },
                {
                  "kind": "literal",
                  "value": "'integer'"
                },
                {
                  "kind": "literal",
                  "value": "'number'"
                },
                {
                  "kind": "literal",
                  "value": "'array'"
                },
                {
                  "kind": "literal",
                  "value": "'boolean'"
                }
              ]
            },
            "action": {
              "description": "Defines the action when clicking the button.",
              "optional": true,
              "type": "#/definitions/PP/entries/Button/definitions/actionFn"
            }
          },
          "definitions": {
            "actionFn": {
              "kind": "interface",
              "params": [
                {
                  "name": "data",
                  "type": "QAE.GenericObjectProperties"
                }
              ],
              "entries": {}
            }
          }
        },
        "Buttongroup": {
          "description": "The button group definition property template can be used to add a custom property of radio button type.",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'string'"
            },
            "component": {
              "kind": "literal",
              "value": "'buttongroup'",
              "description": "Defines how the property is visualized in the property panel. Used to override the default component that comes with the `type` setting.",
              "type": "string"
            },
            "ref": {
              "optional": true,
              "type": "string",
              "description": "Name or ID used to reference a property."
            },
            "options": {
              "kind": "union",
              "items": [
                {
                  "kind": "array",
                  "items": {
                    "type": "#/definitions/PP/entries/Buttongroup/definitions/option"
                  }
                },
                {
                  "type": "#/definitions/PP/entries/Buttongroup/definitions/optionFn"
                }
              ],
              "type": "any"
            },
            "defaultValue": {
              "description": "Defines the default value of your custom property.",
              "type": "any"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            }
          },
          "definitions": {
            "option": {
              "kind": "interface",
              "entries": {
                "value": {
                  "type": "any"
                },
                "label": {
                  "optional": true,
                  "defaultValue": "''",
                  "type": "string"
                },
                "tooltip": {
                  "optional": true,
                  "type": "string"
                }
              }
            },
            "optionFn": {
              "kind": "interface",
              "returns": {
                "type": "Promise",
                "generics": [
                  {
                    "kind": "array",
                    "items": {
                      "type": "#/definitions/PP/entries/Buttongroup/definitions/option"
                    }
                  }
                ]
              },
              "entries": {}
            }
          }
        },
        "Checkbox": {
          "description": "The check box definition property template can be used to add a custom property of check box type.",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'boolean'"
            },
            "component": {
              "kind": "literal",
              "value": "'checkbox'"
            },
            "ref": {
              "optional": true,
              "type": "string",
              "description": "Name or ID used to reference a property."
            },
            "defaultValue": {
              "description": "Used for defining the default value of your custom property.",
              "optional": true,
              "defaultValue": true,
              "type": "boolean"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            }
          }
        },
        "ColorPicker": {
          "description": "The color-picker definition property template can be used to add a custom color-picker property.",
          "stability": "experimental",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'integer'"
            },
            "component": {
              "kind": "literal",
              "value": "'color-picker'"
            },
            "ref": {
              "optional": true,
              "type": "string",
              "description": "Name or ID used to reference a property."
            },
            "defaultValue": {
              "description": "Used for defining the default value of your custom property.",
              "defaultValue": 3,
              "type": "integer"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            }
          }
        },
        "Component": {
          "kind": "union",
          "items": [
            {
              "type": "#/definitions/PP/entries/Items"
            },
            {
              "type": "#/definitions/PP/entries/Accordion"
            },
            {
              "type": "#/definitions/PP/entries/Button"
            },
            {
              "type": "#/definitions/PP/entries/Buttongroup"
            },
            {
              "type": "#/definitions/PP/entries/Checkbox"
            },
            {
              "type": "#/definitions/PP/entries/ColorPicker"
            },
            {
              "type": "#/definitions/PP/entries/Dropdown"
            },
            {
              "type": "#/definitions/PP/entries/Integer"
            },
            {
              "type": "#/definitions/PP/entries/Link"
            },
            {
              "type": "#/definitions/PP/entries/List"
            },
            {
              "type": "#/definitions/PP/entries/Media"
            },
            {
              "type": "#/definitions/PP/entries/Number"
            },
            {
              "type": "#/definitions/PP/entries/Radiobuttons"
            },
            {
              "type": "#/definitions/PP/entries/RangeSlider"
            },
            {
              "type": "#/definitions/PP/entries/Slider"
            },
            {
              "type": "#/definitions/PP/entries/String"
            },
            {
              "type": "#/definitions/PP/entries/Switch"
            },
            {
              "type": "#/definitions/PP/entries/Text"
            },
            {
              "type": "#/definitions/PP/entries/Textarea"
            },
            {
              "type": "#/definitions/PP/entries/DefaultDimensions"
            },
            {
              "type": "#/definitions/PP/entries/DefaultMeasures"
            },
            {
              "type": "#/definitions/PP/entries/DefaultSettings"
            },
            {
              "type": "#/definitions/PP/entries/DefaultSorting"
            },
            {
              "type": "#/definitions/PP/entries/DefaultAddons"
            }
          ],
          "type": "any"
        },
        "DefaultAddons": {
          "kind": "interface",
          "entries": {
            "uses": {
              "kind": "literal",
              "value": "'addons'"
            }
          },
          "examples": [
            "```js\n{\n  uses: 'addons',\n}"
          ]
        },
        "DefaultDimensions": {
          "kind": "interface",
          "entries": {
            "uses": {
              "kind": "literal",
              "value": "'dimensions'"
            },
            "min": {
              "description": "Defines the minimum number of dimensions.",
              "optional": true,
              "defaultValue": 1,
              "type": "number"
            },
            "max": {
              "description": "Defines the maximum number of dimensions.",
              "optional": true,
              "type": "number"
            }
          },
          "examples": [
            "```js\n{\n  uses: 'dimensions',\n  min: 1,\n  max: 2\n}"
          ]
        },
        "DefaultMeasures": {
          "kind": "interface",
          "entries": {
            "uses": {
              "kind": "literal",
              "value": "'measures'"
            },
            "min": {
              "description": "Defines the minimum number of measures.",
              "optional": true,
              "defaultValue": 1,
              "type": "number"
            },
            "max": {
              "description": "Defines the maximum number of measures.",
              "optional": true,
              "type": "number"
            }
          },
          "examples": [
            "```js\n{\n  uses: 'measures',\n  min: 1,\n  max: 2\n}"
          ]
        },
        "DefaultSettings": {
          "kind": "interface",
          "entries": {
            "uses": {
              "kind": "literal",
              "value": "'settings'"
            }
          },
          "examples": [
            "```js\n{\n  uses: 'settings',\n}"
          ]
        },
        "DefaultSorting": {
          "kind": "interface",
          "entries": {
            "uses": {
              "kind": "literal",
              "value": "'sorting'"
            }
          },
          "examples": [
            "```js\n{\n  uses: 'sorting',\n}"
          ]
        },
        "Dropdown": {
          "description": "The drop down list definition property template can be used to add a custom property of drop down list type.",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'string'"
            },
            "component": {
              "kind": "literal",
              "value": "'dropwdown'",
              "description": "Defines how the property is visualized in the property panel. Used to override the default component that comes with the `type` setting.",
              "type": "string"
            },
            "ref": {
              "optional": true,
              "type": "string",
              "description": "Name or ID used to reference a property."
            },
            "defaultValue": {
              "optional": true,
              "type": "any",
              "description": "Defines the default value of your custom property."
            },
            "options": {
              "kind": "union",
              "items": [
                {
                  "kind": "array",
                  "items": {
                    "type": "#/definitions/PP/entries/Dropdown/definitions/option"
                  }
                },
                {
                  "type": "#/definitions/PP/entries/Dropdown/definitions/optionFn"
                }
              ],
              "type": "any"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            }
          },
          "definitions": {
            "option": {
              "kind": "interface",
              "entries": {
                "value": {
                  "type": "any"
                },
                "label": {
                  "type": "string"
                }
              }
            },
            "optionFn": {
              "kind": "interface",
              "returns": {
                "kind": "union",
                "items": [
                  {
                    "kind": "array",
                    "items": {
                      "type": "#/definitions/PP/entries/Dropdown/definitions/option"
                    }
                  },
                  {
                    "type": "Promise",
                    "generics": [
                      {
                        "kind": "array",
                        "items": {
                          "type": "#/definitions/PP/entries/Dropdown/definitions/option"
                        }
                      }
                    ]
                  }
                ],
                "type": "any"
              },
              "entries": {}
            }
          }
        },
        "Integer": {
          "description": "The integer definition property template can be used to add a custom property of integer type.",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'integer'"
            },
            "component": {
              "kind": "literal",
              "value": "'integer'",
              "description": "Defines how the property is visualized in the property panel. Used to override the default component that comes with the `type` setting.",
              "type": "string"
            },
            "min": {
              "description": "Used for defining the minimum value of the property.",
              "optional": true,
              "type": "number"
            },
            "max": {
              "description": "Used for defining the maximum value of the property.",
              "optional": true,
              "type": "number"
            },
            "defaultValue": {
              "description": "Defines the default value of your custom property.",
              "type": "any"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            },
            "ref": {
              "description": "Name or ID used to reference a property.",
              "optional": true,
              "type": "string"
            }
          },
          "examples": [
            "```js\n{\n  type: 'integer',\n  label: 'Minimum',\n  ref: 'myProperties.min',\n  defaultValue: '15',\n  min: '10',\n  max: '20'\n}\n```"
          ]
        },
        "Items": {
          "kind": "interface",
          "entries": {
            "component": {
              "optional": true,
              "defaultValue": "'items'",
              "kind": "literal",
              "value": "'items'"
            },
            "items": {
              "type": "object",
              "generics": [
                {
                  "type": "string"
                },
                {
                  "type": "#/definitions/PP/entries/Component"
                }
              ]
            }
          }
        },
        "Link": {
          "description": "The link definition property template can be used to add a custom property of link type.",
          "kind": "interface",
          "entries": {
            "component": {
              "kind": "literal",
              "value": "'link'"
            },
            "label": {
              "optional": true,
              "type": "string",
              "description": "Defines the label that is displayed in the property panel.",
              "defaultValue": "''"
            },
            "url": {
              "description": "Defines the web address used in the link.",
              "type": "string"
            },
            "type": {
              "description": "Used for all custom property type definitions. Can be `'string'`, `'integer'`, `'number'`, `'array'` or `'boolean'`.",
              "kind": "union",
              "items": [
                {
                  "kind": "literal",
                  "value": "'string'"
                },
                {
                  "kind": "literal",
                  "value": "'integer'"
                },
                {
                  "kind": "literal",
                  "value": "'number'"
                },
                {
                  "kind": "literal",
                  "value": "'array'"
                },
                {
                  "kind": "literal",
                  "value": "'boolean'"
                }
              ],
              "type": "string"
            }
          }
        },
        "List": {
          "description": "The list definition property template can be used to add a custom property of list type.",
          "stability": "experimental",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'array'"
            },
            "component": {
              "kind": "literal",
              "value": "'list'"
            },
            "ref": {
              "optional": true,
              "type": "string",
              "description": "Name or ID used to reference a property."
            },
            "items": {
              "type": "object",
              "generics": [
                {
                  "type": "string"
                },
                {
                  "type": "#/definitions/PP/entries/Component"
                }
              ]
            },
            "itemTitleRef": {
              "description": "Defines the title of the section items.",
              "optional": true,
              "type": "string"
            },
            "addTranslation": {
              "description": "Defines a label of the button used to add new items.",
              "optional": true,
              "type": "string"
            },
            "allowAdd": {
              "description": "`true` adds a button for adding new items.",
              "optional": true,
              "type": "boolean"
            },
            "allowMove": {
              "description": "`true` enables the ability to move the item in the properties panel.",
              "optional": true,
              "type": "boolean"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            }
          }
        },
        "Media": {
          "description": "The media definition property template can be used to add a custom property of media type.",
          "stability": "experimental",
          "kind": "interface",
          "entries": {
            "component": {
              "kind": "literal",
              "value": "'media'"
            },
            "type": {
              "kind": "literal",
              "value": "'string'"
            },
            "label": {
              "optional": true,
              "type": "string",
              "description": "Defines the label that is displayed in the property panel.",
              "defaultValue": "''"
            },
            "layoutRef": {
              "description": "Name or Id used to reference the layout.",
              "type": "string"
            }
          },
          "examples": [
            "```js\n{\n  label:\"My media\",\n  component: \"media\",\n  ref: \"myMedia\",\n  layoutRef: \"myMedia\",\n  type: \"string\"\n}\n```"
          ]
        },
        "Number": {
          "description": "The number definition property template can be used to add a custom property of number type.",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'number'"
            },
            "component": {
              "kind": "literal",
              "value": "'number'",
              "description": "Defines how the property is visualized in the property panel. Used to override the default component that comes with the `type` setting.",
              "type": "string"
            },
            "min": {
              "description": "Used for defining the minimum value of the property.",
              "optional": true,
              "type": "number"
            },
            "max": {
              "description": "Used for defining the maximum value of the property.",
              "optional": true,
              "type": "number"
            },
            "defaultValue": {
              "description": "Defines the default value of your custom property.",
              "type": "any"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            },
            "ref": {
              "description": "Name or ID used to reference a property.",
              "optional": true,
              "type": "string"
            }
          }
        },
        "Radiobuttons": {
          "description": "The radio button definition property template can be used to add a custom property of radio button type.",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'string'"
            },
            "component": {
              "kind": "literal",
              "value": "'radiobuttons'",
              "description": "Defines how the property is visualized in the property panel. Used to override the default component that comes with the `type` setting.",
              "type": "string"
            },
            "ref": {
              "optional": true,
              "type": "string",
              "description": "Name or ID used to reference a property."
            },
            "options": {
              "kind": "union",
              "items": [
                {
                  "kind": "array",
                  "items": {
                    "type": "#/definitions/PP/entries/Radiobuttons/definitions/option"
                  }
                },
                {
                  "type": "#/definitions/PP/entries/Radiobuttons/definitions/optionFn"
                }
              ],
              "type": "any"
            },
            "defaultValue": {
              "description": "Defines the default value of your custom property.",
              "type": "any"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            }
          },
          "definitions": {
            "option": {
              "kind": "interface",
              "entries": {
                "value": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                }
              }
            },
            "optionFn": {
              "kind": "interface",
              "returns": {
                "kind": "union",
                "items": [
                  {
                    "kind": "array",
                    "items": {
                      "type": "#/definitions/PP/entries/Radiobuttons/definitions/option"
                    }
                  },
                  {
                    "type": "Promise",
                    "generics": [
                      {
                        "kind": "array",
                        "items": {
                          "type": "#/definitions/PP/entries/Radiobuttons/definitions/option"
                        }
                      }
                    ]
                  }
                ],
                "type": "any"
              },
              "entries": {}
            }
          }
        },
        "RangeSlider": {
          "description": "The range-slider definition property template can be used to add a custom property of range-slider type.",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'array'"
            },
            "component": {
              "kind": "literal",
              "value": "'slider'",
              "description": "Defines how the property is visualized in the property panel. Used to override the default component that comes with the `type` setting.",
              "type": "string"
            },
            "defaultValue": {
              "description": "Defines the default value of your custom property.",
              "kind": "array",
              "items": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ]
            },
            "min": {
              "description": "Defines the minimum value of the property.",
              "optional": true,
              "type": "number"
            },
            "max": {
              "description": "Defines the maximum value of the property.",
              "optional": true,
              "type": "number"
            },
            "step": {
              "description": "Defines the step value of the property.",
              "optional": true,
              "type": "number"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            },
            "ref": {
              "description": "Name or ID used to reference a property.",
              "optional": true,
              "type": "string"
            }
          }
        },
        "Slider": {
          "description": "The slider definition property template can be used to add a custom property of range-slider type.",
          "kind": "interface",
          "entries": {
            "type": {
              "description": "This field is mandatory and should always be `\"number\"` for a slider property type definition.\n> The slider effect is achieved by defining the `component` field to `'slider'`.",
              "kind": "literal",
              "value": "'number'"
            },
            "component": {
              "kind": "literal",
              "value": "'slider'",
              "description": "Defines how the property is visualized in the property panel. Used to override the default component that comes with the `type` setting.",
              "type": "string"
            },
            "min": {
              "description": "Defines the minimum value of the property.",
              "optional": true,
              "type": "number"
            },
            "max": {
              "description": "Defines the maximum value of the property.",
              "optional": true,
              "type": "number"
            },
            "step": {
              "description": "Defines the step value of the property.",
              "optional": true,
              "type": "number"
            },
            "defaultValue": {
              "description": "Defines the default value of your custom property.",
              "type": "any"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            },
            "ref": {
              "description": "Name or ID used to reference a property.",
              "optional": true,
              "type": "string"
            }
          }
        },
        "String": {
          "description": "The string definition property template can be used to add a custom property of string type.",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'string'"
            },
            "component": {
              "kind": "literal",
              "value": "'string'"
            },
            "expression": {
              "description": "Defines if values starting with `=` will be treated as expressions that are evaluated by the Qlik Sense Engine.\n- `\"always\"`: the property will always be evaluated as an expression meaning that the property will be the value of for example `\"Avg(Sales)\"`.\n- `\"optional\"`: the property will only be evaluated as an expression if a `=` sign is leading the expression. For example `\"Avg(Sales)\"` will be presented as the string `\"Avg(Sales)\"` while `\"=Avg(Sales)\"` will be evaluated as an expression and presented as either `5` or `\"5\"` depending on if it is used in a Number/Integer component or in a String component.\n- `\"\"`: If the setting is left empty or not defined at all, the property will not be evaluated as an expression meaning that the property will be the string `\"Avg(Sales)\"`.",
              "optional": true,
              "defaultValue": "''",
              "kind": "union",
              "items": [
                {
                  "kind": "literal",
                  "value": "''"
                },
                {
                  "kind": "literal",
                  "value": "'always'"
                },
                {
                  "kind": "literal",
                  "value": "'optional'"
                }
              ],
              "type": "string"
            },
            "show": {
              "optional": true,
              "defaultValue": true,
              "kind": "union",
              "items": [
                {
                  "type": "boolean"
                },
                {
                  "type": "#/definitions/PP/entries/String/definitions/showFn"
                }
              ],
              "type": "any"
            },
            "maxLength": {
              "description": "The maximum number of characters the string can consist of.",
              "optional": true,
              "type": "number"
            },
            "defaultValue": {
              "description": "Defines the default value of your custom property.",
              "type": "any"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            },
            "ref": {
              "description": "Name or ID used to reference a property.",
              "optional": true,
              "type": "string"
            }
          },
          "definitions": {
            "showFn": {
              "kind": "interface",
              "returns": {
                "type": "boolean"
              },
              "entries": {}
            }
          }
        },
        "Switch": {
          "description": "The switch definition property template can be used to add a custom property of switch type.",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'boolean'"
            },
            "component": {
              "kind": "literal",
              "value": "'switch'"
            },
            "defaultValue": {
              "description": "Used for defining the default value of your custom property.",
              "defaultValue": true,
              "type": "boolean"
            },
            "options": {
              "kind": "array",
              "items": [
                {
                  "type": "#/definitions/PP/entries/Switch/definitions/option"
                },
                {
                  "type": "#/definitions/PP/entries/Switch/definitions/option"
                }
              ]
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            },
            "ref": {
              "description": "Name or ID used to reference a property.",
              "optional": true,
              "type": "string"
            }
          },
          "definitions": {
            "option": {
              "kind": "interface",
              "entries": {
                "value": {
                  "type": "boolean"
                },
                "label": {
                  "type": "string"
                }
              }
            }
          }
        },
        "Text": {
          "description": "The text definition property template can be used to add a custom property of text type.",
          "kind": "interface",
          "entries": {
            "type": {
              "optional": true,
              "type": "string",
              "description": "Used for all custom property type definitions. Can be `'string'`, `'integer'`, `'number'`, `'array'` or `'boolean'`.",
              "kind": "union",
              "items": [
                {
                  "kind": "literal",
                  "value": "'string'"
                },
                {
                  "kind": "literal",
                  "value": "'integer'"
                },
                {
                  "kind": "literal",
                  "value": "'number'"
                },
                {
                  "kind": "literal",
                  "value": "'array'"
                },
                {
                  "kind": "literal",
                  "value": "'boolean'"
                }
              ]
            },
            "component": {
              "kind": "literal",
              "value": "'text'"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            }
          }
        },
        "Textarea": {
          "description": "The text area definition property template can be used to add a custom property of text area type.",
          "kind": "interface",
          "entries": {
            "type": {
              "kind": "literal",
              "value": "'textarea'"
            },
            "component": {
              "kind": "literal",
              "value": "'textarea'"
            },
            "rows": {
              "description": "The amount of rows in the text area component.",
              "optional": true,
              "defaultValue": 3,
              "type": "number"
            },
            "maxLength": {
              "description": "Defines the maximum number of characters in the text.",
              "optional": true,
              "defaultValue": 512,
              "type": "number"
            },
            "show": {
              "optional": true,
              "defaultValue": true,
              "kind": "union",
              "items": [
                {
                  "type": "boolean"
                },
                {
                  "type": "#/definitions/PP/entries/Textarea/definitions/showFn"
                }
              ],
              "type": "any"
            },
            "defaultValue": {
              "description": "Defines the default value of your custom property.",
              "type": "any"
            },
            "label": {
              "description": "Defines the label that is displayed in the property panel.",
              "optional": true,
              "defaultValue": "''",
              "type": "string"
            },
            "ref": {
              "description": "Name or ID used to reference a property.",
              "optional": true,
              "type": "string"
            }
          },
          "definitions": {
            "showFn": {
              "kind": "interface",
              "returns": {
                "type": "boolean"
              },
              "entries": {}
            }
          }
        }
      }
    }
  }
}