survey-analytics 2.5.18 → 2.5.19

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 (67) hide show
  1. package/LICENSE +1 -1
  2. package/fesm/shared.mjs +96 -68
  3. package/fesm/shared.mjs.map +1 -1
  4. package/fesm/shared2.mjs +69 -40
  5. package/fesm/shared2.mjs.map +1 -1
  6. package/fesm/survey.analytics.core.mjs +1 -1
  7. package/fesm/survey.analytics.mjs +1 -1
  8. package/fesm/survey.analytics.mongo.mjs +1 -1
  9. package/fesm/survey.analytics.tabulator.mjs +206 -5
  10. package/fesm/survey.analytics.tabulator.mjs.map +1 -1
  11. package/package.json +2 -2
  12. package/survey-analytics-tabulator.types/analytics-localization/arabic.d.ts +1 -0
  13. package/survey-analytics-tabulator.types/analytics-localization/dutch.d.ts +1 -0
  14. package/survey-analytics-tabulator.types/analytics-localization/farsi.d.ts +1 -0
  15. package/survey-analytics-tabulator.types/analytics-localization/finnish.d.ts +1 -0
  16. package/survey-analytics-tabulator.types/analytics-localization/french.d.ts +1 -0
  17. package/survey-analytics-tabulator.types/analytics-localization/german.d.ts +1 -0
  18. package/survey-analytics-tabulator.types/analytics-localization/italian.d.ts +1 -0
  19. package/survey-analytics-tabulator.types/analytics-localization/japanese.d.ts +1 -0
  20. package/survey-analytics-tabulator.types/analytics-localization/norwegian.d.ts +1 -0
  21. package/survey-analytics-tabulator.types/analytics-localization/polish.d.ts +1 -0
  22. package/survey-analytics-tabulator.types/analytics-localization/portuguese.d.ts +1 -0
  23. package/survey-analytics-tabulator.types/analytics-localization/russian.d.ts +1 -0
  24. package/survey-analytics-tabulator.types/analytics-localization/spanish.d.ts +1 -0
  25. package/survey-analytics-tabulator.types/analytics-localization/swedish.d.ts +1 -0
  26. package/survey-analytics-tabulator.types/tables/columnbuilder.d.ts +8 -2
  27. package/survey-analytics-tabulator.types/tables/columns.d.ts +11 -1
  28. package/survey-analytics-tabulator.types/tables/config.d.ts +2 -1
  29. package/survey-analytics-tabulator.types/tables/table.d.ts +8 -0
  30. package/survey-analytics-tabulator.types/tables/tabulator.d.ts +3 -0
  31. package/survey-analytics.types/analytics-localization/arabic.d.ts +1 -0
  32. package/survey-analytics.types/analytics-localization/dutch.d.ts +1 -0
  33. package/survey-analytics.types/analytics-localization/farsi.d.ts +1 -0
  34. package/survey-analytics.types/analytics-localization/finnish.d.ts +1 -0
  35. package/survey-analytics.types/analytics-localization/french.d.ts +1 -0
  36. package/survey-analytics.types/analytics-localization/german.d.ts +1 -0
  37. package/survey-analytics.types/analytics-localization/italian.d.ts +1 -0
  38. package/survey-analytics.types/analytics-localization/japanese.d.ts +1 -0
  39. package/survey-analytics.types/analytics-localization/norwegian.d.ts +1 -0
  40. package/survey-analytics.types/analytics-localization/polish.d.ts +1 -0
  41. package/survey-analytics.types/analytics-localization/portuguese.d.ts +1 -0
  42. package/survey-analytics.types/analytics-localization/russian.d.ts +1 -0
  43. package/survey-analytics.types/analytics-localization/spanish.d.ts +1 -0
  44. package/survey-analytics.types/analytics-localization/swedish.d.ts +1 -0
  45. package/survey-analytics.types/boolean.d.ts +1 -0
  46. package/survey-analytics.types/selectBase.d.ts +5 -1
  47. package/survey.analytics.core.css +1 -1
  48. package/survey.analytics.core.js +154 -95
  49. package/survey.analytics.core.js.map +1 -1
  50. package/survey.analytics.core.min.css +1 -1
  51. package/survey.analytics.core.min.js +1 -1
  52. package/survey.analytics.core.min.js.LICENSE.txt +1 -1
  53. package/survey.analytics.css +1 -1
  54. package/survey.analytics.js +154 -95
  55. package/survey.analytics.js.map +1 -1
  56. package/survey.analytics.min.css +1 -1
  57. package/survey.analytics.min.js +1 -1
  58. package/survey.analytics.min.js.LICENSE.txt +1 -1
  59. package/survey.analytics.mongo.js +1 -1
  60. package/survey.analytics.mongo.min.js.LICENSE.txt +1 -1
  61. package/survey.analytics.tabulator.css +39 -1
  62. package/survey.analytics.tabulator.css.map +1 -1
  63. package/survey.analytics.tabulator.js +337 -71
  64. package/survey.analytics.tabulator.js.map +1 -1
  65. package/survey.analytics.tabulator.min.css +2 -2
  66. package/survey.analytics.tabulator.min.js +1 -1
  67. package/survey.analytics.tabulator.min.js.LICENSE.txt +1 -1
package/fesm/shared2.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - SurveyJS Dashboard library v2.5.18
2
+ * surveyjs - SurveyJS Dashboard library v2.5.19
3
3
  * Copyright (c) 2015-2026 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
@@ -1386,6 +1386,33 @@ VisualizationManager.registerVisualizer("number", NumberModel, 200);
1386
1386
  VisualizationManager.registerVisualizer("rating", NumberModel, 200);
1387
1387
  VisualizationManager.registerVisualizer("expression", NumberModel);
1388
1388
 
1389
+ class FilterInfo {
1390
+ constructor(visualizer) {
1391
+ this._htmlElement = undefined;
1392
+ this.text = undefined;
1393
+ this._htmlElement = (DocumentHelper.createElement("div", "sa-question__filter"));
1394
+ this.text = DocumentHelper.createElement("span", "sa-question__filter-text");
1395
+ this._htmlElement.appendChild(this.text);
1396
+ const filterClear = DocumentHelper.createButton(() => {
1397
+ visualizer.setSelection(undefined);
1398
+ }, localization.getString("clearButton"));
1399
+ this._htmlElement.appendChild(filterClear);
1400
+ }
1401
+ get htmlElement() {
1402
+ return this._htmlElement;
1403
+ }
1404
+ update(selection) {
1405
+ if (selection !== undefined && selection.value !== undefined) {
1406
+ this._htmlElement.style.display = "inline-flex";
1407
+ this.text.innerText = localization.getString("filter") + ": [" + selection.text + "]";
1408
+ }
1409
+ else {
1410
+ this._htmlElement.style.display = "none";
1411
+ this.text.innerText = "";
1412
+ }
1413
+ }
1414
+ }
1415
+
1389
1416
  function hideEmptyAnswersInData(answersData) {
1390
1417
  const result = {
1391
1418
  datasets: [],
@@ -1581,6 +1608,14 @@ class SelectBase extends VisualizerBase {
1581
1608
  }
1582
1609
  return this.missingAnswersBtn;
1583
1610
  });
1611
+ this.registerToolbarItem("questionFilterInfo", () => {
1612
+ var _a;
1613
+ if (this.supportSelection) {
1614
+ this.filterInfo = new FilterInfo(this);
1615
+ this.filterInfo.update(this.selection);
1616
+ }
1617
+ return (_a = this.filterInfo) === null || _a === void 0 ? void 0 : _a.htmlElement;
1618
+ }, 900);
1584
1619
  }
1585
1620
  /**
1586
1621
  * Chart type - current chart type.
@@ -1680,7 +1715,7 @@ class SelectBase extends VisualizerBase {
1680
1715
  return resultValues.map((value) => ItemValue.getTextOrHtmlByValue(selectBaseQuestion.choices, value)).join(", ");
1681
1716
  }
1682
1717
  isSupportSoftUpdateContent() {
1683
- return true;
1718
+ return !this._hideEmptyAnswers;
1684
1719
  }
1685
1720
  softUpdateContent() {
1686
1721
  var _a;
@@ -1689,6 +1724,11 @@ class SelectBase extends VisualizerBase {
1689
1724
  this._chartAdapter.update(chartNode);
1690
1725
  }
1691
1726
  }
1727
+ getSelectedItemByValue(value) {
1728
+ var _a;
1729
+ const choices = this.question.visibleChoices;
1730
+ return (_a = ItemValue.getItemByValue(choices, value)) !== null && _a !== void 0 ? _a : undefined;
1731
+ }
1692
1732
  getSelectedItemByText(itemText) {
1693
1733
  var _a;
1694
1734
  if (this.question instanceof QuestionRatingModel) {
@@ -1703,6 +1743,19 @@ class SelectBase extends VisualizerBase {
1703
1743
  return selBase.choices.filter((choice) => choice.text === itemText)[0];
1704
1744
  }
1705
1745
  }
1746
+ onDataChanged() {
1747
+ var _a;
1748
+ const filter = this.dataProvider.getFilters().find(f => f.field === this.name);
1749
+ const newFilterValue = filter === null || filter === void 0 ? void 0 : filter.value;
1750
+ const currentSelectionValue = (_a = this.selectedItem) === null || _a === void 0 ? void 0 : _a.value;
1751
+ if (newFilterValue !== currentSelectionValue) {
1752
+ const newSelectedItem = this.getSelectedItemByValue(newFilterValue);
1753
+ this.setSelection(newSelectedItem, true);
1754
+ this.updateToolbar();
1755
+ }
1756
+ super.onDataChanged();
1757
+ this.updateEmptyAnswersBtn();
1758
+ }
1706
1759
  onSelectionChanged(item) {
1707
1760
  var _a;
1708
1761
  if (this.onDataItemSelected !== undefined) {
@@ -1710,10 +1763,14 @@ class SelectBase extends VisualizerBase {
1710
1763
  }
1711
1764
  this.stateChanged("filter", (_a = this.selectedItem) === null || _a === void 0 ? void 0 : _a.value);
1712
1765
  }
1713
- setSelection(item) {
1766
+ setSelection(item, quiet = false) {
1767
+ var _a, _b, _c;
1714
1768
  if (this.selectedItem !== item) {
1715
1769
  this.selectedItem = item;
1716
- this.onSelectionChanged(item);
1770
+ (_a = this.filterInfo) === null || _a === void 0 ? void 0 : _a.update({ value: (_b = this.selectedItem) === null || _b === void 0 ? void 0 : _b.value, text: (_c = this.selectedItem) === null || _c === void 0 ? void 0 : _c.text });
1771
+ if (!quiet) {
1772
+ this.onSelectionChanged(item);
1773
+ }
1717
1774
  }
1718
1775
  }
1719
1776
  get selection() {
@@ -2001,8 +2058,8 @@ class SelectBase extends VisualizerBase {
2001
2058
  this[propertyName] = state[propertyName];
2002
2059
  }
2003
2060
  });
2004
- const selectedItem = ItemValue.getItemByValue(this.question.visibleChoices, state.filter);
2005
- this.setSelection(selectedItem !== null && selectedItem !== void 0 ? selectedItem : undefined);
2061
+ const selectedItem = this.getSelectedItemByValue(state.filter);
2062
+ this.setSelection(selectedItem);
2006
2063
  }
2007
2064
  resetState() {
2008
2065
  super.resetState();
@@ -2043,6 +2100,11 @@ class BooleanModel extends SelectBase {
2043
2100
  get booleanQuestion() {
2044
2101
  return this.question;
2045
2102
  }
2103
+ getSelectedItemByValue(value) {
2104
+ const labels = this.getLabels();
2105
+ const values = this.getValues();
2106
+ return new ItemValue(value, labels[values.indexOf(value)]);
2107
+ }
2046
2108
  getSelectedItemByText(itemText) {
2047
2109
  const labels = this.getLabels();
2048
2110
  const values = this.getValues();
@@ -3359,33 +3421,6 @@ class AlternativeVisualizersWrapper extends VisualizerBase {
3359
3421
  }
3360
3422
  VisualizationManager.registerAltVisualizerSelector(AlternativeVisualizersWrapper);
3361
3423
 
3362
- class FilterInfo {
3363
- constructor(visualizer) {
3364
- this._htmlElement = undefined;
3365
- this.text = undefined;
3366
- this._htmlElement = (DocumentHelper.createElement("div", "sa-question__filter"));
3367
- this.text = DocumentHelper.createElement("span", "sa-question__filter-text");
3368
- this._htmlElement.appendChild(this.text);
3369
- const filterClear = DocumentHelper.createButton(() => {
3370
- visualizer.setSelection(undefined);
3371
- }, localization.getString("clearButton"));
3372
- this._htmlElement.appendChild(filterClear);
3373
- }
3374
- get htmlElement() {
3375
- return this._htmlElement;
3376
- }
3377
- update(selection) {
3378
- if (selection !== undefined && selection.value !== undefined) {
3379
- this._htmlElement.style.display = "inline-flex";
3380
- this.text.innerText = localization.getString("filter") + ": [" + selection.text + "]";
3381
- }
3382
- else {
3383
- this._htmlElement.style.display = "none";
3384
- this.text.innerText = "";
3385
- }
3386
- }
3387
- }
3388
-
3389
3424
  function getDefaultExportFromCjs (x) {
3390
3425
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
3391
3426
  }
@@ -10689,14 +10724,8 @@ class VisualizationPanel extends VisualizerBase {
10689
10724
  }
10690
10725
  if (visualizer.supportSelection) {
10691
10726
  const visualizerWithSelection = visualizer;
10692
- let filterInfo = new FilterInfo(visualizerWithSelection);
10693
- visualizer.registerToolbarItem("questionFilterInfo", () => {
10694
- filterInfo.update(visualizerWithSelection.selection);
10695
- return filterInfo.htmlElement;
10696
- }, 900);
10697
10727
  visualizerWithSelection.onDataItemSelected = (selectedValue, selectedText) => {
10698
- filterInfo.update({ value: selectedValue, text: selectedText });
10699
- this.setFilter(question.name, selectedValue);
10728
+ this.setFilter(visualizer.name, selectedValue);
10700
10729
  };
10701
10730
  }
10702
10731
  visualizer.onUpdate = () => this.layout();