survey-analytics 2.3.4 → 2.3.6

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/fesm/shared.mjs +59 -1
  2. package/fesm/shared.mjs.map +1 -1
  3. package/fesm/shared2.mjs +166 -65
  4. package/fesm/shared2.mjs.map +1 -1
  5. package/fesm/survey.analytics.core.mjs +2 -2
  6. package/fesm/survey.analytics.mjs +12 -5
  7. package/fesm/survey.analytics.mjs.map +1 -1
  8. package/fesm/survey.analytics.tabulator.mjs +17 -4
  9. package/fesm/survey.analytics.tabulator.mjs.map +1 -1
  10. package/package.json +2 -2
  11. package/survey-analytics-tabulator.types/analytics-localization/arabic.d.ts +2 -0
  12. package/survey-analytics-tabulator.types/analytics-localization/dutch.d.ts +2 -0
  13. package/survey-analytics-tabulator.types/analytics-localization/english.d.ts +2 -0
  14. package/survey-analytics-tabulator.types/analytics-localization/farsi.d.ts +2 -0
  15. package/survey-analytics-tabulator.types/analytics-localization/finnish.d.ts +2 -0
  16. package/survey-analytics-tabulator.types/analytics-localization/french.d.ts +2 -0
  17. package/survey-analytics-tabulator.types/analytics-localization/german.d.ts +2 -0
  18. package/survey-analytics-tabulator.types/analytics-localization/italian.d.ts +2 -0
  19. package/survey-analytics-tabulator.types/analytics-localization/japanese.d.ts +2 -0
  20. package/survey-analytics-tabulator.types/analytics-localization/norwegian.d.ts +2 -0
  21. package/survey-analytics-tabulator.types/analytics-localization/polish.d.ts +2 -0
  22. package/survey-analytics-tabulator.types/analytics-localization/portuguese.d.ts +2 -0
  23. package/survey-analytics-tabulator.types/analytics-localization/russian.d.ts +2 -0
  24. package/survey-analytics-tabulator.types/analytics-localization/spanish.d.ts +2 -0
  25. package/survey-analytics-tabulator.types/analytics-localization/swedish.d.ts +2 -0
  26. package/survey-analytics-tabulator.types/localizationManager.d.ts +2 -0
  27. package/survey-analytics-tabulator.types/tables/table.d.ts +6 -2
  28. package/survey-analytics.types/alternativeVizualizersWrapper.d.ts +9 -1
  29. package/survey-analytics.types/analytics-localization/arabic.d.ts +2 -0
  30. package/survey-analytics.types/analytics-localization/dutch.d.ts +2 -0
  31. package/survey-analytics.types/analytics-localization/english.d.ts +2 -0
  32. package/survey-analytics.types/analytics-localization/farsi.d.ts +2 -0
  33. package/survey-analytics.types/analytics-localization/finnish.d.ts +2 -0
  34. package/survey-analytics.types/analytics-localization/french.d.ts +2 -0
  35. package/survey-analytics.types/analytics-localization/german.d.ts +2 -0
  36. package/survey-analytics.types/analytics-localization/italian.d.ts +2 -0
  37. package/survey-analytics.types/analytics-localization/japanese.d.ts +2 -0
  38. package/survey-analytics.types/analytics-localization/norwegian.d.ts +2 -0
  39. package/survey-analytics.types/analytics-localization/polish.d.ts +2 -0
  40. package/survey-analytics.types/analytics-localization/portuguese.d.ts +2 -0
  41. package/survey-analytics.types/analytics-localization/russian.d.ts +2 -0
  42. package/survey-analytics.types/analytics-localization/spanish.d.ts +2 -0
  43. package/survey-analytics.types/analytics-localization/swedish.d.ts +2 -0
  44. package/survey-analytics.types/localizationManager.d.ts +2 -0
  45. package/survey-analytics.types/selectBase.d.ts +2 -1
  46. package/survey-analytics.types/statistics-table.d.ts +11 -1
  47. package/survey-analytics.types/visualizationManager.d.ts +2 -2
  48. package/survey-analytics.types/visualizationPanel.d.ts +2 -1
  49. package/survey-analytics.types/visualizerBase.d.ts +14 -0
  50. package/survey.analytics.core.css +1 -1
  51. package/survey.analytics.core.js +256 -77
  52. package/survey.analytics.core.js.map +1 -1
  53. package/survey.analytics.core.min.css +1 -1
  54. package/survey.analytics.core.min.js +1 -1
  55. package/survey.analytics.core.min.js.LICENSE.txt +1 -1
  56. package/survey.analytics.css +1 -1
  57. package/survey.analytics.js +266 -79
  58. package/survey.analytics.js.map +1 -1
  59. package/survey.analytics.min.css +1 -1
  60. package/survey.analytics.min.js +1 -1
  61. package/survey.analytics.min.js.LICENSE.txt +1 -1
  62. package/survey.analytics.tabulator.css +1 -1
  63. package/survey.analytics.tabulator.js +74 -3
  64. package/survey.analytics.tabulator.js.map +1 -1
  65. package/survey.analytics.tabulator.min.css +1 -1
  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.3.4
2
+ * surveyjs - SurveyJS Dashboard library v2.3.6
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
  */
@@ -189,7 +189,7 @@ class VisualizationManager {
189
189
  if (constructor) {
190
190
  let visualizers = VisualizationManager.vizualizers[qType];
191
191
  if (!!visualizers) {
192
- const vDescr = visualizers.filter(v => v.ctor === constructor || v.ctor.isPrototypeOf(constructor))[0];
192
+ const vDescr = visualizers.filter(v => v.ctor === constructor)[0];
193
193
  if (!!vDescr) {
194
194
  let index = visualizers.indexOf(vDescr);
195
195
  if (index !== -1) {
@@ -212,10 +212,13 @@ class VisualizationManager {
212
212
  }
213
213
  /**
214
214
  * Returns all visualizer constructors for a specified question type.
215
- * @param questionType A question [type](https://surveyjs.io/form-library/documentation/api-reference/question#getType).
215
+ * @param visualizerType A question [type](https://surveyjs.io/form-library/documentation/api-reference/question#getType).
216
216
  */
217
- static getVisualizersByType(questionType) {
218
- let vDescrs = VisualizationManager.vizualizers[questionType];
217
+ static getVisualizersByType(visualizerType, fallbackVisualizerType) {
218
+ let vDescrs = VisualizationManager.vizualizers[visualizerType];
219
+ if (!!fallbackVisualizerType && (!vDescrs || vDescrs.length == 0)) {
220
+ vDescrs = VisualizationManager.vizualizers[fallbackVisualizerType];
221
+ }
219
222
  if (!vDescrs) {
220
223
  if (VisualizationManager.defaultVisualizer.suppressVisualizerStubRendering) {
221
224
  return [];
@@ -277,14 +280,14 @@ class VisualizerFactory {
277
280
  * @param options An object with any custom properties you need within the visualizer.
278
281
  */
279
282
  static createVisualizer(question, data, options) {
280
- let type;
281
- if (question.getType() === "text" && question.inputType) {
282
- type = question.inputType;
283
+ let type = question.getType();
284
+ let creators = [];
285
+ if (type === "text" && question.inputType) {
286
+ creators = VisualizationManager.getVisualizersByType(question.inputType, type);
283
287
  }
284
288
  else {
285
- type = question.getType();
289
+ creators = VisualizationManager.getVisualizersByType(type);
286
290
  }
287
- var creators = VisualizationManager.getVisualizersByType(type);
288
291
  var visualizers = creators.map((creator) => new creator(question, data, options));
289
292
  if (visualizers.length > 1) {
290
293
  const alternativesVisualizerConstructor = VisualizationManager.getAltVisualizerSelector();
@@ -474,6 +477,7 @@ class VisualizerBase {
474
477
  this.footerContainer = undefined;
475
478
  this._supportSelection = false;
476
479
  this._chartAdapter = undefined;
480
+ this._footerIsCollapsed = undefined;
477
481
  /**
478
482
  * An event that is raised after the visualizer's content is rendered.
479
483
  *
@@ -607,9 +611,9 @@ class VisualizerBase {
607
611
  * Indicates whether users can select series points to cross-filter charts. To allow or disallow selection, set the [`allowSelection`](https://surveyjs.io/dashboard/documentation/api-reference/ivisualizationpaneloptions#allowSelection) property of the `IVisualizationPanelOptions` object in the [`VisualizationPanel`](https://surveyjs.io/dashboard/documentation/api-reference/visualizationpanel) constructor.
608
612
  */
609
613
  get supportSelection() {
610
- return ((this.options.allowSelection === undefined ||
614
+ return (this.options.allowSelection === undefined ||
611
615
  this.options.allowSelection) &&
612
- this._supportSelection);
616
+ this._supportSelection;
613
617
  }
614
618
  getSeriesValues() {
615
619
  return this.options.seriesValues || [];
@@ -855,26 +859,36 @@ class VisualizerBase {
855
859
  destroyFooter(container) {
856
860
  container.innerHTML = "";
857
861
  }
862
+ get isFooterCollapsed() {
863
+ if (this._footerIsCollapsed === undefined) {
864
+ this._footerIsCollapsed = VisualizerBase.otherCommentCollapsed;
865
+ }
866
+ return this._footerIsCollapsed;
867
+ }
868
+ set isFooterCollapsed(newVal) {
869
+ this._footerIsCollapsed = newVal;
870
+ }
858
871
  renderFooter(container) {
859
872
  container.innerHTML = "";
860
873
  if (this.hasFooter) {
861
874
  const footerTitleElement = DocumentHelper.createElement("h4", "sa-visualizer__footer-title", { innerText: localization.getString("otherCommentTitle") });
862
875
  container.appendChild(footerTitleElement);
863
876
  const footerContentElement = DocumentHelper.createElement("div", "sa-visualizer__footer-content");
864
- footerContentElement.style.display = VisualizerBase.otherCommentCollapsed
865
- ? "none"
866
- : "block";
877
+ footerContentElement.style.display = this.isFooterCollapsed ? "none" : "block";
878
+ const visibilityButtonText = localization.getString(this.isFooterCollapsed ? "showButton" : "hideButton");
867
879
  const visibilityButton = DocumentHelper.createButton(() => {
868
880
  if (footerContentElement.style.display === "none") {
869
881
  footerContentElement.style.display = "block";
870
882
  visibilityButton.innerText = localization.getString("hideButton");
883
+ this._footerIsCollapsed = false;
871
884
  }
872
885
  else {
873
886
  footerContentElement.style.display = "none";
874
- visibilityButton.innerText = localization.getString(VisualizerBase.otherCommentCollapsed ? "showButton" : "hideButton");
887
+ visibilityButton.innerText = localization.getString("showButton");
888
+ this._footerIsCollapsed = true;
875
889
  }
876
890
  this.footerVisualizer.invokeOnUpdate();
877
- }, localization.getString("showButton") /*, "sa-toolbar__button--right"*/);
891
+ }, visibilityButtonText /*, "sa-toolbar__button--right"*/);
878
892
  container.appendChild(visibilityButton);
879
893
  container.appendChild(footerContentElement);
880
894
  this.footerVisualizer.render(footerContentElement);
@@ -1072,6 +1086,7 @@ class VisualizerBase {
1072
1086
  *
1073
1087
  * > This method is overriden in classes descendant from `VisualizerBase`.
1074
1088
  * @see setState
1089
+ * @see resetState
1075
1090
  * @see onStateChanged
1076
1091
  */
1077
1092
  getState() {
@@ -1084,10 +1099,21 @@ class VisualizerBase {
1084
1099
  *
1085
1100
  * > This method is overriden in classes descendant from `VisualizerBase`.
1086
1101
  * @see getState
1102
+ * @see resetState
1087
1103
  * @see onStateChanged
1088
1104
  */
1089
1105
  setState(state) {
1090
1106
  }
1107
+ /**
1108
+ * Resets the visualizer's state.
1109
+ *
1110
+ * > This method is overriden in classes descendant from `VisualizerBase`.
1111
+ * @see getState
1112
+ * @see setState
1113
+ * @see onStateChanged
1114
+ */
1115
+ resetState() {
1116
+ }
1091
1117
  /**
1092
1118
  * Gets or sets the current locale.
1093
1119
  *
@@ -1312,11 +1338,9 @@ class SelectBase extends VisualizerBase {
1312
1338
  this.emptyAnswersBtn = undefined;
1313
1339
  this.transposeDataBtn = undefined;
1314
1340
  this.topNSelector = undefined;
1315
- this._showPercentages = false;
1316
1341
  this._showOnlyPercentages = false;
1317
- this._percentagePrecision = 0;
1342
+ this._percentagePrecision = 2;
1318
1343
  this._answersOrder = "default";
1319
- this._supportSelection = true;
1320
1344
  this._hideEmptyAnswers = false;
1321
1345
  this._topN = -1;
1322
1346
  this.topNValues = [].concat(SelectBase.topNValuesDefaults);
@@ -1336,7 +1360,7 @@ class SelectBase extends VisualizerBase {
1336
1360
  this.dataProvider.raiseDataChanged();
1337
1361
  };
1338
1362
  }
1339
- this._showPercentages = this.options.showPercentages === true;
1363
+ this._supportSelection = true;
1340
1364
  this._showOnlyPercentages = this.options.showOnlyPercentages === true;
1341
1365
  if (this.options.percentagePrecision) {
1342
1366
  this._percentagePrecision = this.options.percentagePrecision;
@@ -1579,11 +1603,22 @@ class SelectBase extends VisualizerBase {
1579
1603
  this.refreshContent();
1580
1604
  this.stateChanged("showOnlyPercentages", val);
1581
1605
  }
1606
+ getShowPercentagesDefault() {
1607
+ if (this.options.showPercentages === undefined) {
1608
+ return ["pie", "doughnut"].indexOf(this.chartType) !== -1;
1609
+ }
1610
+ return this.options.showPercentages === true;
1611
+ }
1582
1612
  /**
1583
1613
  * Gets and sets whether chart should show values and percentages.
1584
1614
  */
1585
1615
  get showPercentages() {
1586
- return this._showPercentages;
1616
+ if (this._showPercentages !== undefined) {
1617
+ return this._showPercentages;
1618
+ }
1619
+ else {
1620
+ return this.getShowPercentagesDefault();
1621
+ }
1587
1622
  }
1588
1623
  set showPercentages(val) {
1589
1624
  this._showPercentages = val;
@@ -1715,12 +1750,10 @@ class SelectBase extends VisualizerBase {
1715
1750
  var percentages = [];
1716
1751
  var percentagePrecision = this._percentagePrecision;
1717
1752
  if (data.length < 2) {
1718
- data.forEach((res, index) => {
1719
- var sum = res.reduce((sum, val) => sum + val, 0);
1720
- percentages[index] = res.map((val) => {
1721
- var value = percentagePrecision ? +(val / sum).toFixed(percentagePrecision) : Math.round((val / sum) * 10000);
1722
- return sum && (value / 100);
1723
- });
1753
+ var sum = data[0].reduce((sum, val) => sum + val, 0);
1754
+ percentages[0] = data[0].map((val) => {
1755
+ var value = percentagePrecision ? +(val / sum * 100).toFixed(percentagePrecision) : Math.round(val / sum * 100);
1756
+ return sum && value;
1724
1757
  });
1725
1758
  }
1726
1759
  else {
@@ -1732,7 +1765,7 @@ class SelectBase extends VisualizerBase {
1732
1765
  for (var j = 0; j < data.length; j++) {
1733
1766
  if (!Array.isArray(percentages[j]))
1734
1767
  percentages[j] = [];
1735
- var value = percentagePrecision ? +((data[j][i] / sum) * 100).toFixed(percentagePrecision) : Math.round((data[j][i] / sum) * 100);
1768
+ var value = percentagePrecision ? +(data[j][i] / sum * 100).toFixed(percentagePrecision) : Math.round(data[j][i] / sum * 100);
1736
1769
  percentages[j][i] = sum && value;
1737
1770
  }
1738
1771
  }
@@ -1764,14 +1797,13 @@ class SelectBase extends VisualizerBase {
1764
1797
  let datasets = (yield this.getCalculatedValues());
1765
1798
  let labels = this.getLabels();
1766
1799
  let colors = this.getColors();
1767
- var texts = this.showPercentages ? this.getPercentages(datasets) : datasets;
1768
1800
  if (this.transposeData) {
1769
1801
  datasets = this.transpose(datasets);
1770
- texts = this.transpose(texts);
1771
1802
  const temp = seriesLabels;
1772
1803
  seriesLabels = labels;
1773
1804
  labels = temp;
1774
1805
  }
1806
+ var texts = this.showPercentages ? this.getPercentages(datasets) : datasets;
1775
1807
  if (this.answersOrder == "asc" || this.answersOrder == "desc") {
1776
1808
  var zippedArray = this.showPercentages
1777
1809
  ? DataHelper.zipArrays(labels, colors, texts[0])
@@ -1853,6 +1885,18 @@ class SelectBase extends VisualizerBase {
1853
1885
  const selectedItem = ItemValue.getItemByValue(this.question.visibleChoices, state.filter);
1854
1886
  this.setSelection(selectedItem !== null && selectedItem !== void 0 ? selectedItem : undefined);
1855
1887
  }
1888
+ resetState() {
1889
+ super.resetState();
1890
+ // this._showPercentages = this.options.showPercentages === true;
1891
+ // this._showOnlyPercentages = this.options.showOnlyPercentages === true;
1892
+ // this._showMissingAnswers = this.isSupportMissingAnswers() && this.options.showMissingAnswers === true;
1893
+ // this._transposeData = this.options.transposeData || false;
1894
+ this._hideEmptyAnswers = this.options.hideEmptyAnswers === true;
1895
+ this._answersOrder = this.options.answersOrder || "default";
1896
+ this._topN = -1;
1897
+ this.chartType = this.chartTypes[0];
1898
+ this.setSelection(undefined);
1899
+ }
1856
1900
  }
1857
1901
  SelectBase.topNValuesDefaults = [-1, 5, 10, 20];
1858
1902
  SelectBase._stateProperties = ["chartType", "answersOrder", "hideEmptyAnswers", "topN"];
@@ -1861,6 +1905,7 @@ VisualizationManager.registerVisualizer("radiogroup", SelectBase);
1861
1905
  VisualizationManager.registerVisualizer("dropdown", SelectBase);
1862
1906
  VisualizationManager.registerVisualizer("imagepicker", SelectBase);
1863
1907
  VisualizationManager.registerVisualizer("tagbox", SelectBase);
1908
+ VisualizationManager.registerVisualizer("rating", SelectBase, 100);
1864
1909
 
1865
1910
  class BooleanModel extends SelectBase {
1866
1911
  constructor(question, data, options, name) {
@@ -2079,7 +2124,7 @@ HistogramModel.IntervalsCount = 10;
2079
2124
  HistogramModel.UseIntervalsFrom = 10;
2080
2125
  VisualizationManager.registerVisualizer("date", HistogramModel);
2081
2126
  VisualizationManager.registerVisualizer("number", HistogramModel, 100);
2082
- VisualizationManager.registerVisualizer("rating", HistogramModel, 100);
2127
+ VisualizationManager.registerVisualizer("rating", HistogramModel, 300);
2083
2128
 
2084
2129
  class Matrix extends SelectBase {
2085
2130
  constructor(question, data, options, name) {
@@ -2672,12 +2717,15 @@ class AlternativeVisualizersWrapper extends VisualizerBase {
2672
2717
  setVisualizer(type, quiet = false) {
2673
2718
  const visualizerCandidate = this.visualizers.filter((v) => v.type === type)[0];
2674
2719
  if (!!visualizerCandidate && visualizerCandidate !== this.visualizer) {
2720
+ let isFooterCollapsed;
2675
2721
  if (!!this.visualizer) {
2722
+ isFooterCollapsed = this.visualizer.isFooterCollapsed;
2676
2723
  this.visualizer.onStateChanged.remove(this.onVisualizerStateChangedCallback);
2677
2724
  this.visualizer.onAfterRender.remove(this.onAfterVisualizerRenderCallback);
2678
2725
  this.visualizer.destroy();
2679
2726
  }
2680
2727
  this.visualizer = visualizerCandidate;
2728
+ this.visualizer.isFooterCollapsed = isFooterCollapsed;
2681
2729
  this.refresh();
2682
2730
  this.visualizer.onAfterRender.add(this.onAfterVisualizerRenderCallback);
2683
2731
  this.visualizer.onStateChanged.add(this.onVisualizerStateChangedCallback);
@@ -2723,6 +2771,7 @@ class AlternativeVisualizersWrapper extends VisualizerBase {
2723
2771
  *
2724
2772
  * > This method is overriden in descendant classes.
2725
2773
  * @see setState
2774
+ * @see resetState
2726
2775
  */
2727
2776
  getState() {
2728
2777
  const currentVisualizerState = this.visualizer.getState();
@@ -2737,8 +2786,8 @@ class AlternativeVisualizersWrapper extends VisualizerBase {
2737
2786
  /**
2738
2787
  * Sets the visualizer's state.
2739
2788
  *
2740
- * > This method is overriden in descendant classes.
2741
2789
  * @see getState
2790
+ * @see resetState
2742
2791
  */
2743
2792
  setState(state) {
2744
2793
  if (!!state.visualizer) {
@@ -2748,6 +2797,17 @@ class AlternativeVisualizersWrapper extends VisualizerBase {
2748
2797
  this.visualizer.setState(state.state);
2749
2798
  }
2750
2799
  }
2800
+ /**
2801
+ * Resets the visualizer's state.
2802
+ *
2803
+ * @see getState
2804
+ * @see setState
2805
+ */
2806
+ resetState() {
2807
+ super.resetState();
2808
+ this.visualizers.forEach(visualizer => visualizer.resetState());
2809
+ this.setVisualizer(this.visualizers[0].type, true);
2810
+ }
2751
2811
  getValues() {
2752
2812
  return this.visualizer.getValues();
2753
2813
  }
@@ -9839,48 +9899,52 @@ class VisualizationPanel extends VisualizerBase {
9839
9899
  return createCommercialLicenseLink();
9840
9900
  });
9841
9901
  }
9842
- this.registerToolbarItem("resetFilter", () => {
9843
- return DocumentHelper.createButton(() => {
9844
- this.visualizers.forEach((visualizer) => {
9845
- if (visualizer instanceof SelectBase || visualizer instanceof AlternativeVisualizersWrapper) {
9846
- visualizer.setSelection(undefined);
9847
- }
9848
- });
9849
- }, localization.getString("resetFilter"));
9850
- }, 900);
9902
+ this._supportSelection = true;
9903
+ if (this.supportSelection !== false) {
9904
+ this.registerToolbarItem("resetFilter", () => {
9905
+ return DocumentHelper.createButton(() => {
9906
+ this.visualizers.forEach((visualizer) => {
9907
+ if (visualizer instanceof SelectBase || visualizer instanceof AlternativeVisualizersWrapper) {
9908
+ visualizer.setSelection(undefined);
9909
+ }
9910
+ });
9911
+ }, localization.getString("resetFilter"));
9912
+ }, 900);
9913
+ }
9851
9914
  this.registerToolbarItem("addElement", (toolbar) => {
9852
9915
  if (this.allowHideQuestions) {
9853
9916
  let addElementSelector = undefined;
9854
9917
  const addElementSelectorUpdater = (panel, options) => {
9855
9918
  const hiddenElements = this.hiddenElements;
9919
+ const selectWrapper = DocumentHelper.createSelector([
9920
+ {
9921
+ name: undefined,
9922
+ displayName: localization.getString("addElement"),
9923
+ },
9924
+ ]
9925
+ .concat(hiddenElements)
9926
+ .map((element) => {
9927
+ return {
9928
+ value: element.name,
9929
+ text: element.displayName,
9930
+ };
9931
+ }), (option) => false, (e) => {
9932
+ this.showElement(e.target.value);
9933
+ });
9934
+ if (addElementSelector) {
9935
+ toolbar.replaceChild(selectWrapper, addElementSelector);
9936
+ }
9937
+ addElementSelector = selectWrapper;
9856
9938
  if (hiddenElements.length > 0) {
9857
- const selectWrapper = DocumentHelper.createSelector([
9858
- {
9859
- name: undefined,
9860
- displayName: localization.getString("addElement"),
9861
- },
9862
- ]
9863
- .concat(hiddenElements)
9864
- .map((element) => {
9865
- return {
9866
- value: element.name,
9867
- text: element.displayName,
9868
- };
9869
- }), (option) => false, (e) => {
9870
- this.showElement(e.target.value);
9871
- });
9872
- (addElementSelector &&
9873
- toolbar.replaceChild(selectWrapper, addElementSelector)) ||
9874
- toolbar.appendChild(selectWrapper);
9875
- addElementSelector = selectWrapper;
9939
+ addElementSelector.style.display = undefined;
9876
9940
  }
9877
- else {
9878
- addElementSelector && toolbar.removeChild(addElementSelector);
9879
- addElementSelector = undefined;
9941
+ else if (addElementSelector) {
9942
+ addElementSelector.style.display = "none";
9880
9943
  }
9881
9944
  };
9882
9945
  addElementSelectorUpdater();
9883
9946
  this.onVisibleElementsChanged.add(addElementSelectorUpdater);
9947
+ return addElementSelector;
9884
9948
  }
9885
9949
  return undefined;
9886
9950
  });
@@ -10343,6 +10407,18 @@ class VisualizationPanel extends VisualizerBase {
10343
10407
  }
10344
10408
  this.refresh();
10345
10409
  }
10410
+ resetState() {
10411
+ this._settingState = true;
10412
+ super.resetState();
10413
+ try {
10414
+ this.visualizers.forEach(visualizer => visualizer.resetState());
10415
+ this.locale = surveyLocalization.defaultLocale;
10416
+ }
10417
+ finally {
10418
+ this._settingState = false;
10419
+ }
10420
+ this.refresh();
10421
+ }
10346
10422
  get permissions() {
10347
10423
  return this._elements.map((element) => {
10348
10424
  return {
@@ -12395,9 +12471,34 @@ class StatisticsTable extends SelectBase {
12395
12471
  super.destroy();
12396
12472
  }
12397
12473
  }
12474
+ class StatisticsTableBoolean extends BooleanModel {
12475
+ constructor(question, data, options, name) {
12476
+ super(question, data, options, name || "options");
12477
+ this._statisticsTableAdapter = new StatisticsTableAdapter(this);
12478
+ this.showPercentages = true;
12479
+ }
12480
+ destroyContent(container) {
12481
+ this._statisticsTableAdapter.destroy(container);
12482
+ super.destroyContent(container);
12483
+ }
12484
+ renderContentAsync(container) {
12485
+ return __awaiter(this, void 0, void 0, function* () {
12486
+ const tableNode = DocumentHelper.createElement("div");
12487
+ yield this._statisticsTableAdapter.create(tableNode);
12488
+ container.innerHTML = "";
12489
+ container.appendChild(tableNode);
12490
+ return container;
12491
+ });
12492
+ }
12493
+ destroy() {
12494
+ this._statisticsTableAdapter.destroy(this.contentContainer);
12495
+ super.destroy();
12496
+ }
12497
+ }
12398
12498
  VisualizationManager.registerVisualizer("radiogroup", StatisticsTable);
12399
12499
  VisualizationManager.registerVisualizer("dropdown", StatisticsTable);
12400
12500
  VisualizationManager.registerVisualizer("checkbox", StatisticsTable);
12501
+ VisualizationManager.registerVisualizer("boolean", StatisticsTableBoolean);
12401
12502
 
12402
12503
  class NpsVisualizerWidget {
12403
12504
  constructor(_model, _data) {
@@ -12526,5 +12627,5 @@ NpsVisualizer.DetractorScore = 6;
12526
12627
  NpsVisualizer.PromoterScore = 9;
12527
12628
  // VisualizationManager.registerVisualizer("rating", NpsVisualizer);
12528
12629
 
12529
- export { AlternativeVisualizersWrapper as A, BooleanModel as B, DataProvider as D, HistogramModel as H, Matrix as M, NumberModel as N, PostponeHelper as P, RankingModel as R, SelectBase as S, TextTableAdapter as T, VisualizerFactory as V, WordCloudAdapter as W, __awaiter as _, VisualizerBase as a, VisualizationManager as b, VisualizationPanel as c, VisualizationPanelDynamic as d, VisualizationMatrixDynamic as e, VisualizationMatrixDropdown as f, WordCloud as g, hideEmptyAnswersInData as h, Text as i, StatisticsTableAdapter as j, StatisticsTable as k, NpsVisualizerWidget as l, NpsAdapter as m, NpsVisualizer as n, PivotModel as o, defaultStatisticsCalculator as p, textHelper as t };
12630
+ export { AlternativeVisualizersWrapper as A, BooleanModel as B, DataProvider as D, HistogramModel as H, Matrix as M, NumberModel as N, PostponeHelper as P, RankingModel as R, SelectBase as S, TextTableAdapter as T, VisualizerFactory as V, WordCloudAdapter as W, __awaiter as _, VisualizerBase as a, VisualizationManager as b, VisualizationPanel as c, VisualizationPanelDynamic as d, VisualizationMatrixDynamic as e, VisualizationMatrixDropdown as f, WordCloud as g, hideEmptyAnswersInData as h, Text as i, StatisticsTableAdapter as j, StatisticsTable as k, StatisticsTableBoolean as l, NpsVisualizerWidget as m, NpsAdapter as n, NpsVisualizer as o, PivotModel as p, defaultStatisticsCalculator as q, textHelper as t };
12530
12631
  //# sourceMappingURL=shared2.mjs.map