survey-analytics 2.2.6 → 2.3.0

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.
Files changed (36) hide show
  1. package/fesm/shared.mjs +2 -1
  2. package/fesm/shared.mjs.map +1 -1
  3. package/fesm/shared2.mjs +7 -4
  4. package/fesm/shared2.mjs.map +1 -1
  5. package/fesm/survey.analytics.core.mjs +1 -1
  6. package/fesm/survey.analytics.mjs +80 -19
  7. package/fesm/survey.analytics.mjs.map +1 -1
  8. package/fesm/survey.analytics.tabulator.mjs +1 -1
  9. package/package.json +2 -2
  10. package/survey-analytics-tabulator.types/analytics-localization/english.d.ts +1 -0
  11. package/survey-analytics-tabulator.types/localizationManager.d.ts +1 -0
  12. package/survey-analytics.types/analytics-localization/english.d.ts +1 -0
  13. package/survey-analytics.types/config.d.ts +1 -0
  14. package/survey-analytics.types/localizationManager.d.ts +1 -0
  15. package/survey-analytics.types/plotly/chart-adapter.d.ts +1 -0
  16. package/survey-analytics.types/plotly/setup.d.ts +1 -0
  17. package/survey-analytics.types/ranking.d.ts +4 -0
  18. package/survey-analytics.types/visualizationPanel.d.ts +4 -2
  19. package/survey.analytics.core.css +1 -1
  20. package/survey.analytics.core.js +9 -6
  21. package/survey.analytics.core.js.map +1 -1
  22. package/survey.analytics.core.min.css +1 -1
  23. package/survey.analytics.core.min.js +1 -1
  24. package/survey.analytics.core.min.js.LICENSE.txt +1 -1
  25. package/survey.analytics.css +1 -1
  26. package/survey.analytics.js +103 -37
  27. package/survey.analytics.js.map +1 -1
  28. package/survey.analytics.min.css +1 -1
  29. package/survey.analytics.min.js +1 -1
  30. package/survey.analytics.min.js.LICENSE.txt +1 -1
  31. package/survey.analytics.tabulator.css +1 -1
  32. package/survey.analytics.tabulator.js +2 -1
  33. package/survey.analytics.tabulator.js.map +1 -1
  34. package/survey.analytics.tabulator.min.css +1 -1
  35. package/survey.analytics.tabulator.min.js +1 -1
  36. package/survey.analytics.tabulator.min.js.LICENSE.txt +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - SurveyJS Dashboard library v2.2.6
2
+ * surveyjs - SurveyJS Dashboard library v2.3.0
3
3
  * Copyright (c) 2015-2025 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - SurveyJS Dashboard library v2.2.6
2
+ * surveyjs - SurveyJS Dashboard library v2.3.0
3
3
  * Copyright (c) 2015-2025 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - SurveyJS Dashboard library v2.2.6
2
+ * surveyjs - SurveyJS Dashboard library v2.3.0
3
3
  * Copyright (c) 2015-2025 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
@@ -7276,6 +7276,7 @@ var englishStrings = {
7276
7276
  chartType_gauge: "Gauge",
7277
7277
  chartType_bullet: "Bullet",
7278
7278
  chartType_line: "Line",
7279
+ chartType_radar: "Radar",
7279
7280
  hideButton: "Hide",
7280
7281
  makePrivateButton: "Make private",
7281
7282
  makePublicButton: "Make public",
@@ -10378,6 +10379,7 @@ var plotlyChartTypes = {
10378
10379
  "matrix": _legacy__WEBPACK_IMPORTED_MODULE_8__.MatrixPlotly.types,
10379
10380
  "matrixDropdownGrouped": _legacy__WEBPACK_IMPORTED_MODULE_8__.MatrixDropdownGroupedPlotly.types,
10380
10381
  "pivot": _legacy__WEBPACK_IMPORTED_MODULE_8__.PivotPlotly.types,
10382
+ "ranking": [].concat(_legacy__WEBPACK_IMPORTED_MODULE_8__.SelectBasePlotly.types).concat(["radar"]),
10381
10383
  };
10382
10384
  var PlotlyChartAdapter = /** @class */ (function () {
10383
10385
  function PlotlyChartAdapter(model) {
@@ -10397,11 +10399,19 @@ var PlotlyChartAdapter = /** @class */ (function () {
10397
10399
  var chartType = this.model.chartType;
10398
10400
  if (chartType === "pie" || chartType === "doughnut") {
10399
10401
  traces.forEach(function (trace) {
10402
+ if (!trace)
10403
+ return;
10404
+ if (!trace.marker)
10405
+ trace.marker = {};
10400
10406
  trace.marker.colors = boolColors_1;
10401
10407
  });
10402
10408
  }
10403
10409
  else if (chartType === "bar") {
10404
10410
  traces.forEach(function (trace) {
10411
+ if (!trace)
10412
+ return;
10413
+ if (!trace.marker)
10414
+ trace.marker = {};
10405
10415
  trace.marker.color = boolColors_1;
10406
10416
  });
10407
10417
  }
@@ -10710,11 +10720,13 @@ __webpack_require__.r(__webpack_exports__);
10710
10720
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
10711
10721
  /* harmony export */ PlotlySetup: () => (/* binding */ PlotlySetup)
10712
10722
  /* harmony export */ });
10713
- /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-core */ "survey-core");
10714
- /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_0__);
10715
- /* harmony import */ var _localizationManager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../localizationManager */ "./src/localizationManager.ts");
10716
- /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils/index.ts");
10717
- /* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../number */ "./src/number.ts");
10723
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./src/utils/helpers.ts");
10724
+ /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! survey-core */ "survey-core");
10725
+ /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_1__);
10726
+ /* harmony import */ var _localizationManager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../localizationManager */ "./src/localizationManager.ts");
10727
+ /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./src/utils/index.ts");
10728
+ /* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../number */ "./src/number.ts");
10729
+
10718
10730
 
10719
10731
 
10720
10732
 
@@ -10879,25 +10891,7 @@ var PlotlySetup = /** @class */ (function () {
10879
10891
  topMargin +
10880
10892
  bottomMargin;
10881
10893
  }
10882
- // labels.forEach((label, index) => {
10883
- // traces[index].marker.color = undefined;
10884
- // traces[index].name = label;
10885
- // if (model.chartType === "stackedbar") {
10886
- // traces[index].type = "bar";
10887
- // traces[index].width = 0.5;
10888
- // } else {
10889
- // traces[index].width =
10890
- // (model.showPercentages ? 0.7 : 0.5) / traces.length;
10891
- // }
10892
- // });
10893
- // traces.forEach((trace, traceIndex) => {
10894
- // const percentString = model.showPercentages ? "%" : "";
10895
- // traces[traceIndex].hovertext = [];
10896
- // yFullTexts.forEach((yFullText, yFullTextIndex) => {
10897
- // traces[traceIndex].hovertext.push(`${trace.y[yFullTextIndex]} : ${trace.name}, ${trace.text[yFullTextIndex]}${percentString}`);
10898
- // });
10899
- // });
10900
- if (["ar", "fa"].indexOf(_localizationManager__WEBPACK_IMPORTED_MODULE_1__.localization.currentLocale) !== -1) {
10894
+ if (["ar", "fa"].indexOf(_localizationManager__WEBPACK_IMPORTED_MODULE_2__.localization.currentLocale) !== -1) {
10901
10895
  layout.xaxis.autorange = "reversed";
10902
10896
  layout.yaxis.side = "right";
10903
10897
  layout.legend = {
@@ -11089,11 +11083,11 @@ var PlotlySetup = /** @class */ (function () {
11089
11083
  maxValue = rateValues[rateValues.length - 1].value;
11090
11084
  minValue = rateValues[0].value;
11091
11085
  }
11092
- var colors = model.generateColors(maxValue, minValue, _number__WEBPACK_IMPORTED_MODULE_3__.NumberModel.stepsCount);
11093
- if (_number__WEBPACK_IMPORTED_MODULE_3__.NumberModel.showAsPercentage) {
11094
- level = _utils__WEBPACK_IMPORTED_MODULE_2__.DataHelper.toPercentage(level, maxValue);
11095
- minValue = _utils__WEBPACK_IMPORTED_MODULE_2__.DataHelper.toPercentage(minValue, maxValue);
11096
- maxValue = _utils__WEBPACK_IMPORTED_MODULE_2__.DataHelper.toPercentage(maxValue, maxValue);
11086
+ var colors = model.generateColors(maxValue, minValue, _number__WEBPACK_IMPORTED_MODULE_4__.NumberModel.stepsCount);
11087
+ if (_number__WEBPACK_IMPORTED_MODULE_4__.NumberModel.showAsPercentage) {
11088
+ level = _utils__WEBPACK_IMPORTED_MODULE_3__.DataHelper.toPercentage(level, maxValue);
11089
+ minValue = _utils__WEBPACK_IMPORTED_MODULE_3__.DataHelper.toPercentage(minValue, maxValue);
11090
+ maxValue = _utils__WEBPACK_IMPORTED_MODULE_3__.DataHelper.toPercentage(maxValue, maxValue);
11097
11091
  }
11098
11092
  var traces = [
11099
11093
  {
@@ -11125,16 +11119,85 @@ var PlotlySetup = /** @class */ (function () {
11125
11119
  };
11126
11120
  return { traces: traces, layout: layout, hasSeries: false };
11127
11121
  };
11122
+ PlotlySetup.setupRadar = function (model, answersData) {
11123
+ var datasets = answersData.datasets, labels = answersData.labels, colors = answersData.colors, texts = answersData.texts, seriesLabels = answersData.seriesLabels;
11124
+ var hasSeries = seriesLabels.length > 1 || model.question.getType() === "matrix";
11125
+ var traces = [];
11126
+ var traceConfig = {
11127
+ type: "scatterpolar",
11128
+ mode: "lines+markers",
11129
+ fill: "toself",
11130
+ line: {
11131
+ width: 2
11132
+ },
11133
+ marker: {
11134
+ size: 6
11135
+ }
11136
+ };
11137
+ datasets.forEach(function (dataset, index) {
11138
+ var traceName = hasSeries ? seriesLabels[index] : "";
11139
+ var trace = Object.assign({}, traceConfig, {
11140
+ r: dataset,
11141
+ theta: labels,
11142
+ name: traceName,
11143
+ text: texts[index],
11144
+ hoverinfo: "r+theta+name",
11145
+ customdata: labels,
11146
+ hovertemplate: "%{theta}: %{r}" +
11147
+ "<extra></extra>",
11148
+ line: (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, traceConfig.line), { color: colors[index % colors.length] }),
11149
+ marker: (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, traceConfig.marker), { color: colors[index % colors.length] })
11150
+ });
11151
+ traces.push(trace);
11152
+ });
11153
+ var layout = {
11154
+ font: {
11155
+ family: "Segoe UI, sans-serif",
11156
+ size: 14,
11157
+ weight: "normal",
11158
+ color: "#404040",
11159
+ },
11160
+ polar: {
11161
+ radialaxis: {
11162
+ visible: true,
11163
+ range: [0, Math.max.apply(Math, datasets.map(function (s) { return Math.max.apply(Math, s); })) * 1.1],
11164
+ tickfont: {
11165
+ size: 12
11166
+ }
11167
+ },
11168
+ angularaxis: {
11169
+ tickfont: {
11170
+ size: 12
11171
+ },
11172
+ ticktext: labels.map(function (label) {
11173
+ return PlotlySetup.getTruncatedLabel(label, model.labelTruncateLength);
11174
+ }),
11175
+ tickvals: labels
11176
+ }
11177
+ },
11178
+ showlegend: hasSeries,
11179
+ colorway: colors,
11180
+ plot_bgcolor: model.backgroundColor,
11181
+ paper_bgcolor: model.backgroundColor,
11182
+ margin: {
11183
+ l: 50,
11184
+ r: 50,
11185
+ t: 50,
11186
+ b: 50
11187
+ }
11188
+ };
11189
+ return { traces: traces, layout: layout, hasSeries: hasSeries };
11190
+ };
11128
11191
  PlotlySetup.imageExportFormat = "png";
11129
11192
  /**
11130
11193
  * Fires when end user clicks on the 'save as image' button.
11131
11194
  */
11132
- PlotlySetup.onImageSaving = new survey_core__WEBPACK_IMPORTED_MODULE_0__.Event();
11195
+ PlotlySetup.onImageSaving = new survey_core__WEBPACK_IMPORTED_MODULE_1__.Event();
11133
11196
  /**
11134
11197
  * Fires before plot will be created. User can change traces, layout and config of the plot.
11135
11198
  * Options is an object with the following fields: traces, layout and config of the plot.
11136
11199
  */
11137
- PlotlySetup.onPlotCreating = new survey_core__WEBPACK_IMPORTED_MODULE_0__.Event();
11200
+ PlotlySetup.onPlotCreating = new survey_core__WEBPACK_IMPORTED_MODULE_1__.Event();
11138
11201
  PlotlySetup.setups = {
11139
11202
  bar: PlotlySetup.setupBar,
11140
11203
  vbar: PlotlySetup.setupVBar,
@@ -11145,6 +11208,7 @@ var PlotlySetup = /** @class */ (function () {
11145
11208
  scatter: PlotlySetup.setupScatter,
11146
11209
  gauge: PlotlySetup.setupGauge,
11147
11210
  bullet: PlotlySetup.setupGauge,
11211
+ radar: PlotlySetup.setupRadar,
11148
11212
  };
11149
11213
  PlotlySetup.getTruncatedLabel = function (label, labelTruncateLength) {
11150
11214
  var truncateSymbols = "...";
@@ -11183,8 +11247,8 @@ __webpack_require__.r(__webpack_exports__);
11183
11247
 
11184
11248
  var RankingModel = /** @class */ (function (_super) {
11185
11249
  (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__extends)(RankingModel, _super);
11186
- function RankingModel() {
11187
- return _super !== null && _super.apply(this, arguments) || this;
11250
+ function RankingModel(question, data, options, name) {
11251
+ return _super.call(this, question, data, options, name || "ranking") || this;
11188
11252
  }
11189
11253
  RankingModel.prototype.getQuestionResults = function () {
11190
11254
  var name = this.question.name;
@@ -12881,7 +12945,7 @@ var VisualizationManager = /** @class */ (function () {
12881
12945
  if (constructor) {
12882
12946
  var visualizers = VisualizationManager.vizualizers[qType];
12883
12947
  if (!!visualizers) {
12884
- var vDescr = visualizers.filter(function (v) { return v.ctor === constructor; })[0];
12948
+ var vDescr = visualizers.filter(function (v) { return v.ctor === constructor || v.ctor.isPrototypeOf(constructor); })[0];
12885
12949
  if (!!vDescr) {
12886
12950
  var index = visualizers.indexOf(vDescr);
12887
12951
  if (index !== -1) {
@@ -12998,12 +13062,12 @@ var VisualizationMatrixDropdown = /** @class */ (function (_super) {
12998
13062
  _this._childOptions.transposeData = true;
12999
13063
  _this._childOptions.seriesValues = question.rows.map(function (row) { return row.value; });
13000
13064
  _this._childOptions.seriesLabels = question.rows.map(function (row) { return row.text; });
13001
- var innerQuestions = _this.getQuestions();
13002
13065
  if (_this.canGroupColumns) {
13003
13066
  var creators = _visualizationManager__WEBPACK_IMPORTED_MODULE_2__.VisualizationManager.getVisualizersByType("matrixdropdown-grouped");
13004
13067
  _this._matrixDropdownVisualizer = new creators[0](_this.question, [], _this._childOptions);
13005
13068
  }
13006
13069
  else {
13070
+ var innerQuestions = _this.getQuestions();
13007
13071
  _this._matrixDropdownVisualizer = new _visualizationPanel__WEBPACK_IMPORTED_MODULE_3__.VisualizationPanel(innerQuestions, [], _this._childOptions);
13008
13072
  }
13009
13073
  _this._matrixDropdownVisualizer.onAfterRender.add(_this.onPanelAfterRenderCallback);
@@ -13014,7 +13078,9 @@ var VisualizationMatrixDropdown = /** @class */ (function (_super) {
13014
13078
  get: function () {
13015
13079
  var _this = this;
13016
13080
  var innerQuestions = this.getQuestions();
13017
- var canGroupColumns = this._childOptions.seriesValues.length == 1 && innerQuestions.every(function (innerQuestion) { return isChoicesArraysEqual(innerQuestion.choices, _this.question.choices); });
13081
+ var canGroupColumns = this._childOptions.seriesValues.length == 1 && innerQuestions.every(function (innerQuestion) {
13082
+ return innerQuestion.getType() !== "boolean" && isChoicesArraysEqual(innerQuestion.choices, _this.question.choices);
13083
+ });
13018
13084
  return canGroupColumns;
13019
13085
  },
13020
13086
  enumerable: false,