survey-analytics 1.9.30 → 1.9.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,8 +1,5 @@
1
- ![SurveyJS Analytics](https://raw.githubusercontent.com/surveyjs/survey-analytics/master/docs/images/survey-analytics-note.png)
2
-
3
1
  # SurveyJS Analytics
4
2
 
5
-
6
3
  [![Build Status](https://dev.azure.com/SurveyJS/SurveyJS%20Integration%20Tests/_apis/build/status/SurveyJS%20Library?branchName=master)](https://dev.azure.com/SurveyJS/SurveyJS%20Integration%20Tests/_build/latest?definitionId=7&branchName=master)
7
4
  <a href="https://github.com/DevExpress/testcafe">
8
5
  <img alt="Tested with TestCafe" src="https://img.shields.io/badge/tested%20with-TestCafe-2fa4cf.svg">
@@ -14,83 +11,77 @@
14
11
  <img alt="Closed issues" title="Closed issues" src="https://img.shields.io/github/issues-closed/surveyjs/survey-analytics.svg">
15
12
  </a>
16
13
 
17
- SurveyJS Analytics library allows to render survey results as charts or tables
18
-
19
- ## Main Features
14
+ SurveyJS Analytics visualizes survey results and allows users to analyze them.
20
15
 
21
- - Count answers and render results as charts for the select type questions
22
- - Count answers and render results as gauge for range type question
23
- - Three different types of charts: bar, pie and line
24
- - Wordcloud for text questions representation
25
- - Interactive filtering for the select type questions
26
- - Flexible layout and customizable colors
16
+ ![SurveyJS Analytics](docs/images/survey-analytics-note.png)
27
17
 
28
- ## Examples
18
+ ## Features
29
19
 
30
- You may review the [analytics example](https://surveyjstest.azurewebsites.net/Examples/Library/?id=analytics-nps) or check this standalone plnkr [example](https://plnkr.co/edit/bCk64wdvOLShXkPyvGfk?p=preview).
20
+ - Supported chart types:
21
+ - Bar
22
+ - Pie
23
+ - Line
24
+ - Gauge
25
+ - Bullet
26
+ - Scatter
27
+ - Word cloud
28
+ - Interactive filtering
29
+ - Customizable colors
30
+ - Dynamic layout
31
+ - Chart reordering via drag and drop
31
32
 
32
- Other live examples:
33
-
34
- - [how to show chanrt for the one question](https://next.plnkr.co/edit/3yIIFnbcn8RMJQHY?preview).
35
-
36
- ## Licensing
33
+ ## Get Started
37
34
 
38
- Unlike SurveyJS Library itself, this library is distributed under commercial license. Please read more about licensing on our [license page](https://surveyjstest.azurewebsites.net/Licenses#Analytics).
35
+ - [Angular](https://surveyjs.io/Documentation/Analytics?id=get-started-angular)
36
+ - [Vue](https://surveyjs.io/Documentation/Analytics?id=get-started-vue)
37
+ - [React](https://surveyjs.io/Documentation/Analytics?id=get-started-react)
38
+ - [Knockout / jQuery](https://surveyjs.io/Documentation/Analytics?id=get-started-knockout-jquery)
39
39
 
40
- ## Support
40
+ ## Resources
41
41
 
42
- If you feel that we have missed some important functionality or found a bug, please write us [here](https://github.com/surveyjs/survey-analytics/issues) on our [support desk](https://surveyjs.answerdesk.io/).
42
+ - [Website](https://surveyjs.io/)
43
+ - [Documentation](https://surveyjs.io/Documentation/Analytics)
44
+ - [Live Examples](https://surveyjs.io/Examples/Analytics)
45
+ - [What's New](https://surveyjs.io/WhatsNew)
43
46
 
44
- ## Building survey-analytics from sources
47
+ ## Build SurveyJS Analytics from Sources
45
48
 
46
- To build library yourself:
47
-
48
- 1. **Clone the repo from GitHub**
49
+ 1. **Clone the repo**
49
50
 
50
51
  ```
51
52
  git clone https://github.com/surveyjs/survey-analytics.git
52
53
  cd survey-analytics
53
54
  ```
54
55
 
55
- 2. **Acquire build dependencies.** Make sure you have [Node.js](http://nodejs.org/) installed on your workstation. You need a version of Node.js greater than 6.0.0 and npm greater than 2.7.0. This is only needed to _build_ surveyjs from sources.
56
+ 1. **Install dependencies**
57
+ Make sure that you have Node.js v6.0.0 or later and npm v2.7.0 or later installed.
56
58
 
57
59
  ```
58
60
  npm install
59
61
  ```
60
62
 
61
- 3. **Build the library**
63
+ 1. **Build the library**
62
64
 
63
65
  ```
64
66
  npm run build_prod
65
67
  ```
66
68
 
67
- After that you should have the library at 'packages' directory.
69
+ You can find the built scripts and style sheets in the `packages` folder.
68
70
 
69
- 4. **Run samples**
71
+ 1. **Run test examples**
70
72
 
71
73
  ```
72
74
  npm start
73
75
  ```
74
76
 
75
- This command will run local http server at the http://localhost:7777
77
+ This command runs a local HTTP server at http://localhost:8080/.
76
78
 
77
- You can open http://localhost:7777/examples/examples
79
+ 1. **Run unit tests**
78
80
 
79
- 5. **Run unit tests**
80
81
  ```
81
82
  npm test
82
83
  ```
83
- This command will run unit tests
84
-
85
- ## Nearest plans
86
-
87
- Our task list of Survey Analytics pack:
88
84
 
89
- - Implement data providing server side prototype
90
- - Introduce (or use 3rd party) data processing engine for survey analytics
91
- - Support high load scenario - process at least billion records
92
-
93
- ## Limitations
85
+ ## Licensing
94
86
 
95
- - SurveyJS Analytics doesn't support objects as values (e.g. of dropdown, radiogroup and other select question items)
96
- - WordCloud visualizer is too slow for large texts and significant answers count
87
+ SurveyJS Analytics is **not available for free commercial usage**. If you want to integrate it into your application, you must purchase a [commercial license](/Licenses#SurveyCreator).
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "test_debug": "node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand",
7
7
  "testcafe": "concurrently \"http-server\" \"testcafe chrome testCafe/\"",
8
8
  "testcafe_ci": "http-server --silent & testcafe chrome:headless testCafe/ --reporter minimal,dashboard",
9
- "testcafe_file": "concurrently \"http-server --silent\" \"testcafe chrome testCafe/summary/basetests.js --selector-timeout 1500 --reporter minimal --debug-mode\"",
9
+ "testcafe:file": "concurrently \"http-server --silent\" \"testcafe chrome testCafe/tabulator/basetests.js --selector-timeout 1500 --reporter minimal --debug-mode\"",
10
10
  "release": "standard-version --message \"Release: %s [skip ci]\" ",
11
11
  "doc_gen": "node doc_generator/lib_docgenerator.js src/index.ts",
12
12
  "doc_update": "chmod +x ./docupdate_npm.sh && ./docupdate_npm.sh",
@@ -16,7 +16,7 @@
16
16
  "lint": "eslint ./src --quiet",
17
17
  "pre-push-check": "npm run lint && npm run test"
18
18
  },
19
- "version": "1.9.30",
19
+ "version": "1.9.33",
20
20
  "name": "survey-analytics",
21
21
  "description": "SurveyJS analytics Library.",
22
22
  "main": "survey.analytics.js",
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - SurveyJS Analytics library v1.9.30
2
+ * surveyjs - SurveyJS Analytics library v1.9.33
3
3
  * Copyright (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
@@ -90,6 +90,7 @@
90
90
  vertical-align: middle;
91
91
  cursor: pointer;
92
92
  border: 1px solid transparent;
93
+ white-space: nowrap;
93
94
  margin: 0 10px; }
94
95
  .sa-toolbar__button:hover {
95
96
  border-color: #e7e7e7;
@@ -274,4 +275,4 @@
274
275
  background-color: #1ab394; }
275
276
 
276
277
 
277
- /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bcGMtbmFtZV0vLi9zcmMvdmlzdWFsaXplckJhc2Uuc2NzcyIsIndlYnBhY2s6Ly9bcGMtbmFtZV0vLi9zcmMvdmlzdWFsaXphdGlvblBhbmVsLnNjc3MiLCJ3ZWJwYWNrOi8vW3BjLW5hbWVdLy4vc3JjL19nbG9iYWxzLnNjc3MiLCJ3ZWJwYWNrOi8vW3BjLW5hbWVdLy4vc3JjL3RleHQuc2NzcyIsIndlYnBhY2s6Ly9bcGMtbmFtZV0vLi9zcmMvY2hvaWNlcy10YWJsZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0E7RUFDRSx1Q0FBdUM7RUFDdkMscUJBQXFCO0VBQ3JCLGdCQUFnQjtFQUNoQixXQUFXOztBQUdiO0VBQ0UsZ0JBQWdCOztBQUdsQjtFQUNFLHFCQUFxQjtFQUNyQixvQkFBb0I7RUFDcEIsZUFBZTtFQUNmLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIsc0JBQXNCO0VBQ3RCLFNBQVM7O0FBR1g7RUFDRSxnQkFBZ0I7O0FDekJsQjtFQUNFLGFBQWE7O0FBR2Y7RUFDRSxrQkFBa0I7O0FBR3BCO0VBQ0UsV0FBVztFQUNYLHNCQUFzQjtFQUN0QjtJQUhGO01BSUksVUFBVSxJQUViOztBQUVEO0VBQ0UscUJBQXFCO0VBQ3JCLFdBQVc7RUFDWCxtQkFBbUI7RUFDbkIsc0JBQXNCO0VBQ3RCLGdCQUFnQjtFQUNoQixZQUFZOztBQUdkO0VBQ0Usa0JBQWtCO0VBRWxCO0lBSEY7TUFJSSxzQkFBc0IsSUFFekI7O0FBRUQ7RUFDRSx5QkNwQndCO0VEcUJ4QixhQUFhOztBQUdmO0VBQ0UsaUJBQWlCO0VBQ2pCLG9CQUFvQjtFQUNwQixlQUFlO0VBQ2YsaUJBQWlCO0VBQ2pCLGNDakNrQjtFRGtDbEIsU0FBUztFQUNULGtCQUFrQjs7QUFHcEI7RUFDRSxZQUFZO0VBRGQ7SUFHSSxZQUFZO0lBQ1osY0FBYztJQUNkLFlBQVk7SUFDWixXQUFXO0lBQ1gsWUFBWTtJQUNaLDBWQUEwVjs7QUFJOVY7RUFDRSx1Q0FBdUM7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QkFBZ0I7RUFDaEIsWUFBWTtFQUNaLHlCRnZDa0I7O0FFeUNwQjtFQUNFLFlBQVk7RUFDWix5QkYzQ2tCIiwiZmlsZSI6InN1cnZleS5hbmFseXRpY3MuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCBcImdsb2JhbHNcIjtcblxuLnNhLXZpc3VhbGl6ZXJfX3Rvb2xiYXIge1xufVxuXG4uc2EtdmlzdWFsaXplcl9fY29udGVudCB7XG4gIGZvbnQtZmFtaWx5OiBTZWdvZVVJLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnNhLXZpc3VhbGl6ZXJfX2Zvb3RlciB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG59XG5cbi5zYS12aXN1YWxpemVyX19mb290ZXItdGl0bGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiBSYWxld2F5O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiAjNDA0MDQwO1xuICBsaW5lLWhlaWdodDogMzRweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luOiAwO1xufVxuXG4uc2EtdmlzdWFsaXplcl9fZm9vdGVyLWNvbnRlbnQge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuIiwiQGltcG9ydCBcImdsb2JhbHNcIjtcblxuLnNhLXBhbmVsX19oZWFkZXIge1xuICBtYXJnaW46IDAgMWVtO1xufVxuXG4uc2EtZ3JpZCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnNhLWdyaWRfX2dyaWQtc2l6ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTQwMHB4KSB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxufVxuXG4uc2EtcXVlc3Rpb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nOiAxZW07XG59XG5cbi5zYS1xdWVzdGlvbi1sYXlvdXRlZCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxNDAwcHgpIHtcbiAgICB3aWR0aDogY2FsYyg1MCUgLSAxcHgpO1xuICB9XG59XG5cbi5zYS1xdWVzdGlvbl9fY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICBwYWRkaW5nOiAyMHB4O1xufVxuXG4uc2EtcXVlc3Rpb25fX3RpdGxlIHtcbiAgbWFyZ2luLWxlZnQ6IDMwcHg7XG4gIGZvbnQtZmFtaWx5OiBSYWxld2F5O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogJHRleHQtY29sb3I7XG4gIG1hcmdpbjogMDtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuXG4uc2EtcXVlc3Rpb25fX3RpdGxlLS1kcmFnZ2FibGUge1xuICBjdXJzb3I6IG1vdmU7XG4gICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB3aWR0aDogMTVweDtcbiAgICBoZWlnaHQ6IDE1cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ2clM0UlM0Nwb2x5Z29uIHN0eWxlPSdmaWxsOiAlMjMxYWIzOTQnIHBvaW50cz0nMTMsNSAxMiw2IDEzLDcgOSw3IDksMyAxMCw0IDExLDMgOCwwIDUsMyA2LDQgNywzIDcsNyAzLDcgNCw2IDMsNSAwLDggMywxMSA0LDEwIDMsOSA3LDkgNywxMyA2LDEyIDUsMTMgOCwxNiAxMSwxMyAxMCwxMiA5LDEzIDksOSAxMyw5IDEyLDEwIDEzLDExIDE2LDggJy8lM0UlM0MvZyUzRSUzQy9zdmclM0UgXCIpO1xuICB9XG59XG5cbi5zYS10b29sYmFyIHtcbiAgZm9udC1mYW1pbHk6IFNlZ29lVUksIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiAkdGV4dC1jb2xvcjtcbiAgbGluZS1oZWlnaHQ6IDM0cHg7XG4gIG1hcmdpbi1ib3R0b206IDI1cHg7XG4gICYgPiAqOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgfVxufVxuXG4uc2EtdG9vbGJhcl9fYnV0dG9uIHtcbiAgZm9udC1mYW1pbHk6IFNlZ29lVUksIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDE0cHg7XG4gIHBhZGRpbmc6IDhweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgJjpob3ZlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgIGJhY2tncm91bmQtYmxlbmQtbW9kZTogZGFya2VuO1xuICB9XG4gIG1hcmdpbjogMCAxMHB4O1xuICAmOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxuICAmOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuXG4uc2EtdG9vbGJhcl9fc3ZnLWJ1dHRvbiB7XG4gIHdpZHRoOiAxNXB4O1xuICBoZWlnaHQ6IDE1cHg7XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB1c2Uge1xuICAgIGZpbGw6ICRzdmctY29sb3I7XG4gIH1cbiAgJjpob3ZlciB7XG4gICAgdXNlIHtcbiAgICAgIGZpbGw6ICRzdmctaG92ZXItY29sb3I7XG4gICAgfVxuICB9XG4gIHN2ZyB7XG4gICAgd2lkdGg6IDE1cHg7XG4gICAgaGVpZ2h0OiAxNXB4O1xuICB9XG59XG5cbi5zYS10b29sYmFyX19idXR0b24tLXJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG4vLyBjdXN0b20gc2VsZWN0XG4uc2EtcXVlc3Rpb25fX3NlbGVjdC13cmFwcGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi13aWR0aDogMjAwcHg7XG4gIG1heC13aWR0aDogMzAwcHg7XG5cbiAgLnNhLXF1ZXN0aW9uX19zZWxlY3Qge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgIGJhY2tncm91bmQ6ICR0ZXh0LWNvbG9yLWludmVyc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgIGhlaWdodDogJGZvcm0tZWxlbWVudC1oZWlnaHQ7XG4gICAgcGFkZGluZzogNXB4IDIzcHggNXB4IDE1cHg7XG4gICAgbGluZS1oZWlnaHQ6IGluaXRpYWw7XG5cbiAgICAmOjotbXMtZXhwYW5kIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgJjpmb2N1cyB7XG4gICAgICBvdXRsaW5lOiAwO1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG5cbiAgICAmOmRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgfVxuICB9XG5cbiAgJjpiZWZvcmUge1xuICAgIG1hcmdpbi10b3A6IC00cHg7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IDEwcHg7XG4gICAgei1pbmRleDogMTtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogNHB4O1xuICAgIGhlaWdodDogNHB4O1xuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICR0ZXh0LWNvbG9yO1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkdGV4dC1jb2xvcjtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIH1cbn1cbi8vIEVPIGN1c3RvbSBzZWxlY3RcblxuLnNhLXF1ZXN0aW9uX19maWx0ZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAgMWVtO1xufVxuXG4uc2EtcXVlc3Rpb25fX2ZpbHRlci10ZXh0IHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXRvcDogMXB4O1xufVxuXG4uc2EtY29tbWVyY2lhbCB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgcGFkZGluZzogMWVtIDAgMC41ZW0gMmVtO1xuICBzdmcge1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICBmaWxsOiAkbWFpbi1jb2xvcjtcbiAgfVxufVxuLnNhLWNvbW1lcmNpYWxfX3RleHQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogJG1haW4tY29sb3I7XG59XG4uc2EtY29tbWVyY2lhbF9fcHJvZHVjdCB7XG4gIHBhZGRpbmctbGVmdDogMC41ZW07XG59XG5cbi8qIGxhdGluLWV4dCAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiBcIlJhbGV3YXlcIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IGxvY2FsKFwiUmFsZXdheVwiKSwgbG9jYWwoXCJSYWxld2F5LVJlZ3VsYXJcIiksXG4gICAgdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9yYWxld2F5L3YxNC8xUHR1Zzh6WVNfU0tnZ1BOeUNNSVQ1bHUud29mZjIpXG4gICAgICBmb3JtYXQoXCJ3b2ZmMlwiKTtcbiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMDI1OSwgVSsxRTAwLTFFRkYsIFUrMjAyMCwgVSsyMEEwLTIwQUIsXG4gICAgVSsyMEFELTIwQ0YsIFUrMjExMywgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGO1xufVxuLyogbGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJSYWxld2F5XCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiBsb2NhbChcIlJhbGV3YXlcIiksIGxvY2FsKFwiUmFsZXdheS1SZWd1bGFyXCIpLFxuICAgIHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvcmFsZXdheS92MTQvMVB0dWc4ellTX1NLZ2dQTnlDMElUdy53b2ZmMilcbiAgICAgIGZvcm1hdChcIndvZmYyXCIpO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLFxuICAgIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIxMjIsIFUrMjE5MSwgVSsyMTkzLCBVKzIyMTIsIFUrMjIxNSxcbiAgICBVK0ZFRkYsIFUrRkZGRDtcbn1cbi8qIGxhdGluLWV4dCAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiBcIlJhbGV3YXlcIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNzAwO1xuICBzcmM6IGxvY2FsKFwiUmFsZXdheSBCb2xkXCIpLCBsb2NhbChcIlJhbGV3YXktQm9sZFwiKSxcbiAgICB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL3JhbGV3YXkvdjE0LzFQdHJnOHpZU19TS2dnUE53Sll0V3FoUEFNaWYud29mZjIpXG4gICAgICBmb3JtYXQoXCJ3b2ZmMlwiKTtcbiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMDI1OSwgVSsxRTAwLTFFRkYsIFUrMjAyMCwgVSsyMEEwLTIwQUIsXG4gICAgVSsyMEFELTIwQ0YsIFUrMjExMywgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGO1xufVxuLyogbGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJSYWxld2F5XCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgc3JjOiBsb2NhbChcIlJhbGV3YXkgQm9sZFwiKSwgbG9jYWwoXCJSYWxld2F5LUJvbGRcIiksXG4gICAgdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9yYWxld2F5L3YxNC8xUHRyZzh6WVNfU0tnZ1BOd0pZdFdxWlBBQS53b2ZmMilcbiAgICAgIGZvcm1hdChcIndvZmYyXCIpO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLFxuICAgIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIxMjIsIFUrMjE5MSwgVSsyMTkzLCBVKzIyMTIsIFUrMjIxNSxcbiAgICBVK0ZFRkYsIFUrRkZGRDtcbn1cbiIsIiRtYWluLWNvbG9yOiAjMWFiMzk0O1xuJGF1eGlsaWFyeS1jb2xvcjogI2ZmOTgxNDtcbiRhdXhpbGlhcnktY29sb3ItMTogIzY2NjY2NjtcbiRhdXhpbGlhcnktY29sb3ItMjogIzE5NDhiMztcbiRkYW5nZXItY29sb3I6ICNkOTUzNGY7XG4kZGlzYWJsZWQtY29sb3I6ICNiMGIwYjA7XG5cbiRibHVlLWNvbG9yOiAjMzk0Y2ZmO1xuJHB1cnBsZS1jb2xvcjogI2FhNDJkMDtcbiRncmVlbi1jb2xvcjogIzQxYzAyYztcblxuJHRleHQtY29sb3ItaW52ZXJzZTogI2ZmZjtcbiR0ZXh0LWNvbG9yOiAjNDA0MDQwO1xuXG4kY29udGVudC1tYXgtd2lkdGg6IDExNzBweDtcblxuJGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4kYmFja2dyb3VuZC1jb2xvci1kYXJrOiAjZWVlZWVlO1xuJGJhY2tncm91bmQtZGlzYWJsZWQtY29sb3I6ICNiN2I3Yjc7XG5cbiRib3JkZXItY29sb3I6ICNlN2U3ZTc7XG5cbiRmb3JtLWVsZW1lbnQtaGVpZ2h0OiAzNHB4O1xuXG4kc3ZnLWNvbG9yOiByZ2JhKCM5ZjlmOWYsIDAuNCk7XG4kc3ZnLWhvdmVyLWNvbG9yOiAjOWY5ZjlmO1xuIiwiQGltcG9ydCBcImdsb2JhbHNcIjtcblxuLnNhLXRleHQtdGFibGVfX2NvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgbWF4LWhlaWdodDogNTAwcHg7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4uc2EtdGV4dC10YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBmb250LWZhbWlseTogU2Vnb2VVSSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICBib3JkZXItd2lkdGg6IDFweDtcblx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG59XG5cbi5zYS10ZXh0LXRhYmxlX19jZWxsIHtcblx0Ym9yZGVyLXdpZHRoOiAxcHg7XG5cdHBhZGRpbmc6IDhweDtcblx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0Ym9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvcjtcbiAgbWluLWhlaWdodDogJGZvcm0tZWxlbWVudC1oZWlnaHQ7XG59XG4iLCJAaW1wb3J0IFwiZ2xvYmFsc1wiO1xuXG4uc2EtY2hvaWNlcy10YWJsZV9fY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDIwMHB4O1xuICBtYXgtaGVpZ2h0OiA1MDBweDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi5zYS1jaG9pY2VzLXRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBTZWdvZVVJLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogJHRleHQtY29sb3I7XG5cdC8vIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG4uc2EtY2hvaWNlcy10YWJsZV9fY2VsbCB7XG5cdGJvcmRlci13aWR0aDogMXB4O1xuXHRwYWRkaW5nOiA4cHg7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIG1pbi1oZWlnaHQ6ICRmb3JtLWVsZW1lbnQtaGVpZ2h0O1xufVxuXG4uc2EtY2hvaWNlcy10YWJsZV9fY2VsbC12YWx1ZSB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBtaW4td2lkdGg6IDMwcHg7XG59XG5cbi5zYS1jaG9pY2VzLXRhYmxlX19jZWxsLWhlYWRlciB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uc2EtY2hvaWNlcy1zcGFya2xpbmUge1xuICBtaW4td2lkdGg6IDEwMHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRtYWluLWNvbG9yO1xufVxuLnNhLWNob2ljZXMtc3BhcmtsaW5lLXZhbHVlIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcbn0iXSwic291cmNlUm9vdCI6IiJ9*/
278
+ /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bcGMtbmFtZV0vLi9zcmMvdmlzdWFsaXplckJhc2Uuc2NzcyIsIndlYnBhY2s6Ly9bcGMtbmFtZV0vLi9zcmMvdmlzdWFsaXphdGlvblBhbmVsLnNjc3MiLCJ3ZWJwYWNrOi8vW3BjLW5hbWVdLy4vc3JjL19nbG9iYWxzLnNjc3MiLCJ3ZWJwYWNrOi8vW3BjLW5hbWVdLy4vc3JjL3RleHQuc2NzcyIsIndlYnBhY2s6Ly9bcGMtbmFtZV0vLi9zcmMvY2hvaWNlcy10YWJsZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0E7RUFDRSx1Q0FBdUM7RUFDdkMscUJBQXFCO0VBQ3JCLGdCQUFnQjtFQUNoQixXQUFXOztBQUdiO0VBQ0UsZ0JBQWdCOztBQUdsQjtFQUNFLHFCQUFxQjtFQUNyQixvQkFBb0I7RUFDcEIsZUFBZTtFQUNmLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIsc0JBQXNCO0VBQ3RCLFNBQVM7O0FBR1g7RUFDRSxnQkFBZ0I7O0FDekJsQjtFQUNFLGFBQWE7O0FBR2Y7RUFDRSxrQkFBa0I7O0FBR3BCO0VBQ0UsV0FBVztFQUNYLHNCQUFzQjtFQUN0QjtJQUhGO01BSUksVUFBVSxJQUViOztBQUVEO0VBQ0UscUJBQXFCO0VBQ3JCLFdBQVc7RUFDWCxtQkFBbUI7RUFDbkIsc0JBQXNCO0VBQ3RCLGdCQUFnQjtFQUNoQixZQUFZOztBQUdkO0VBQ0Usa0JBQWtCO0VBRWxCO0lBSEY7TUFJSSxzQkFBc0IsSUFFekI7O0FBRUQ7RUFDRSx5QkNwQndCO0VEcUJ4QixhQUFhOztBQUdmO0VBQ0UsaUJBQWlCO0VBQ2pCLG9CQUFvQjtFQUNwQixlQUFlO0VBQ2YsaUJBQWlCO0VBQ2pCLGNDakNrQjtFRGtDbEIsU0FBUztFQUNULGtCQUFrQjs7QUFHcEI7RUFDRSxZQUFZO0VBRGQ7SUFHSSxZQUFZO0lBQ1osY0FBYztJQUNkLFlBQVk7SUFDWixXQUFXO0lBQ1gsWUFBWTtJQUNaLDBWQUEwVjs7QUFJOVY7RUFDRSx1Q0FBdUM7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O0FBR25CO0VBQ0UsZ0JBQWdCO0VBQ2hCLFlBQVk7RUFDWix5QkZ2Q2tCOztBRXlDcEI7RUFDRSxZQUFZO0VBQ1oseUJGM0NrQiIsImZpbGUiOiJzdXJ2ZXkuYW5hbHl0aWNzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJnbG9iYWxzXCI7XG5cbi5zYS12aXN1YWxpemVyX190b29sYmFyIHtcbn1cblxuLnNhLXZpc3VhbGl6ZXJfX2NvbnRlbnQge1xuICBmb250LWZhbWlseTogU2Vnb2VVSSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5zYS12aXN1YWxpemVyX19mb290ZXIge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuXG4uc2EtdmlzdWFsaXplcl9fZm9vdGVyLXRpdGxlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LWZhbWlseTogUmFsZXdheTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzQwNDA0MDtcbiAgbGluZS1oZWlnaHQ6IDM0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIG1hcmdpbjogMDtcbn1cblxuLnNhLXZpc3VhbGl6ZXJfX2Zvb3Rlci1jb250ZW50IHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbn1cbiIsIkBpbXBvcnQgXCJnbG9iYWxzXCI7XG5cbi5zYS1wYW5lbF9faGVhZGVyIHtcbiAgbWFyZ2luOiAwIDFlbTtcbn1cblxuLnNhLWdyaWQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5zYS1ncmlkX19ncmlkLXNpemVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDE0MDBweCkge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbn1cblxuLnNhLXF1ZXN0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMWVtO1xufVxuXG4uc2EtcXVlc3Rpb24tbGF5b3V0ZWQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTQwMHB4KSB7XG4gICAgd2lkdGg6IGNhbGMoNTAlIC0gMXB4KTtcbiAgfVxufVxuXG4uc2EtcXVlc3Rpb25fX2NvbnRlbnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvcjtcbiAgcGFkZGluZzogMjBweDtcbn1cblxuLnNhLXF1ZXN0aW9uX190aXRsZSB7XG4gIG1hcmdpbi1sZWZ0OiAzMHB4O1xuICBmb250LWZhbWlseTogUmFsZXdheTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICBtYXJnaW46IDA7XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbn1cblxuLnNhLXF1ZXN0aW9uX190aXRsZS0tZHJhZ2dhYmxlIHtcbiAgY3Vyc29yOiBtb3ZlO1xuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiBcIjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgd2lkdGg6IDE1cHg7XG4gICAgaGVpZ2h0OiAxNXB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NnJTNFJTNDcG9seWdvbiBzdHlsZT0nZmlsbDogJTIzMWFiMzk0JyBwb2ludHM9JzEzLDUgMTIsNiAxMyw3IDksNyA5LDMgMTAsNCAxMSwzIDgsMCA1LDMgNiw0IDcsMyA3LDcgMyw3IDQsNiAzLDUgMCw4IDMsMTEgNCwxMCAzLDkgNyw5IDcsMTMgNiwxMiA1LDEzIDgsMTYgMTEsMTMgMTAsMTIgOSwxMyA5LDkgMTMsOSAxMiwxMCAxMywxMSAxNiw4ICcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFIFwiKTtcbiAgfVxufVxuXG4uc2EtdG9vbGJhciB7XG4gIGZvbnQtZmFtaWx5OiBTZWdvZVVJLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogJHRleHQtY29sb3I7XG4gIGxpbmUtaGVpZ2h0OiAzNHB4O1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xuICAmID4gKjpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gIH1cbn1cblxuLnNhLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGZvbnQtZmFtaWx5OiBTZWdvZVVJLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBwYWRkaW5nOiA4cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgJjpob3ZlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgIGJhY2tncm91bmQtYmxlbmQtbW9kZTogZGFya2VuO1xuICB9XG4gIG1hcmdpbjogMCAxMHB4O1xuICAmOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxuICAmOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuXG4uc2EtdG9vbGJhcl9fc3ZnLWJ1dHRvbiB7XG4gIHdpZHRoOiAxNXB4O1xuICBoZWlnaHQ6IDE1cHg7XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB1c2Uge1xuICAgIGZpbGw6ICRzdmctY29sb3I7XG4gIH1cbiAgJjpob3ZlciB7XG4gICAgdXNlIHtcbiAgICAgIGZpbGw6ICRzdmctaG92ZXItY29sb3I7XG4gICAgfVxuICB9XG4gIHN2ZyB7XG4gICAgd2lkdGg6IDE1cHg7XG4gICAgaGVpZ2h0OiAxNXB4O1xuICB9XG59XG5cbi5zYS10b29sYmFyX19idXR0b24tLXJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG4vLyBjdXN0b20gc2VsZWN0XG4uc2EtcXVlc3Rpb25fX3NlbGVjdC13cmFwcGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi13aWR0aDogMjAwcHg7XG4gIG1heC13aWR0aDogMzAwcHg7XG5cbiAgLnNhLXF1ZXN0aW9uX19zZWxlY3Qge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgIGJhY2tncm91bmQ6ICR0ZXh0LWNvbG9yLWludmVyc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgIGhlaWdodDogJGZvcm0tZWxlbWVudC1oZWlnaHQ7XG4gICAgcGFkZGluZzogNXB4IDIzcHggNXB4IDE1cHg7XG4gICAgbGluZS1oZWlnaHQ6IGluaXRpYWw7XG5cbiAgICAmOjotbXMtZXhwYW5kIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgJjpmb2N1cyB7XG4gICAgICBvdXRsaW5lOiAwO1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG5cbiAgICAmOmRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgfVxuICB9XG5cbiAgJjpiZWZvcmUge1xuICAgIG1hcmdpbi10b3A6IC00cHg7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IDEwcHg7XG4gICAgei1pbmRleDogMTtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogNHB4O1xuICAgIGhlaWdodDogNHB4O1xuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICR0ZXh0LWNvbG9yO1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkdGV4dC1jb2xvcjtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIH1cbn1cbi8vIEVPIGN1c3RvbSBzZWxlY3RcblxuLnNhLXF1ZXN0aW9uX19maWx0ZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAgMWVtO1xufVxuXG4uc2EtcXVlc3Rpb25fX2ZpbHRlci10ZXh0IHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXRvcDogMXB4O1xufVxuXG4uc2EtY29tbWVyY2lhbCB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgcGFkZGluZzogMWVtIDAgMC41ZW0gMmVtO1xuICBzdmcge1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICBmaWxsOiAkbWFpbi1jb2xvcjtcbiAgfVxufVxuLnNhLWNvbW1lcmNpYWxfX3RleHQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogJG1haW4tY29sb3I7XG59XG4uc2EtY29tbWVyY2lhbF9fcHJvZHVjdCB7XG4gIHBhZGRpbmctbGVmdDogMC41ZW07XG59XG5cbi8qIGxhdGluLWV4dCAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiBcIlJhbGV3YXlcIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IGxvY2FsKFwiUmFsZXdheVwiKSwgbG9jYWwoXCJSYWxld2F5LVJlZ3VsYXJcIiksXG4gICAgdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9yYWxld2F5L3YxNC8xUHR1Zzh6WVNfU0tnZ1BOeUNNSVQ1bHUud29mZjIpXG4gICAgICBmb3JtYXQoXCJ3b2ZmMlwiKTtcbiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMDI1OSwgVSsxRTAwLTFFRkYsIFUrMjAyMCwgVSsyMEEwLTIwQUIsXG4gICAgVSsyMEFELTIwQ0YsIFUrMjExMywgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGO1xufVxuLyogbGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJSYWxld2F5XCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiBsb2NhbChcIlJhbGV3YXlcIiksIGxvY2FsKFwiUmFsZXdheS1SZWd1bGFyXCIpLFxuICAgIHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvcmFsZXdheS92MTQvMVB0dWc4ellTX1NLZ2dQTnlDMElUdy53b2ZmMilcbiAgICAgIGZvcm1hdChcIndvZmYyXCIpO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLFxuICAgIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIxMjIsIFUrMjE5MSwgVSsyMTkzLCBVKzIyMTIsIFUrMjIxNSxcbiAgICBVK0ZFRkYsIFUrRkZGRDtcbn1cbi8qIGxhdGluLWV4dCAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiBcIlJhbGV3YXlcIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNzAwO1xuICBzcmM6IGxvY2FsKFwiUmFsZXdheSBCb2xkXCIpLCBsb2NhbChcIlJhbGV3YXktQm9sZFwiKSxcbiAgICB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL3JhbGV3YXkvdjE0LzFQdHJnOHpZU19TS2dnUE53Sll0V3FoUEFNaWYud29mZjIpXG4gICAgICBmb3JtYXQoXCJ3b2ZmMlwiKTtcbiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMDI1OSwgVSsxRTAwLTFFRkYsIFUrMjAyMCwgVSsyMEEwLTIwQUIsXG4gICAgVSsyMEFELTIwQ0YsIFUrMjExMywgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGO1xufVxuLyogbGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJSYWxld2F5XCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgc3JjOiBsb2NhbChcIlJhbGV3YXkgQm9sZFwiKSwgbG9jYWwoXCJSYWxld2F5LUJvbGRcIiksXG4gICAgdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9yYWxld2F5L3YxNC8xUHRyZzh6WVNfU0tnZ1BOd0pZdFdxWlBBQS53b2ZmMilcbiAgICAgIGZvcm1hdChcIndvZmYyXCIpO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLFxuICAgIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIxMjIsIFUrMjE5MSwgVSsyMTkzLCBVKzIyMTIsIFUrMjIxNSxcbiAgICBVK0ZFRkYsIFUrRkZGRDtcbn1cbiIsIiRtYWluLWNvbG9yOiAjMWFiMzk0O1xuJGF1eGlsaWFyeS1jb2xvcjogI2ZmOTgxNDtcbiRhdXhpbGlhcnktY29sb3ItMTogIzY2NjY2NjtcbiRhdXhpbGlhcnktY29sb3ItMjogIzE5NDhiMztcbiRkYW5nZXItY29sb3I6ICNkOTUzNGY7XG4kZGlzYWJsZWQtY29sb3I6ICNiMGIwYjA7XG5cbiRibHVlLWNvbG9yOiAjMzk0Y2ZmO1xuJHB1cnBsZS1jb2xvcjogI2FhNDJkMDtcbiRncmVlbi1jb2xvcjogIzQxYzAyYztcblxuJHRleHQtY29sb3ItaW52ZXJzZTogI2ZmZjtcbiR0ZXh0LWNvbG9yOiAjNDA0MDQwO1xuXG4kY29udGVudC1tYXgtd2lkdGg6IDExNzBweDtcblxuJGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4kYmFja2dyb3VuZC1jb2xvci1kYXJrOiAjZWVlZWVlO1xuJGJhY2tncm91bmQtZGlzYWJsZWQtY29sb3I6ICNiN2I3Yjc7XG5cbiRib3JkZXItY29sb3I6ICNlN2U3ZTc7XG5cbiRmb3JtLWVsZW1lbnQtaGVpZ2h0OiAzNHB4O1xuXG4kc3ZnLWNvbG9yOiByZ2JhKCM5ZjlmOWYsIDAuNCk7XG4kc3ZnLWhvdmVyLWNvbG9yOiAjOWY5ZjlmO1xuIiwiQGltcG9ydCBcImdsb2JhbHNcIjtcblxuLnNhLXRleHQtdGFibGVfX2NvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgbWF4LWhlaWdodDogNTAwcHg7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4uc2EtdGV4dC10YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBmb250LWZhbWlseTogU2Vnb2VVSSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICBib3JkZXItd2lkdGg6IDFweDtcblx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG59XG5cbi5zYS10ZXh0LXRhYmxlX19jZWxsIHtcblx0Ym9yZGVyLXdpZHRoOiAxcHg7XG5cdHBhZGRpbmc6IDhweDtcblx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0Ym9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvcjtcbiAgbWluLWhlaWdodDogJGZvcm0tZWxlbWVudC1oZWlnaHQ7XG59XG4iLCJAaW1wb3J0IFwiZ2xvYmFsc1wiO1xuXG4uc2EtY2hvaWNlcy10YWJsZV9fY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDIwMHB4O1xuICBtYXgtaGVpZ2h0OiA1MDBweDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi5zYS1jaG9pY2VzLXRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBTZWdvZVVJLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogJHRleHQtY29sb3I7XG5cdC8vIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG4uc2EtY2hvaWNlcy10YWJsZV9fY2VsbCB7XG5cdGJvcmRlci13aWR0aDogMXB4O1xuXHRwYWRkaW5nOiA4cHg7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIG1pbi1oZWlnaHQ6ICRmb3JtLWVsZW1lbnQtaGVpZ2h0O1xufVxuXG4uc2EtY2hvaWNlcy10YWJsZV9fY2VsbC12YWx1ZSB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBtaW4td2lkdGg6IDMwcHg7XG59XG5cbi5zYS1jaG9pY2VzLXRhYmxlX19jZWxsLWhlYWRlciB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uc2EtY2hvaWNlcy1zcGFya2xpbmUge1xuICBtaW4td2lkdGg6IDEwMHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRtYWluLWNvbG9yO1xufVxuLnNhLWNob2ljZXMtc3BhcmtsaW5lLXZhbHVlIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcbn0iXSwic291cmNlUm9vdCI6IiJ9*/
@@ -1,4 +1,4 @@
1
- /*Type definitions for SurveyJS Analytics library v1.9.30
1
+ /*Type definitions for SurveyJS Analytics library v1.9.33
2
2
  Copyright (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
3
3
  Definitions by: Devsoft Baltic OÜ <https://github.com/surveyjs/>
4
4
  */
@@ -8,10 +8,10 @@ Definitions by: Devsoft Baltic OÜ <https://github.com/surveyjs/>
8
8
 
9
9
  import { Event } from "survey-core";
10
10
  import { Question } from "survey-core";
11
+ import { SurveyModel } from "survey-core";
11
12
  import { IQuestion } from "survey-core";
12
13
  import { QuestionMatrixDropdownModel } from "survey-core";
13
14
  import { ItemValue } from "survey-core";
14
- import { SurveyModel } from "survey-core";
15
15
  import Plotly from "plotly.js-dist-min";
16
16
  import { QuestionMatrixModel } from "survey-core";
17
17
  import { QuestionBooleanModel } from "survey-core";
@@ -73,6 +73,10 @@ export var surveyStrings: {
73
73
  filter: string;
74
74
  resetFilter: string;
75
75
  changeLocale: string;
76
+ en: string;
77
+ fr: string;
78
+ ru: string;
79
+ de: string;
76
80
  clearButton: string;
77
81
  addElement: string;
78
82
  defaultOrder: string;
@@ -292,7 +296,7 @@ export class VisualizerBase implements IDataInfo {
292
296
  /**
293
297
  * Renders visualizer in the given container.
294
298
  */
295
- render(targetElement: HTMLElement): void;
299
+ render(targetElement: HTMLElement | string): void;
296
300
  /**
297
301
  * Redraws visualizer and all inner content.
298
302
  */
@@ -358,24 +362,209 @@ export interface IVisualizerPanelRenderedElement extends IVisualizerPanelElement
358
362
  renderedElement?: HTMLElement;
359
363
  }
360
364
  /**
361
- * VisualizationPanel is responsible for visualizing an array of survey questions
362
- *
363
- * constructor parameters:
364
- * questions - an array of survey questions to visualize,
365
- * data - an array of answers in format of survey result,
366
- * options - object with the following options,
367
- * elements - list of visual element descriptions
365
+ * Visualization Panel configuration. Pass it as the third argument to the `VisualizationPanel` constructor:
368
366
  *
369
- * options:
370
- * allowDynamicLayout - set it to false to disable items drag/drop reordering and dynamic layouting,
371
- * labelTruncateLength - the length of the label where the truncation starts. Set to -1 to disable truncate. Default is 27.
372
- * allowHideQuestions - set it to false to deny user to hide/show individual questions,
373
- * allowMakeQuestionsPrivate - set it to true to allow make elements private/public also see persmissions property,
374
- * seriesValues - an array of series values in data to group data by series,
375
- * seriesLabels - labels for series to display, if not passed the seriesValues are used as labels,
376
- * survey - pass survey instance to use localses from the survey JSON,
377
- * dataProvider - dataProvider for this visualizer,
378
- * layoutEngine - layout engine to be used for layouting inner visualizers
367
+ * ```js
368
+ * const vizPanel = new SurveyAnalytics.VisualizationPanel(surveyQuestions, surveyResults, vizPanelOptions);
369
+ * ```
370
+ */
371
+ export interface IVisualizationPanelOptions {
372
+ /**
373
+ * The number of label characters after which truncation starts.
374
+ * Set this property to -1 to disable truncation.
375
+ *
376
+ * Default value: 27
377
+ */
378
+ labelTruncateLength?: number;
379
+ allowMakeQuestionsPrivate?: boolean;
380
+ seriesValues?: string[];
381
+ seriesLabels?: string[];
382
+ useValuesAsLabels?: boolean;
383
+ /**
384
+ * Pass a survey instance to use survey locales in the Visualization Panel.
385
+ */
386
+ survey?: SurveyModel;
387
+ /**
388
+ * A common data provider for all visualizers.
389
+ */
390
+ dataProvider?: DataProvider;
391
+ /**
392
+ * Allows users to change the visibility of individual charts.
393
+ * This property adds a Hide button to each chart.
394
+ *
395
+ * Default value: `true`
396
+ */
397
+ allowHideQuestions?: boolean;
398
+ /**
399
+ * Specifies whether to arrange charts based on the available screen space and allow users to reorder them via drag and drop.
400
+ * If this property is disabled, charts are displayed one under the other, and users cannot reorder them.
401
+ *
402
+ * Default value: `true`
403
+ *
404
+ * [View the "Disable the Layout Engine" example](https://surveyjs.io/Examples/Analytics?id=custom-layout)
405
+ *
406
+ * @see layoutEngine
407
+ */
408
+ allowDynamicLayout?: boolean;
409
+ /**
410
+ * A layout engine used to arrange charts on the Visualization Panel.
411
+ * You can use this property to integrate a third-party layout engine with SurveyJS Analytics.
412
+ *
413
+ * @see allowDynamicLayout
414
+ */
415
+ layoutEngine?: LayoutEngine;
416
+ /**
417
+ * Allows users to switch between absolute and percentage values in bar charts.
418
+ * This property adds a Show Percentages button to each bar chart.
419
+ *
420
+ * Default value: `false`
421
+ *
422
+ * @see showPercentages
423
+ * @see showOnlyPercentages
424
+ * @see percentagePrecision
425
+ */
426
+ allowShowPercentages?: boolean;
427
+ /**
428
+ * Specifies whether bar charts display percentages in addition to absolute values.
429
+ * Users can change this property value if you enable the `allowShowPercentages` property.
430
+ *
431
+ * Default value: `false`
432
+ *
433
+ * @see allowShowPercentages
434
+ * @see showOnlyPercentages
435
+ * @see percentagePrecision
436
+ */
437
+ showPercentages?: boolean;
438
+ /**
439
+ * Specifies whether bar charts display only percentages, without absolute values.
440
+ * Applies only if the `allowShowPercentages` or `showPercentages` property is enables.
441
+ *
442
+ * Default value: `false`
443
+ *
444
+ * @see allowShowPercentages
445
+ * @see showPercentages
446
+ * @see percentagePrecision
447
+ */
448
+ showOnlyPercentages?: boolean;
449
+ /**
450
+ * Specifies percentage precision.
451
+ *
452
+ * Default value: 0
453
+ *
454
+ * @see allowShowPercentages
455
+ * @see showPercentages
456
+ * @see showOnlyPercentages
457
+ */
458
+ percentagePrecision?: number;
459
+ /**
460
+ * Removes the Free Trial bar.
461
+ * **IMPORTANT**: You can enable this property only if you have a SurveyJS Analytics commercial license. It is illegal to enable this property without a license.
462
+ */
463
+ haveCommercialLicense?: boolean;
464
+ /**
465
+ * Allows users to sort answers by answer count. Applies only to bar and scatter charts.
466
+ * This property adds a Sorting dropdown to each bar and scatter chart.
467
+ *
468
+ * Default value: `true`
469
+ *
470
+ * @see answersOrder
471
+ */
472
+ allowChangeAnswersOrder?: boolean;
473
+ /**
474
+ * Specifies how to sort answers in bar and scatter charts.
475
+ * Accepted values:
476
+ *
477
+ * - `"default"` (default) - Do not sort answers.
478
+ * - `"asc"` - Sort answers by ascending answer count.
479
+ * - `"desc"` - Sort answers by descending answer count.
480
+ *
481
+ * Users can change this property value if you enable the `allowChangeAnswersOrder` property.
482
+ *
483
+ * @see allowChangeAnswersOrder
484
+ */
485
+ answersOrder?: "default" | "asc" | "desc";
486
+ /**
487
+ * Allows users to hide answers with zero count in bar and scatter charts.
488
+ * This property adds a Hide Empty Answers button to each bar and scatter chart.
489
+ *
490
+ * Default value: `false`
491
+ */
492
+ allowHideEmptyAnswers?: boolean;
493
+ /**
494
+ * Hides answers with zero count in bar and scatter charts.
495
+ * Users can change this property value if you enable the `allowHideEmptyAnswers` property.
496
+ *
497
+ * Default value: `false`
498
+ *
499
+ * @see allowHideEmptyAnswers
500
+ */
501
+ hideEmptyAnswers?: boolean;
502
+ /**
503
+ * Allows users to select whether to show top 5, 10, or 20 answers by answer count.
504
+ * This property adds a Top N Answers dropdown to each chart.
505
+ *
506
+ * Default value: `false`
507
+ */
508
+ allowTopNAnswers?: boolean;
509
+ /**
510
+ * Allows users to show the number of respondents who did not answer a particular question.
511
+ * This property adds a Show Missing Answers button to each chart.
512
+ *
513
+ * Default value: `false`
514
+ */
515
+ allowShowMissingAnswers?: boolean;
516
+ allowExperimentalFeatures?: boolean;
517
+ /**
518
+ * Default chart type.
519
+ *
520
+ * Accepted values depend on the question type as follows:
521
+ *
522
+ * - Boolean: `"bar"` | `"pie"` | `"doughnut"`
523
+ * - Date, Number: `"bar"` | `"scatter"`
524
+ * - Matrix: `"bar"` | `"pie"` | `"doughnut"` | `"stackedbar"`
525
+ * - Rating: `"bar"` | `"scatter"` | `"gauge"` | `"bullet"`
526
+ * - Radiogroup, Checkbox, Dropdown, Image Picker: `"bar"` | `"pie"` | `"doughnut"` | `"scatter"`
527
+ *
528
+ * To set a type for an individual chart, access this chart in the `visualizers` array and set its `chartType` property to one of the values described above:
529
+ *
530
+ * ```js
531
+ * const vizPanel = new SurveyAnalytics.VisualizationPanel( ... );
532
+ * vizPanel.visualizers[0].chartType = "stackedbar";
533
+ * ```
534
+ *
535
+ */
536
+ defaultChartType?: string;
537
+ /**
538
+ * Allows users to transpose a visualized matrix question.
539
+ * This property adds a Transpose button to charts that visualize matrixes. When users select Per Values, matrix rows go to chart arguments, and matrix columns form chart series. When users select Per Columns, matrix rows form chart series, and matrix columns go to chart arguments.
540
+ *
541
+ * Default value: `false`
542
+ */
543
+ allowTransposeData?: boolean;
544
+ /**
545
+ * Allows users to cross-filter charts. The filter applies when users selects a series point.
546
+ *
547
+ * Default value: `true`
548
+ */
549
+ allowSelection?: boolean;
550
+ renderContent?: Function;
551
+ destroyContent?: Function;
552
+ /**
553
+ * Removes HTML tags from survey element titles.
554
+ * Survey element titles can contain HTML markup and are specified by users. An attacker can inject malicious code into the titles. To guard against it, keep this property set to `true`.
555
+ *
556
+ * Default value: `true`
557
+ */
558
+ stripHtmlFromTitles?: boolean;
559
+ }
560
+ /**
561
+ * VisualizationPanel is responsible for visualizing an array of survey questions
562
+ * <br/>
563
+ * <br/> constructor parameters:
564
+ * <br/> questions - an array of survey questions to visualize,
565
+ * <br/> data - an array of answers in format of survey result,
566
+ * <br/> options - object of the IVisualizationPanelOptions type, @see IVisualizationPanelOptions
567
+ * <br/> elements - list of visual element descriptions
379
568
  *
380
569
  */
381
570
  export class VisualizationPanel extends VisualizerBase {
@@ -384,9 +573,7 @@ export class VisualizationPanel extends VisualizerBase {
384
573
  visualizers: Array<VisualizerBase>;
385
574
  constructor(questions: Array<any>, data: Array<{
386
575
  [index: string]: any;
387
- }>, options?: {
388
- [index: string]: any;
389
- }, _elements?: Array<IVisualizerPanelRenderedElement>);
576
+ }>, options?: IVisualizationPanelOptions, _elements?: Array<IVisualizerPanelRenderedElement>);
390
577
  protected showElement(elementName: string): void;
391
578
  protected hideElement(elementName: string): void;
392
579
  protected makeElementPrivate(element: IVisualizerPanelElement): void;
@@ -597,7 +784,7 @@ export class DataTables extends Table {
597
784
  onColumnsReorder: Event<(sender: DataTables, options: any) => any, any>;
598
785
  static initJQuery($: any): void;
599
786
  static set haveCommercialLicense(val: boolean);
600
- constructor(survey: SurveyModel, data: Array<Object>, options: DataTablesOptions, _columns?: Array<ITableColumn>);
787
+ constructor(survey: SurveyModel, data: Array<Object>, options: DataTablesOptions, _columnsData?: Array<IColumnData>);
601
788
  destroy(): void;
602
789
  setColumnVisibility(columnName: string, isVisible: boolean): void;
603
790
  setColumnLocation(columnName: string, location: QuestionLocation): void;
@@ -607,7 +794,7 @@ export class DataTables extends Table {
607
794
  setPageSize(value: number): void;
608
795
  setPageNumber(value: number): void;
609
796
  getPageNumber(): number;
610
- render(targetNode: HTMLElement): void;
797
+ render(targetNode: HTMLElement | string): void;
611
798
  getColumns(): Array<any>;
612
799
  layout(): void;
613
800
  }
@@ -639,9 +826,9 @@ interface ITabulatorOptions extends ITableOptions {
639
826
  }
640
827
  export class Tabulator extends Table {
641
828
  static set haveCommercialLicense(val: boolean);
642
- constructor(survey: SurveyModel, data: Array<Object>, options: ITabulatorOptions, _columns?: Array<any>);
829
+ constructor(survey: SurveyModel, data: Array<Object>, options: ITabulatorOptions, _columnsData?: Array<IColumnData>);
643
830
  tabulatorTables: any;
644
- render(targetNode: HTMLElement): void;
831
+ render(targetNode: HTMLElement | string): void;
645
832
  destroy: () => void;
646
833
  getColumns(): Array<any>;
647
834
  setColumnVisibility(columnName: string, isVisible: boolean): void;
@@ -801,6 +988,7 @@ export class SelectBase extends VisualizerBase implements IVisualizerWithSelecti
801
988
  set showMissingAnswers(value: boolean);
802
989
  refreshContent(): void;
803
990
  onDataItemSelected: (selectedValue: any, selectedText: string) => void;
991
+ get showValuesInOriginalOrder(): boolean;
804
992
  valuesSource(): Array<ItemValue>;
805
993
  getValues(): Array<any>;
806
994
  getLabels(): Array<string>;
@@ -840,15 +1028,16 @@ export interface ITableOptions {
840
1028
  }) => void;
841
1029
  }
842
1030
  export abstract class Table {
843
- protected survey: SurveyModel;
1031
+ protected _survey: SurveyModel;
844
1032
  protected data: Array<Object>;
845
- protected options: ITableOptions;
846
- protected _columns: Array<ITableColumn>;
1033
+ protected _options: ITableOptions;
1034
+ protected _columnsData: Array<IColumnData>;
847
1035
  static showFilesAsImages: boolean;
848
1036
  static haveCommercialLicense: boolean;
849
1037
  protected tableData: any;
850
1038
  protected extensions: TableExtensions;
851
- constructor(survey: SurveyModel, data: Array<Object>, options?: ITableOptions, _columns?: Array<ITableColumn>);
1039
+ protected _columns: Array<IColumn>;
1040
+ constructor(_survey: SurveyModel, data: Array<Object>, _options?: ITableOptions, _columnsData?: Array<IColumnData>);
852
1041
  protected renderResult: HTMLElement;
853
1042
  protected currentPageSize: number;
854
1043
  protected currentPageNumber: number;
@@ -859,10 +1048,12 @@ export abstract class Table {
859
1048
  onRowRemoved: Event<(sender: Table, options: any) => any, any>;
860
1049
  renderDetailActions: (container: HTMLElement, row: TableRow) => HTMLElement;
861
1050
  getData(): Object[];
1051
+ get survey(): SurveyModel;
1052
+ get options(): ITableOptions;
862
1053
  abstract applyFilter(value: string): void;
863
1054
  abstract applyColumnFilter(columnName: string, value: string): void;
864
1055
  abstract sortByColumn(columnName: string, direction: string): void;
865
- render(targetNode: HTMLElement): void;
1056
+ render(targetNode: HTMLElement | string): void;
866
1057
  enableColumnReorder(): void;
867
1058
  disableColumnReorder(): void;
868
1059
  getPageNumber(): number;
@@ -871,14 +1062,15 @@ export abstract class Table {
871
1062
  setPageSize(value: number): void;
872
1063
  getCreatedRows(): TableRow[];
873
1064
  clearCreatedRows(): void;
874
- protected buildColumns: (survey: SurveyModel) => ITableColumn[];
875
- isColumnVisible(column: ITableColumn): boolean;
876
- get columns(): Array<ITableColumn>;
877
- set columns(columns: Array<ITableColumn>);
1065
+ get useNamesAsTitles(): boolean;
1066
+ protected buildColumns: (survey: SurveyModel) => IColumn[];
1067
+ isColumnVisible(column: IColumn): boolean;
1068
+ get columns(): Array<IColumn>;
1069
+ set columns(columns: Array<IColumn>);
878
1070
  protected initTableData(data: Array<any>): void;
879
1071
  moveColumn(from: number, to: number): void;
880
1072
  setColumnLocation(columnName: string, location: QuestionLocation): void;
881
- getColumnByName(columnName: string): ITableColumn;
1073
+ getColumnByName(columnName: string): IColumn;
882
1074
  setColumnVisibility(columnName: string, isVisible: boolean): void;
883
1075
  setColumnWidth(columnName: string, width: string | number): void;
884
1076
  removeRow(row: TableRow): void;
@@ -960,7 +1152,11 @@ export enum ColumnDataType {
960
1152
  FileLink = 1,
961
1153
  Image = 2
962
1154
  }
963
- export interface ITableColumn {
1155
+ export interface ICellData {
1156
+ question: Question;
1157
+ displayValue: any;
1158
+ }
1159
+ export interface IColumnData {
964
1160
  name: string;
965
1161
  displayName: string;
966
1162
  dataType: ColumnDataType;
@@ -970,9 +1166,14 @@ export interface ITableColumn {
970
1166
  width?: string | number;
971
1167
  isComment?: boolean;
972
1168
  }
1169
+ export interface IColumn extends IColumnData {
1170
+ visibleIndex?: number;
1171
+ fromJSON(json: any): void;
1172
+ getCellData(table: Table, data: any): ICellData;
1173
+ }
973
1174
  export interface ITableState {
974
1175
  locale?: string;
975
- elements?: ITableColumn[];
1176
+ elements?: IColumnData[];
976
1177
  pageSize?: number;
977
1178
  }
978
1179
  export interface IPermission {
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - SurveyJS Analytics library v1.9.30
2
+ * surveyjs - SurveyJS Analytics library v1.9.33
3
3
  * Copyright (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */