survey-react 1.9.87 → 1.9.88

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/survey.react.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - Survey JavaScript library v1.9.87
2
+ * surveyjs - Survey JavaScript library v1.9.88
3
3
  * Copyright (c) 2015-2023 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
@@ -6797,7 +6797,7 @@ var DragDropChoices = /** @class */ (function (_super) {
6797
6797
  };
6798
6798
  DragDropChoices.prototype.createImagePickerShortcut = function (item, text, draggedElementNode, event) {
6799
6799
  var draggedElementShortcut = document.createElement("div");
6800
- draggedElementShortcut.style.cssText = " \n cursor: grabbing;\n position: absolute;\n z-index: 1000;\n filter: drop-shadow(0px 2px 6px rgba(0, 0, 0, 0.1));\n box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1);\n padding: 4px;\n border-radius: 4px;\n background: white;\n ";
6800
+ draggedElementShortcut.style.cssText = " \n cursor: grabbing;\n position: absolute;\n z-index: 1000;\n box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1), 0px 2px 6px rgba(0, 0, 0, 0.1);\n padding: 4px;\n border-radius: 4px;\n background: white;\n ";
6801
6801
  var itemValueNode = draggedElementNode.closest("[data-sv-drop-target-item-value]");
6802
6802
  var controlsNode = itemValueNode.querySelector(".svc-image-item-value-controls");
6803
6803
  var imageContainerNode = itemValueNode.querySelector(".sd-imagepicker__image-container");
@@ -7384,7 +7384,7 @@ var DragDropMatrixRows = /** @class */ (function (_super) {
7384
7384
  var row = (draggedElementNode
7385
7385
  .closest("[data-sv-drop-target-matrix-row]"));
7386
7386
  var clone = (row.cloneNode(isDeepClone));
7387
- clone.style.cssText = "\n filter: drop-shadow(0px 2px 6px rgba(0, 0, 0, 0.1));\n box-shadow: rgb(0 0 0 / 10%) 0px 8px 16px;\n background-color: white;\n display: flex;\n flex-grow: 0;\n flex-shrink: 0;\n align-items: center;\n line-height: 0;\n width: " + row.offsetWidth + "px;\n ";
7387
+ clone.style.cssText = "\n box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1), 0px 2px 6px rgba(0, 0, 0, 0.1);\n background-color: white;\n display: flex;\n flex-grow: 0;\n flex-shrink: 0;\n align-items: center;\n line-height: 0;\n width: " + row.offsetWidth + "px;\n ";
7388
7388
  clone.classList.remove("sv-matrix__drag-drop--moveup");
7389
7389
  clone.classList.remove("sv-matrix__drag-drop--movedown");
7390
7390
  this.draggedElement.isDragDropMoveDown = false;
@@ -7551,7 +7551,7 @@ var DragDropRankingChoices = /** @class */ (function (_super) {
7551
7551
  DragDropRankingChoices.prototype.createDraggedElementShortcut = function (text, draggedElementNode, event) {
7552
7552
  var draggedElementShortcut = document.createElement("div");
7553
7553
  draggedElementShortcut.className = this.shortcutClass + " sv-ranking-shortcut";
7554
- draggedElementShortcut.style.cssText = " \n cursor: grabbing;\n position: absolute;\n z-index: 1000;\n border-radius: 36px;\n min-width: 100px;\n filter: drop-shadow(0px 2px 6px rgba(0, 0, 0, 0.1));\n box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1);\n background-color: var(--background, white);\n font-family: var(--font-family, $font-family);\n ";
7554
+ draggedElementShortcut.style.cssText = " \n cursor: grabbing;\n position: absolute;\n z-index: 1000;\n border-radius: 36px;\n min-width: 100px;\n box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1), 0px 2px 6px rgba(0, 0, 0, 0.1);\n background-color: var(--background, white);\n font-family: var(--font-family, $font-family);\n ";
7555
7555
  var isDeepClone = true;
7556
7556
  var clone = draggedElementNode.cloneNode(isDeepClone);
7557
7557
  draggedElementShortcut.appendChild(clone);
@@ -9659,7 +9659,7 @@ __webpack_require__.r(__webpack_exports__);
9659
9659
  // import "../../main.scss";
9660
9660
  //import "../../modern.scss";
9661
9661
  var Version;
9662
- Version = "" + "1.9.87";
9662
+ Version = "" + "1.9.88";
9663
9663
  function checkLibraryVersion(ver, libraryName) {
9664
9664
  if (Version != ver) {
9665
9665
  var str = "survey-core has version '" + Version + "' and " + libraryName
@@ -31415,6 +31415,10 @@ var PopupModel = /** @class */ (function (_super) {
31415
31415
  _this.title = title;
31416
31416
  return _this;
31417
31417
  }
31418
+ PopupModel.prototype.refreshInnerModel = function () {
31419
+ var innerModel = this.contentComponentData["model"];
31420
+ innerModel && innerModel.refresh && innerModel.refresh();
31421
+ };
31418
31422
  Object.defineProperty(PopupModel.prototype, "isVisible", {
31419
31423
  get: function () {
31420
31424
  return this.getPropertyValue("isVisible", false);
@@ -31425,9 +31429,8 @@ var PopupModel = /** @class */ (function (_super) {
31425
31429
  }
31426
31430
  this.setPropertyValue("isVisible", value);
31427
31431
  this.onVisibilityChanged.fire(this, { model: this, isVisible: value });
31432
+ this.refreshInnerModel();
31428
31433
  if (this.isVisible) {
31429
- var innerModel = this.contentComponentData["model"];
31430
- innerModel && innerModel.refresh && innerModel.refresh();
31431
31434
  this.onShow();
31432
31435
  }
31433
31436
  else {
@@ -37497,6 +37500,7 @@ var QuestionCheckboxModel = /** @class */ (function (_super) {
37497
37500
  if (operator == "contains" || operator == "notcontains") {
37498
37501
  json["type"] = "radiogroup";
37499
37502
  }
37503
+ json["maxSelectedChoices"] = 0;
37500
37504
  return json;
37501
37505
  };
37502
37506
  QuestionCheckboxModel.prototype.isAnswerCorrect = function () {
@@ -48684,6 +48688,13 @@ var QuestionPanelDynamicItemTextProcessor = /** @class */ (function (_super) {
48684
48688
  enumerable: false,
48685
48689
  configurable: true
48686
48690
  });
48691
+ Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, "visiblePanelIndex", {
48692
+ get: function () {
48693
+ return !!this.data ? this.data.getVisibleItemIndex(this.panelItem) : -1;
48694
+ },
48695
+ enumerable: false,
48696
+ configurable: true
48697
+ });
48687
48698
  QuestionPanelDynamicItemTextProcessor.prototype.getValues = function () {
48688
48699
  return this.panelItem.getAllValues();
48689
48700
  };
@@ -48713,6 +48724,14 @@ var QuestionPanelDynamicItemTextProcessor = /** @class */ (function (_super) {
48713
48724
  return true;
48714
48725
  }
48715
48726
  }
48727
+ if (textValue.name == QuestionPanelDynamicItem.VisibleIndexVariableName) {
48728
+ var index = this.visiblePanelIndex;
48729
+ if (index > -1) {
48730
+ textValue.isExists = true;
48731
+ textValue.value = index + 1;
48732
+ return true;
48733
+ }
48734
+ }
48716
48735
  if (textValue.name.toLowerCase().indexOf(QuestionPanelDynamicItem.ParentItemVariableName + ".") == 0) {
48717
48736
  var q = this.data;
48718
48737
  if (!!q && !!q.parentQuestion && !!q.parent && !!q.parent.data) {
@@ -48798,8 +48817,11 @@ var QuestionPanelDynamicItem = /** @class */ (function () {
48798
48817
  values[QuestionPanelDynamicItem.ItemVariableName] = this.getAllValues();
48799
48818
  if (!!this.data) {
48800
48819
  var indexStr = QuestionPanelDynamicItem.IndexVariableName;
48820
+ var visibleIndexStr = QuestionPanelDynamicItem.VisibleIndexVariableName;
48801
48821
  delete values[indexStr];
48822
+ delete values[visibleIndexStr];
48802
48823
  values[indexStr.toLowerCase()] = this.data.getItemIndex(this);
48824
+ values[visibleIndexStr.toLowerCase()] = this.data.getVisibleItemIndex(this);
48803
48825
  var q = this.data;
48804
48826
  if (!!q && !!q.parentQuestion && !!q.parent) {
48805
48827
  values[QuestionPanelDynamicItem.ParentItemVariableName] = q.parent.getValue();
@@ -48824,6 +48846,7 @@ var QuestionPanelDynamicItem = /** @class */ (function () {
48824
48846
  QuestionPanelDynamicItem.ItemVariableName = "panel";
48825
48847
  QuestionPanelDynamicItem.ParentItemVariableName = "parentpanel";
48826
48848
  QuestionPanelDynamicItem.IndexVariableName = "panelIndex";
48849
+ QuestionPanelDynamicItem.VisibleIndexVariableName = "visiblePanelIndex";
48827
48850
  return QuestionPanelDynamicItem;
48828
48851
  }());
48829
48852
 
@@ -48859,7 +48882,8 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
48859
48882
  _this.recalculateIsReadyValue();
48860
48883
  };
48861
48884
  _this.isSetPanelItemData = {};
48862
- _this.createNewArray("panels");
48885
+ _this.createNewArray("panels", function (panel) { _this.onPanelAdded(panel); }, function (panel) { _this.onPanelRemoved(panel); });
48886
+ _this.createNewArray("visiblePanels");
48863
48887
  _this.templateValue = _this.createAndSetupNewPanelObject();
48864
48888
  _this.template.renderWidth = "100%";
48865
48889
  _this.template.selectedElementInDesign = _this;
@@ -48895,8 +48919,8 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
48895
48919
  configurable: true
48896
48920
  });
48897
48921
  QuestionPanelDynamicModel.prototype.getFirstQuestionToFocus = function (withError) {
48898
- for (var i = 0; i < this.panels.length; i++) {
48899
- var res = this.panels[i].getFirstQuestionToFocus(withError);
48922
+ for (var i = 0; i < this.visiblePanels.length; i++) {
48923
+ var res = this.visiblePanels[i].getFirstQuestionToFocus(withError);
48900
48924
  if (!!res)
48901
48925
  return res;
48902
48926
  }
@@ -49007,6 +49031,11 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49007
49031
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "templateTitle", {
49008
49032
  /**
49009
49033
  * A template for panel titles.
49034
+ *
49035
+ * The template can contain the following placeholders:
49036
+ *
49037
+ * - `{panelIndex}` - A zero-based index of a panel in the [`panels`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#panels) array.
49038
+ * - `{visiblePanelIndex}` - A zero-based index of a panel in the [`visiblePanels`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#visiblePanels) array.
49010
49039
  * @see template
49011
49040
  * @see templateDescription
49012
49041
  * @see templateElements
@@ -49032,6 +49061,11 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49032
49061
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "templateTabTitle", {
49033
49062
  /**
49034
49063
  * A template for tab titles. Applies when [`renderMode`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#renderMode) is `"tab"`.
49064
+ *
49065
+ * The template can contain the following placeholders:
49066
+ *
49067
+ * - `{panelIndex}` - A zero-based index of a panel in the [`panels`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#panels) array.
49068
+ * - `{visiblePanelIndex}` - A zero-based index of a panel in the [`visiblePanels`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#visiblePanels) array.
49035
49069
  * @see templateTitle
49036
49070
  * @see renderMode
49037
49071
  */
@@ -49076,6 +49110,27 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49076
49110
  enumerable: false,
49077
49111
  configurable: true
49078
49112
  });
49113
+ Object.defineProperty(QuestionPanelDynamicModel.prototype, "templateVisibleIf", {
49114
+ /**
49115
+ * A Boolean expression that is evaluated against each panel. If the expression evaluates to `false`, the panel becomes hidden.
49116
+ *
49117
+ * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.
49118
+ *
49119
+ * Use the `{panel}` placeholder to reference the current panel in the expression.
49120
+ *
49121
+ * Refer to the following help topic for more information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#conditional-visibility).
49122
+ * @see visibleIf
49123
+ * @see visiblePanels
49124
+ */
49125
+ get: function () {
49126
+ return this.template.visibleIf;
49127
+ },
49128
+ set: function (val) {
49129
+ this.template.visibleIf = val;
49130
+ },
49131
+ enumerable: false,
49132
+ configurable: true
49133
+ });
49079
49134
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "items", {
49080
49135
  get: function () {
49081
49136
  var res = [];
@@ -49100,6 +49155,53 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49100
49155
  enumerable: false,
49101
49156
  configurable: true
49102
49157
  });
49158
+ Object.defineProperty(QuestionPanelDynamicModel.prototype, "visiblePanels", {
49159
+ /**
49160
+ * An array of currently visible panels ([`PanelModel`](https://surveyjs.io/form-library/documentation/api-reference/panel-model) objects).
49161
+ * @see templateVisibleIf
49162
+ */
49163
+ get: function () {
49164
+ return this.getPropertyValue("visiblePanels");
49165
+ },
49166
+ enumerable: false,
49167
+ configurable: true
49168
+ });
49169
+ QuestionPanelDynamicModel.prototype.onPanelAdded = function (panel) {
49170
+ this.onPanelRemovedCore(panel);
49171
+ if (!panel.visible)
49172
+ return;
49173
+ var index = 0;
49174
+ var panels = this.panels;
49175
+ for (var i = 0; i < panels.length; i++) {
49176
+ if (panels[i] === panel)
49177
+ break;
49178
+ if (panels[i].visible)
49179
+ index++;
49180
+ }
49181
+ this.visiblePanels.splice(index, 0, panel);
49182
+ this.addTabFromToolbar(panel, index);
49183
+ if (!this.currentPanel) {
49184
+ this.currentPanel = panel;
49185
+ }
49186
+ };
49187
+ QuestionPanelDynamicModel.prototype.onPanelRemoved = function (panel) {
49188
+ var index = this.onPanelRemovedCore(panel);
49189
+ if (this.currentPanel === panel) {
49190
+ var visPanels = this.visiblePanels;
49191
+ if (index >= visPanels.length)
49192
+ index = visPanels.length - 1;
49193
+ this.currentPanel = index >= 0 ? visPanels[index] : null;
49194
+ }
49195
+ };
49196
+ QuestionPanelDynamicModel.prototype.onPanelRemovedCore = function (panel) {
49197
+ var visPanels = this.visiblePanels;
49198
+ var index = visPanels.indexOf(panel);
49199
+ if (index > -1) {
49200
+ visPanels.splice(index, 1);
49201
+ this.removeTabFromToolbar(panel);
49202
+ }
49203
+ return index;
49204
+ };
49103
49205
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "currentIndex", {
49104
49206
  /**
49105
49207
  * A zero-based index of the currently displayed panel.
@@ -49115,33 +49217,18 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49115
49217
  return -1;
49116
49218
  if (this.useTemplatePanel)
49117
49219
  return 0;
49118
- if (this.currentIndexValue < 0 && this.panelCount > 0) {
49119
- this.currentIndexValue = 0;
49120
- }
49121
- if (this.currentIndexValue >= this.panelCount) {
49122
- this.currentIndexValue = this.panelCount - 1;
49123
- }
49124
- return this.currentIndexValue;
49220
+ return this.visiblePanels.indexOf(this.currentPanel);
49125
49221
  },
49126
49222
  set: function (val) {
49127
- if (this.currentIndexValue !== val) {
49128
- if (val >= this.panelCount)
49129
- val = this.panelCount - 1;
49130
- this.currentIndexValue = val;
49131
- this.updateFooterActions();
49132
- this.updateTabToolbarItemsPressedState();
49133
- this.fireCallback(this.currentIndexChangedCallback);
49134
- }
49223
+ if (val < 0 || this.visiblePanelCount < 1)
49224
+ return;
49225
+ if (val >= this.visiblePanelCount)
49226
+ val = this.visiblePanelCount - 1;
49227
+ this.currentPanel = this.visiblePanels[val];
49135
49228
  },
49136
49229
  enumerable: false,
49137
49230
  configurable: true
49138
49231
  });
49139
- Object.defineProperty(QuestionPanelDynamicModel.prototype, "currentIndexValue", {
49140
- get: function () { return this.getPropertyValue("currentIndexValue", -1); },
49141
- set: function (val) { this.setPropertyValue("currentIndexValue", val); },
49142
- enumerable: false,
49143
- configurable: true
49144
- });
49145
49232
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "currentPanel", {
49146
49233
  /**
49147
49234
  * A `PanelModel` object that is the currently displayed panel.
@@ -49153,10 +49240,24 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49153
49240
  * @see renderMode
49154
49241
  */
49155
49242
  get: function () {
49156
- var index = this.currentIndex;
49157
- if (index < 0 || index >= this.panels.length)
49243
+ if (this.isRenderModeList || this.useTemplatePanel)
49158
49244
  return null;
49159
- return this.panels[index];
49245
+ var res = this.getPropertyValue("currentPanel", null);
49246
+ if (!res && this.visiblePanelCount > 0) {
49247
+ res = this.visiblePanels[0];
49248
+ this.currentPanel = res;
49249
+ }
49250
+ return res;
49251
+ },
49252
+ set: function (val) {
49253
+ if (this.isRenderModeList || this.useTemplatePanel)
49254
+ return;
49255
+ if (!!val && this.visiblePanels.indexOf(val) < 0 || val === this.getPropertyValue("currentPanel"))
49256
+ return;
49257
+ this.setPropertyValue("currentPanel", val);
49258
+ this.updateFooterActions();
49259
+ this.updateTabToolbarItemsPressedState();
49260
+ this.fireCallback(this.currentIndexChangedCallback);
49160
49261
  },
49161
49262
  enumerable: false,
49162
49263
  configurable: true
@@ -49362,7 +49463,7 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49362
49463
  * @see panelNextText
49363
49464
  */
49364
49465
  get: function () {
49365
- return this.currentIndex >= 0 && this.currentIndex < this.panelCount - 1;
49466
+ return this.currentIndex >= 0 && this.currentIndex < this.visiblePanelCount - 1;
49366
49467
  },
49367
49468
  enumerable: false,
49368
49469
  configurable: true
@@ -49374,10 +49475,10 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49374
49475
  });
49375
49476
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "isRangeShowing", {
49376
49477
  /**
49377
- * Returns true when showRangeInProgress equals to true, renderMode doesn't equal to "list" and panelCount is >= 2.
49478
+ * Returns true when showRangeInProgress equals to true, renderMode doesn't equal to "list" and visiblePanelCount is >= 2.
49378
49479
  */
49379
49480
  get: function () {
49380
- return (this.showRangeInProgress && this.currentIndex >= 0 && this.panelCount > 1);
49481
+ return (this.showRangeInProgress && this.currentIndex >= 0 && this.visiblePanelCount > 1);
49381
49482
  },
49382
49483
  enumerable: false,
49383
49484
  configurable: true
@@ -49445,7 +49546,6 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49445
49546
  for (var i = this.panelCount; i < val; i++) {
49446
49547
  var panel = this.createNewPanel();
49447
49548
  this.panels.push(panel);
49448
- this.addTabFromToolbar(panel);
49449
49549
  if (this.renderMode == "list" && this.panelsState != "default") {
49450
49550
  if (this.panelsState === "expand") {
49451
49551
  panel.expand();
@@ -49466,11 +49566,19 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49466
49566
  this.reRunCondition();
49467
49567
  this.updateFooterActions();
49468
49568
  this.fireCallback(this.panelCountChangedCallback);
49469
- (removedPanels.length > 0) && this.removeTabFromToolbar(removedPanels);
49470
49569
  },
49471
49570
  enumerable: false,
49472
49571
  configurable: true
49473
49572
  });
49573
+ Object.defineProperty(QuestionPanelDynamicModel.prototype, "visiblePanelCount", {
49574
+ /**
49575
+ * Returns the number of visible panels in Dynamic Panel.
49576
+ * @see templateVisibleIf
49577
+ */
49578
+ get: function () { return this.visiblePanels.length; },
49579
+ enumerable: false,
49580
+ configurable: true
49581
+ });
49474
49582
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "panelsState", {
49475
49583
  /**
49476
49584
  * Specifies whether users can expand and collapse panels. Applies if `renderMode` is `"list"` and the `templateTitle` property is specified.
@@ -49745,7 +49853,7 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49745
49853
  });
49746
49854
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "hasTitleOnLeftTop", {
49747
49855
  get: function () {
49748
- if (this.isRenderModeTab && !!this.panelCount)
49856
+ if (this.isRenderModeTab && this.visiblePanelCount > 0)
49749
49857
  return true;
49750
49858
  if (!this.hasTitle)
49751
49859
  return false;
@@ -49759,8 +49867,8 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49759
49867
  if (!this.isVisible)
49760
49868
  return 0;
49761
49869
  var startIndex = this.showQuestionNumbers == "onSurvey" ? value : 0;
49762
- for (var i = 0; i < this.panels.length; i++) {
49763
- var counter = this.setPanelVisibleIndex(this.panels[i], startIndex, this.showQuestionNumbers != "off");
49870
+ for (var i = 0; i < this.visiblePanels.length; i++) {
49871
+ var counter = this.setPanelVisibleIndex(this.visiblePanels[i], startIndex, this.showQuestionNumbers != "off");
49764
49872
  if (this.showQuestionNumbers == "onSurvey") {
49765
49873
  startIndex += counter;
49766
49874
  }
@@ -49793,7 +49901,7 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49793
49901
  get: function () {
49794
49902
  if (this.isDesignMode)
49795
49903
  return false;
49796
- if (this.isDefaultV2Theme && !this.legacyNavigation && !this.isRenderModeList && this.currentIndex < this.panelCount - 1) {
49904
+ if (this.isDefaultV2Theme && !this.legacyNavigation && !this.isRenderModeList && this.currentIndex < this.visiblePanelCount - 1) {
49797
49905
  return false;
49798
49906
  }
49799
49907
  return (this.allowAddPanel &&
@@ -49912,7 +50020,7 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
49912
50020
  return true;
49913
50021
  };
49914
50022
  QuestionPanelDynamicModel.prototype.getProgressInfo = function () {
49915
- return _survey_element__WEBPACK_IMPORTED_MODULE_1__["SurveyElement"].getProgressInfoByElements(this.panels, this.isRequired);
50023
+ return _survey_element__WEBPACK_IMPORTED_MODULE_1__["SurveyElement"].getProgressInfoByElements(this.visiblePanels, this.isRequired);
49916
50024
  };
49917
50025
  QuestionPanelDynamicModel.prototype.isRowEmpty = function (val) {
49918
50026
  for (var prop in val) {
@@ -50028,10 +50136,13 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50028
50136
  * @see template
50029
50137
  */
50030
50138
  QuestionPanelDynamicModel.prototype.removePanel = function (value) {
50031
- var index = this.getPanelIndex(value);
50032
- if (index < 0 || index >= this.panelCount)
50139
+ var visIndex = this.getVisualPanelIndex(value);
50140
+ if (visIndex < 0 || visIndex >= this.visiblePanelCount)
50141
+ return;
50142
+ var panel = this.visiblePanels[visIndex];
50143
+ var index = this.panels.indexOf(panel);
50144
+ if (index < 0)
50033
50145
  return;
50034
- var panel = this.panels[index];
50035
50146
  if (this.survey && !this.survey.dynamicPanelRemoving(this, index, panel))
50036
50147
  return;
50037
50148
  this.panels.splice(index, 1);
@@ -50047,14 +50158,13 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50047
50158
  if (this.survey)
50048
50159
  this.survey.dynamicPanelRemoved(this, index, panel);
50049
50160
  this.isValueChangingInternally = false;
50050
- this.removeTabFromToolbar([panel]);
50051
50161
  };
50052
- QuestionPanelDynamicModel.prototype.getPanelIndex = function (val) {
50162
+ QuestionPanelDynamicModel.prototype.getVisualPanelIndex = function (val) {
50053
50163
  if (_helpers__WEBPACK_IMPORTED_MODULE_0__["Helpers"].isNumber(val))
50054
50164
  return val;
50055
- var items = this.items;
50056
- for (var i = 0; i < this.panels.length; i++) {
50057
- if (this.panels[i] === val || items[i] === val)
50165
+ var visPanels = this.visiblePanels;
50166
+ for (var i = 0; i < visPanels.length; i++) {
50167
+ if (visPanels[i] === val || visPanels[i].data === val)
50058
50168
  return i;
50059
50169
  }
50060
50170
  return -1;
@@ -50318,7 +50428,7 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50318
50428
  QuestionPanelDynamicModel.prototype.getIsAnswered = function () {
50319
50429
  if (!_super.prototype.getIsAnswered.call(this))
50320
50430
  return false;
50321
- var panels = this.panels;
50431
+ var panels = this.visiblePanels;
50322
50432
  for (var i = 0; i < panels.length; i++) {
50323
50433
  var visibleQuestions = [];
50324
50434
  panels[i].addQuestionsToList(visibleQuestions, true);
@@ -50356,8 +50466,9 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50356
50466
  };
50357
50467
  QuestionPanelDynamicModel.prototype.getAllErrors = function () {
50358
50468
  var result = _super.prototype.getAllErrors.call(this);
50359
- for (var i = 0; i < this.panels.length; i++) {
50360
- var questions = this.panels[i].questions;
50469
+ var panels = this.visiblePanels;
50470
+ for (var i = 0; i < panels.length; i++) {
50471
+ var questions = panels[i].questions;
50361
50472
  for (var j = 0; j < questions.length; j++) {
50362
50473
  var errors = questions[j].getAllErrors();
50363
50474
  if (errors && errors.length > 0) {
@@ -50403,7 +50514,7 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50403
50514
  };
50404
50515
  QuestionPanelDynamicModel.prototype.hasErrorInPanels = function (fireCallback, rec) {
50405
50516
  var res = false;
50406
- var panels = this.panels;
50517
+ var panels = this.visiblePanels;
50407
50518
  var keyValues = [];
50408
50519
  for (var i = 0; i < panels.length; i++) {
50409
50520
  this.setOnCompleteAsyncInPanel(panels[i]);
@@ -50486,6 +50597,13 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50486
50597
  return _this.getPanelActions(panel);
50487
50598
  };
50488
50599
  panel.footerToolbarCss = this.cssClasses.panelFooter;
50600
+ panel.registerPropertyChangedHandlers(["visible"], function () {
50601
+ if (panel.visible)
50602
+ _this.onPanelAdded(panel);
50603
+ else
50604
+ _this.onPanelRemoved(panel);
50605
+ _this.updateFooterActions();
50606
+ });
50489
50607
  return panel;
50490
50608
  };
50491
50609
  QuestionPanelDynamicModel.prototype.createAndSetupNewPanelObject = function () {
@@ -50596,6 +50714,14 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50596
50714
  var res = this.items.indexOf(item);
50597
50715
  return res > -1 ? res : this.items.length;
50598
50716
  };
50717
+ QuestionPanelDynamicModel.prototype.getVisibleItemIndex = function (item) {
50718
+ var visPanels = this.visiblePanels;
50719
+ for (var i = 0; i < visPanels.length; i++) {
50720
+ if (visPanels[i].data === item)
50721
+ return i;
50722
+ }
50723
+ return visPanels.length;
50724
+ };
50599
50725
  QuestionPanelDynamicModel.prototype.getPanelItemData = function (item) {
50600
50726
  var items = this.items;
50601
50727
  var index = items.indexOf(item);
@@ -50699,7 +50825,7 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50699
50825
  };
50700
50826
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "progressText", {
50701
50827
  get: function () {
50702
- var rangeMax = this.panelCount;
50828
+ var rangeMax = this.visiblePanelCount;
50703
50829
  return this.getLocalizationFormatString("panelDynamicProgressText", this.currentIndex + 1, rangeMax);
50704
50830
  },
50705
50831
  enumerable: false,
@@ -50707,7 +50833,7 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50707
50833
  });
50708
50834
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "progress", {
50709
50835
  get: function () {
50710
- return ((this.currentIndex + 1) / this.panelCount) * 100 + "%";
50836
+ return ((this.currentIndex + 1) / this.visiblePanelCount) * 100 + "%";
50711
50837
  },
50712
50838
  enumerable: false,
50713
50839
  configurable: true
@@ -50780,7 +50906,7 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50780
50906
  configurable: true
50781
50907
  });
50782
50908
  QuestionPanelDynamicModel.prototype.getShowNoEntriesPlaceholder = function () {
50783
- return !!this.cssClasses.noEntriesPlaceholder && !this.isDesignMode && this.panelCount === 0;
50909
+ return !!this.cssClasses.noEntriesPlaceholder && !this.isDesignMode && this.visiblePanelCount === 0;
50784
50910
  };
50785
50911
  QuestionPanelDynamicModel.prototype.needResponsiveWidth = function () {
50786
50912
  var panel = this.getPanel();
@@ -50840,7 +50966,6 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50840
50966
  var addBtn = new _actions_action__WEBPACK_IMPORTED_MODULE_11__["Action"]({
50841
50967
  id: "sv-pd-add-btn",
50842
50968
  component: "sv-paneldynamic-add-btn",
50843
- visible: new _base__WEBPACK_IMPORTED_MODULE_12__["ComputedUpdater"](function () { return _this.canAddPanel; }),
50844
50969
  data: { question: this }
50845
50970
  });
50846
50971
  var prevBtnIcon = new _actions_action__WEBPACK_IMPORTED_MODULE_11__["Action"]({
@@ -50865,8 +50990,9 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50865
50990
  var isMobile = _this.isMobile;
50866
50991
  var showNavigation = !isLegacyNavigation && !isRenderModeList;
50867
50992
  prevTextBtn.visible = showNavigation && _this.currentIndex > 0;
50868
- nextTextBtn.visible = showNavigation && _this.currentIndex < _this.panelCount - 1;
50993
+ nextTextBtn.visible = showNavigation && _this.currentIndex < _this.visiblePanelCount - 1;
50869
50994
  nextTextBtn.needSpace = isMobile && nextTextBtn.visible && prevTextBtn.visible;
50995
+ addBtn.visible = _this.canAddPanel;
50870
50996
  addBtn.needSpace = _this.isMobile && !nextTextBtn.visible && prevTextBtn.visible;
50871
50997
  progressText.visible = !_this.isRenderModeList && !isMobile;
50872
50998
  progressText.needSpace = !isLegacyNavigation && !_this.isMobile;
@@ -50907,9 +51033,9 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50907
51033
  QuestionPanelDynamicModel.prototype.updateTabToolbarItemsPressedState = function () {
50908
51034
  if (!this.isRenderModeTab)
50909
51035
  return;
50910
- if (this.currentIndex < 0 || this.currentIndex >= this.panels.length)
51036
+ if (this.currentIndex < 0 || this.currentIndex >= this.visiblePanelCount)
50911
51037
  return;
50912
- var panel = this.panels[this.currentIndex];
51038
+ var panel = this.visiblePanels[this.currentIndex];
50913
51039
  this.additionalTitleToolbar.renderedActions.forEach(function (action) { return action.pressed = action.id === panel.id; });
50914
51040
  };
50915
51041
  QuestionPanelDynamicModel.prototype.updateTabToolbar = function () {
@@ -50917,24 +51043,23 @@ var QuestionPanelDynamicModel = /** @class */ (function (_super) {
50917
51043
  if (!this.isRenderModeTab)
50918
51044
  return;
50919
51045
  var items = [];
50920
- this.panels.forEach(function (panel) { return items.push(_this.createTabByPanel(panel)); });
51046
+ this.visiblePanels.forEach(function (panel) { return items.push(_this.createTabByPanel(panel)); });
50921
51047
  this.additionalTitleToolbar.setItems(items);
50922
51048
  };
50923
- QuestionPanelDynamicModel.prototype.addTabFromToolbar = function (panel) {
51049
+ QuestionPanelDynamicModel.prototype.addTabFromToolbar = function (panel, index) {
50924
51050
  if (!this.isRenderModeTab)
50925
51051
  return;
50926
51052
  var newItem = this.createTabByPanel(panel);
50927
- this.additionalTitleToolbar.actions.push(newItem);
51053
+ this.additionalTitleToolbar.actions.splice(index, 0, newItem);
50928
51054
  this.updateTabToolbarItemsPressedState();
50929
51055
  };
50930
- QuestionPanelDynamicModel.prototype.removeTabFromToolbar = function (panels) {
50931
- var _this = this;
51056
+ QuestionPanelDynamicModel.prototype.removeTabFromToolbar = function (panel) {
50932
51057
  if (!this.isRenderModeTab)
50933
51058
  return;
50934
- panels.forEach(function (panel) {
50935
- var removedItem = _this.additionalTitleToolbar.getActionById(panel.id);
50936
- _this.additionalTitleToolbar.actions.splice(_this.additionalTitleToolbar.actions.indexOf(removedItem), 1);
50937
- });
51059
+ var removedItem = this.additionalTitleToolbar.getActionById(panel.id);
51060
+ if (!removedItem)
51061
+ return;
51062
+ this.additionalTitleToolbar.actions.splice(this.additionalTitleToolbar.actions.indexOf(removedItem), 1);
50938
51063
  this.updateTabToolbarItemsPressedState();
50939
51064
  };
50940
51065
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "showLegacyNavigation", {
@@ -51022,6 +51147,10 @@ _jsonobject__WEBPACK_IMPORTED_MODULE_5__["Serializer"].addClass("paneldynamic",
51022
51147
  default: "default",
51023
51148
  choices: ["default", "top", "bottom", "left"],
51024
51149
  },
51150
+ {
51151
+ name: "templateVisibleIf:expression",
51152
+ category: "logic"
51153
+ },
51025
51154
  {
51026
51155
  name: "panelRemoveButtonLocation",
51027
51156
  default: "bottom",
@@ -52473,7 +52602,7 @@ _jsonobject__WEBPACK_IMPORTED_MODULE_2__["Serializer"].addClass("rating", [
52473
52602
  name: "autoGenerate",
52474
52603
  category: "rateValues",
52475
52604
  default: true,
52476
- choices: [{ value: true, text: "Generate" }, { value: false, text: "Enter manually" }],
52605
+ choices: [true, false],
52477
52606
  visibleIndex: 4
52478
52607
  },
52479
52608
  {
@@ -55722,7 +55851,7 @@ var NotifierComponent = /** @class */ (function (_super) {
55722
55851
  if (!this.notifier.isDisplayed)
55723
55852
  return null;
55724
55853
  var style = { visibility: this.notifier.active ? "visible" : "hidden" };
55725
- return (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: this.notifier.css, style: style },
55854
+ return (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: this.notifier.css, style: style, role: "alert", "aria-live": "polite" },
55726
55855
  react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", null, this.notifier.message),
55727
55856
  react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_action_bar_action_bar__WEBPACK_IMPORTED_MODULE_3__["SurveyActionBar"], { model: this.notifier.actionBar })));
55728
55857
  };
@@ -60863,6 +60992,7 @@ __webpack_require__.r(__webpack_exports__);
60863
60992
  /* harmony import */ var _components_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/svg-icon/svg-icon */ "./src/react/components/svg-icon/svg-icon.tsx");
60864
60993
  /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
60865
60994
  /* harmony import */ var _reactquestion_factory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./reactquestion_factory */ "./src/react/reactquestion_factory.tsx");
60995
+ /* harmony import */ var _reactSurvey__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./reactSurvey */ "./src/react/reactSurvey.tsx");
60866
60996
  var __extends = (undefined && undefined.__extends) || (function () {
60867
60997
  var extendStatics = function (d, b) {
60868
60998
  extendStatics = Object.setPrototypeOf ||
@@ -60883,6 +61013,7 @@ var __extends = (undefined && undefined.__extends) || (function () {
60883
61013
 
60884
61014
 
60885
61015
 
61016
+
60886
61017
  var SurveyQuestionFile = /** @class */ (function (_super) {
60887
61018
  __extends(SurveyQuestionFile, _super);
60888
61019
  function SurveyQuestionFile(props) {
@@ -60920,7 +61051,7 @@ var SurveyQuestionFile = /** @class */ (function (_super) {
60920
61051
  var questionCss = this.question.cssClasses;
60921
61052
  var noFileChosen = null;
60922
61053
  var chooseFile = null;
60923
- chooseFile = (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("label", { role: "button", tabIndex: 0, className: this.question.getChooseFileCss(), htmlFor: this.question.inputId, "aria-label": this.question.chooseButtonCaption },
61054
+ chooseFile = Object(_reactSurvey__WEBPACK_IMPORTED_MODULE_5__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("label", { role: "button", tabIndex: 0, className: this.question.getChooseFileCss(), htmlFor: this.question.inputId, "aria-label": this.question.chooseButtonCaption },
60924
61055
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", null, this.question.chooseButtonCaption),
60925
61056
  (!!this.question.cssClasses.chooseFileIconId) ? react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_2__["SvgIcon"], { title: this.question.chooseButtonCaption, iconName: this.question.cssClasses.chooseFileIconId, size: "auto" }) : null));
60926
61057
  if (this.question.isEmpty()) {
@@ -63567,9 +63698,6 @@ var SurveyQuestionTagboxItem = /** @class */ (function (_super) {
63567
63698
  function SurveyQuestionTagboxItem(props) {
63568
63699
  return _super.call(this, props) || this;
63569
63700
  }
63570
- SurveyQuestionTagboxItem.prototype.getStateElement = function () {
63571
- return this.item;
63572
- };
63573
63701
  Object.defineProperty(SurveyQuestionTagboxItem.prototype, "question", {
63574
63702
  get: function () {
63575
63703
  return this.props.question;
@@ -70514,8 +70642,8 @@ var SurveyModel = /** @class */ (function (_super) {
70514
70642
  this.stopTimer();
70515
70643
  this.isCompleted = true;
70516
70644
  this.clearUnusedValues();
70517
- this.setCookie();
70518
70645
  this.saveDataOnComplete(isCompleteOnTrigger);
70646
+ this.setCookie();
70519
70647
  return true;
70520
70648
  };
70521
70649
  SurveyModel.prototype.saveDataOnComplete = function (isCompleteOnTrigger) {
@@ -74080,7 +74208,9 @@ __webpack_require__.r(__webpack_exports__);
74080
74208
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createTOCListModel", function() { return createTOCListModel; });
74081
74209
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTocRootCss", function() { return getTocRootCss; });
74082
74210
  /* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./actions/action */ "./src/actions/action.ts");
74083
- /* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./list */ "./src/list.ts");
74211
+ /* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ "./src/base.ts");
74212
+ /* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./list */ "./src/list.ts");
74213
+
74084
74214
 
74085
74215
 
74086
74216
  function tryNavigateToPage(survey, index) {
@@ -74107,10 +74237,11 @@ function createTOCListModel(survey) {
74107
74237
  !!document.activeElement.blur && document.activeElement.blur();
74108
74238
  }
74109
74239
  return tryNavigateToPage(survey, index);
74110
- }
74240
+ },
74241
+ visible: new _base__WEBPACK_IMPORTED_MODULE_1__["ComputedUpdater"](function () { return page.isVisible; })
74111
74242
  });
74112
74243
  });
74113
- var listModel = new _list__WEBPACK_IMPORTED_MODULE_1__["ListModel"](items, function (item) {
74244
+ var listModel = new _list__WEBPACK_IMPORTED_MODULE_2__["ListModel"](items, function (item) {
74114
74245
  if (!!item.action()) {
74115
74246
  listModel.selectedItem = item;
74116
74247
  }
@@ -76003,7 +76134,7 @@ function mergeValues(src, dest) {
76003
76134
  return;
76004
76135
  for (var key in src) {
76005
76136
  var value = src[key];
76006
- if (value && typeof value === "object") {
76137
+ if (!Array.isArray(value) && value && typeof value === "object") {
76007
76138
  if (!dest[key] || typeof dest[key] !== "object")
76008
76139
  dest[key] = {};
76009
76140
  mergeValues(value, dest[key]);