survey-core 1.12.3 → 1.12.4

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 (239) hide show
  1. package/defaultV2.css +16 -39
  2. package/defaultV2.css.map +1 -1
  3. package/defaultV2.fontless.css +16 -39
  4. package/defaultV2.fontless.css.map +1 -1
  5. package/defaultV2.fontless.min.css +2 -2
  6. package/defaultV2.min.css +2 -2
  7. package/i18n/arabic.js +1 -1
  8. package/i18n/arabic.min.js +1 -1
  9. package/i18n/basque.js +1 -1
  10. package/i18n/basque.min.js +1 -1
  11. package/i18n/bulgarian.js +1 -1
  12. package/i18n/bulgarian.min.js +1 -1
  13. package/i18n/catalan.js +1 -1
  14. package/i18n/catalan.min.js +1 -1
  15. package/i18n/croatian.js +1 -1
  16. package/i18n/croatian.min.js +1 -1
  17. package/i18n/czech.js +1 -1
  18. package/i18n/czech.min.js +1 -1
  19. package/i18n/danish.js +1 -1
  20. package/i18n/danish.min.js +1 -1
  21. package/i18n/dutch.js +1 -1
  22. package/i18n/dutch.min.js +1 -1
  23. package/i18n/english.js +1 -1
  24. package/i18n/english.min.js +1 -1
  25. package/i18n/estonian.js +1 -1
  26. package/i18n/estonian.min.js +1 -1
  27. package/i18n/finnish.js +1 -1
  28. package/i18n/finnish.min.js +1 -1
  29. package/i18n/french.js +1 -1
  30. package/i18n/french.min.js +1 -1
  31. package/i18n/georgian.js +1 -1
  32. package/i18n/georgian.min.js +1 -1
  33. package/i18n/german.js +1 -1
  34. package/i18n/german.min.js +1 -1
  35. package/i18n/greek.js +1 -1
  36. package/i18n/greek.min.js +1 -1
  37. package/i18n/hebrew.js +1 -1
  38. package/i18n/hebrew.min.js +1 -1
  39. package/i18n/hindi.js +1 -1
  40. package/i18n/hindi.min.js +1 -1
  41. package/i18n/hungarian.js +1 -1
  42. package/i18n/hungarian.min.js +1 -1
  43. package/i18n/icelandic.js +1 -1
  44. package/i18n/icelandic.min.js +1 -1
  45. package/i18n/index.js +1 -1
  46. package/i18n/index.min.js +1 -1
  47. package/i18n/indonesian.js +1 -1
  48. package/i18n/indonesian.min.js +1 -1
  49. package/i18n/italian.js +1 -1
  50. package/i18n/italian.min.js +1 -1
  51. package/i18n/japanese.js +1 -1
  52. package/i18n/japanese.min.js +1 -1
  53. package/i18n/kazakh.js +1 -1
  54. package/i18n/kazakh.min.js +1 -1
  55. package/i18n/korean.js +1 -1
  56. package/i18n/korean.min.js +1 -1
  57. package/i18n/latvian.js +1 -1
  58. package/i18n/latvian.min.js +1 -1
  59. package/i18n/lithuanian.js +1 -1
  60. package/i18n/lithuanian.min.js +1 -1
  61. package/i18n/macedonian.js +1 -1
  62. package/i18n/macedonian.min.js +1 -1
  63. package/i18n/malay.js +1 -1
  64. package/i18n/malay.min.js +1 -1
  65. package/i18n/nl-BE.js +1 -1
  66. package/i18n/nl-BE.min.js +1 -1
  67. package/i18n/norwegian.js +1 -1
  68. package/i18n/norwegian.min.js +1 -1
  69. package/i18n/persian.js +1 -1
  70. package/i18n/persian.min.js +1 -1
  71. package/i18n/philippines.js +1 -1
  72. package/i18n/philippines.min.js +1 -1
  73. package/i18n/polish.js +1 -1
  74. package/i18n/polish.min.js +1 -1
  75. package/i18n/portuguese-br.js +1 -1
  76. package/i18n/portuguese-br.min.js +1 -1
  77. package/i18n/portuguese.js +1 -1
  78. package/i18n/portuguese.min.js +1 -1
  79. package/i18n/romanian.js +1 -1
  80. package/i18n/romanian.min.js +1 -1
  81. package/i18n/russian.js +1 -1
  82. package/i18n/russian.min.js +1 -1
  83. package/i18n/serbian.js +1 -1
  84. package/i18n/serbian.min.js +1 -1
  85. package/i18n/simplified-chinese.js +1 -1
  86. package/i18n/simplified-chinese.min.js +1 -1
  87. package/i18n/slovak.js +1 -1
  88. package/i18n/slovak.min.js +1 -1
  89. package/i18n/spanish.js +1 -1
  90. package/i18n/spanish.min.js +1 -1
  91. package/i18n/swahili.js +1 -1
  92. package/i18n/swahili.min.js +1 -1
  93. package/i18n/swedish.js +1 -1
  94. package/i18n/swedish.min.js +1 -1
  95. package/i18n/tajik.js +1 -1
  96. package/i18n/tajik.min.js +1 -1
  97. package/i18n/telugu.js +1 -1
  98. package/i18n/telugu.min.js +1 -1
  99. package/i18n/thai.js +1 -1
  100. package/i18n/thai.min.js +1 -1
  101. package/i18n/traditional-chinese.js +1 -1
  102. package/i18n/traditional-chinese.min.js +1 -1
  103. package/i18n/turkish.js +1 -1
  104. package/i18n/turkish.min.js +1 -1
  105. package/i18n/ukrainian.js +1 -1
  106. package/i18n/ukrainian.min.js +1 -1
  107. package/i18n/urdu.js +1 -1
  108. package/i18n/urdu.min.js +1 -1
  109. package/i18n/vietnamese.js +1 -1
  110. package/i18n/vietnamese.min.js +1 -1
  111. package/i18n/welsh.js +1 -1
  112. package/i18n/welsh.min.js +1 -1
  113. package/modern.css +23 -77
  114. package/modern.css.map +1 -1
  115. package/modern.fontless.css +23 -77
  116. package/modern.fontless.css.map +1 -1
  117. package/modern.fontless.min.css +2 -2
  118. package/modern.min.css +2 -2
  119. package/package.json +1 -1
  120. package/plugins/bootstrap-integration/index.js +1 -2
  121. package/plugins/bootstrap-integration/index.js.map +1 -1
  122. package/plugins/bootstrap-integration/index.min.js +2 -2
  123. package/plugins/bootstrap-material-integration/index.js +1 -2
  124. package/plugins/bootstrap-material-integration/index.js.map +1 -1
  125. package/plugins/bootstrap-material-integration/index.min.js +2 -2
  126. package/survey.core.js +419 -154
  127. package/survey.core.js.map +1 -1
  128. package/survey.core.min.js +3 -3
  129. package/survey.css +11 -17
  130. package/survey.css.map +1 -1
  131. package/survey.i18n.js +1 -1
  132. package/survey.i18n.min.js +1 -1
  133. package/survey.min.css +2 -2
  134. package/themes/borderless-dark-panelless.js +1 -1
  135. package/themes/borderless-dark-panelless.min.js +1 -1
  136. package/themes/borderless-dark.js +1 -1
  137. package/themes/borderless-dark.min.js +1 -1
  138. package/themes/borderless-light-panelless..js +1 -1
  139. package/themes/borderless-light-panelless..min.js +1 -1
  140. package/themes/borderless-light.js +1 -1
  141. package/themes/borderless-light.min.js +1 -1
  142. package/themes/contrast-dark-panelless.js +1 -1
  143. package/themes/contrast-dark-panelless.min.js +1 -1
  144. package/themes/contrast-dark.js +1 -1
  145. package/themes/contrast-dark.min.js +1 -1
  146. package/themes/contrast-light-panelless.js +1 -1
  147. package/themes/contrast-light-panelless.min.js +1 -1
  148. package/themes/contrast-light.js +1 -1
  149. package/themes/contrast-light.min.js +1 -1
  150. package/themes/default-dark-panelless.js +1 -1
  151. package/themes/default-dark-panelless.min.js +1 -1
  152. package/themes/default-dark.js +1 -1
  153. package/themes/default-dark.min.js +1 -1
  154. package/themes/default-light-panelless.js +1 -1
  155. package/themes/default-light-panelless.min.js +1 -1
  156. package/themes/default-light.js +1 -1
  157. package/themes/default-light.min.js +1 -1
  158. package/themes/doubleborder-dark-panelless.js +1 -1
  159. package/themes/doubleborder-dark-panelless.min.js +1 -1
  160. package/themes/doubleborder-dark.js +1 -1
  161. package/themes/doubleborder-dark.min.js +1 -1
  162. package/themes/doubleborder-light-panelles.js +1 -1
  163. package/themes/doubleborder-light-panelles.min.js +1 -1
  164. package/themes/doubleborder-light.js +1 -1
  165. package/themes/doubleborder-light.min.js +1 -1
  166. package/themes/flat-dark-panelless.js +1 -1
  167. package/themes/flat-dark-panelless.min.js +1 -1
  168. package/themes/flat-dark.js +1 -1
  169. package/themes/flat-dark.min.js +1 -1
  170. package/themes/flat-light-panelless.js +1 -1
  171. package/themes/flat-light-panelless.min.js +1 -1
  172. package/themes/flat-light.js +1 -1
  173. package/themes/flat-light.min.js +1 -1
  174. package/themes/index.js +1 -1
  175. package/themes/index.min.js +1 -1
  176. package/themes/layered-dark-panelless.js +1 -1
  177. package/themes/layered-dark-panelless.min.js +1 -1
  178. package/themes/layered-dark.js +1 -1
  179. package/themes/layered-dark.min.js +1 -1
  180. package/themes/layered-light-panelless.js +1 -1
  181. package/themes/layered-light-panelless.min.js +1 -1
  182. package/themes/layered-light.js +1 -1
  183. package/themes/layered-light.min.js +1 -1
  184. package/themes/plain-dark-panelless.js +1 -1
  185. package/themes/plain-dark-panelless.min.js +1 -1
  186. package/themes/plain-dark.js +1 -1
  187. package/themes/plain-dark.min.js +1 -1
  188. package/themes/plain-light-panelless.js +1 -1
  189. package/themes/plain-light-panelless.min.js +1 -1
  190. package/themes/plain-light.js +1 -1
  191. package/themes/plain-light.min.js +1 -1
  192. package/themes/sharp-dark-panelless.js +1 -1
  193. package/themes/sharp-dark-panelless.min.js +1 -1
  194. package/themes/sharp-dark.js +1 -1
  195. package/themes/sharp-dark.min.js +1 -1
  196. package/themes/sharp-light-panelless.js +1 -1
  197. package/themes/sharp-light-panelless.min.js +1 -1
  198. package/themes/sharp-light.js +1 -1
  199. package/themes/sharp-light.min.js +1 -1
  200. package/themes/solid-dark-panelless.js +1 -1
  201. package/themes/solid-dark-panelless.min.js +1 -1
  202. package/themes/solid-dark.js +1 -1
  203. package/themes/solid-dark.min.js +1 -1
  204. package/themes/solid-light-panelless.js +1 -1
  205. package/themes/solid-light-panelless.min.js +1 -1
  206. package/themes/solid-light.js +1 -1
  207. package/themes/solid-light.min.js +1 -1
  208. package/themes/three-dimensional-dark-panelless.js +1 -1
  209. package/themes/three-dimensional-dark-panelless.min.js +1 -1
  210. package/themes/three-dimensional-dark.js +1 -1
  211. package/themes/three-dimensional-dark.min.js +1 -1
  212. package/themes/three-dimensional-light-panelless.js +1 -1
  213. package/themes/three-dimensional-light-panelless.min.js +1 -1
  214. package/themes/three-dimensional-light.js +1 -1
  215. package/themes/three-dimensional-light.min.js +1 -1
  216. package/ts3.4/typings/packages/survey-core/src/base-interfaces.d.ts +1 -1
  217. package/ts3.4/typings/packages/survey-core/src/base.d.ts +11 -0
  218. package/ts3.4/typings/packages/survey-core/src/page.d.ts +1 -0
  219. package/ts3.4/typings/packages/survey-core/src/panel.d.ts +9 -3
  220. package/ts3.4/typings/packages/survey-core/src/question.d.ts +4 -4
  221. package/ts3.4/typings/packages/survey-core/src/question_matrix.d.ts +13 -5
  222. package/ts3.4/typings/packages/survey-core/src/question_paneldynamic.d.ts +2 -0
  223. package/ts3.4/typings/packages/survey-core/src/question_ranking.d.ts +1 -0
  224. package/ts3.4/typings/packages/survey-core/src/question_rating.d.ts +3 -0
  225. package/ts3.4/typings/packages/survey-core/src/survey-element.d.ts +3 -2
  226. package/ts3.4/typings/packages/survey-core/src/survey.d.ts +8 -3
  227. package/ts3.4/typings/packages/survey-core/src/utils/utils.d.ts +2 -2
  228. package/typings/packages/survey-core/src/base-interfaces.d.ts +1 -1
  229. package/typings/packages/survey-core/src/base.d.ts +11 -0
  230. package/typings/packages/survey-core/src/page.d.ts +1 -0
  231. package/typings/packages/survey-core/src/panel.d.ts +9 -3
  232. package/typings/packages/survey-core/src/question.d.ts +4 -4
  233. package/typings/packages/survey-core/src/question_matrix.d.ts +13 -5
  234. package/typings/packages/survey-core/src/question_paneldynamic.d.ts +2 -0
  235. package/typings/packages/survey-core/src/question_ranking.d.ts +1 -0
  236. package/typings/packages/survey-core/src/question_rating.d.ts +3 -0
  237. package/typings/packages/survey-core/src/survey-element.d.ts +3 -2
  238. package/typings/packages/survey-core/src/survey.d.ts +8 -3
  239. package/typings/packages/survey-core/src/utils/utils.d.ts +2 -2
package/survey.core.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - Survey JavaScript library v1.12.3
2
+ * surveyjs - Survey JavaScript library v1.12.4
3
3
  * Copyright (c) 2015-2024 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
@@ -10111,6 +10111,66 @@ var base_Base = /** @class */ (function () {
10111
10111
  return Base;
10112
10112
  }());
10113
10113
 
10114
+ var RenderingCompletedAwaiter = /** @class */ (function () {
10115
+ function RenderingCompletedAwaiter(_elements, _renderedHandler, waitingTimeout) {
10116
+ var _this = this;
10117
+ if (waitingTimeout === void 0) { waitingTimeout = 100; }
10118
+ this._elements = _elements;
10119
+ this._renderedHandler = _renderedHandler;
10120
+ this._elementsToRenderCount = 0;
10121
+ this._elementsToRenderTimer = undefined;
10122
+ this._elementRenderedHandler = function (s, o) {
10123
+ var _a;
10124
+ (_a = s.onElementRerendered) === null || _a === void 0 ? void 0 : _a.remove(_this._elementRenderedHandler);
10125
+ _this._elementsToRenderCount--;
10126
+ if (_this._elementsToRenderCount <= 0) {
10127
+ _this.visibleElementsRendered();
10128
+ }
10129
+ };
10130
+ this._elements.forEach(function (element) {
10131
+ if (element.onElementRerendered) {
10132
+ element.onElementRerendered.add(_this._elementRenderedHandler);
10133
+ _this._elementsToRenderCount++;
10134
+ }
10135
+ });
10136
+ if (this._elementsToRenderCount > 0) {
10137
+ this._elementsToRenderTimer = setTimeout(function () {
10138
+ if (_this._elementsToRenderCount > 0) {
10139
+ _this.visibleElementsRendered();
10140
+ }
10141
+ }, waitingTimeout);
10142
+ }
10143
+ else {
10144
+ this.visibleElementsRendered();
10145
+ }
10146
+ }
10147
+ RenderingCompletedAwaiter.prototype.stopWaitingForElementsRendering = function () {
10148
+ var _this = this;
10149
+ if (this._elementsToRenderTimer) {
10150
+ clearTimeout(this._elementsToRenderTimer);
10151
+ this._elementsToRenderTimer = undefined;
10152
+ }
10153
+ this._elements.forEach(function (element) {
10154
+ var _a;
10155
+ (_a = element.onElementRerendered) === null || _a === void 0 ? void 0 : _a.remove(_this._elementRenderedHandler);
10156
+ });
10157
+ this._elementsToRenderCount = 0;
10158
+ };
10159
+ RenderingCompletedAwaiter.prototype.visibleElementsRendered = function () {
10160
+ var renderedHandler = this._renderedHandler;
10161
+ this.dispose();
10162
+ if (typeof renderedHandler == "function") {
10163
+ renderedHandler();
10164
+ }
10165
+ };
10166
+ RenderingCompletedAwaiter.prototype.dispose = function () {
10167
+ this.stopWaitingForElementsRendering();
10168
+ this._elements = undefined;
10169
+ this._renderedHandler = undefined;
10170
+ };
10171
+ return RenderingCompletedAwaiter;
10172
+ }());
10173
+
10114
10174
  var ArrayChanges = /** @class */ (function () {
10115
10175
  function ArrayChanges(index, deleteCount, itemsToAdd, deletedItems) {
10116
10176
  this.index = index;
@@ -12879,14 +12939,14 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
12879
12939
  }
12880
12940
  return info;
12881
12941
  };
12882
- SurveyElement.ScrollElementToTop = function (elementId, scrollIfVisible, scrollIntoViewOptions) {
12942
+ SurveyElement.ScrollElementToTop = function (elementId, scrollIfVisible, scrollIntoViewOptions, doneCallback) {
12883
12943
  var root = settings.environment.root;
12884
12944
  if (!elementId || typeof root === "undefined")
12885
12945
  return false;
12886
12946
  var el = root.getElementById(elementId);
12887
- return SurveyElement.ScrollElementToViewCore(el, false, scrollIfVisible, scrollIntoViewOptions);
12947
+ return SurveyElement.ScrollElementToViewCore(el, false, scrollIfVisible, scrollIntoViewOptions, doneCallback);
12888
12948
  };
12889
- SurveyElement.ScrollElementToViewCore = function (el, checkLeft, scrollIfVisible, scrollIntoViewOptions) {
12949
+ SurveyElement.ScrollElementToViewCore = function (el, checkLeft, scrollIfVisible, scrollIntoViewOptions, doneCallback) {
12890
12950
  if (!el || !el.scrollIntoView)
12891
12951
  return false;
12892
12952
  var elTop = scrollIfVisible ? -1 : el.getBoundingClientRect().top;
@@ -12906,6 +12966,18 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
12906
12966
  }
12907
12967
  if (needScroll) {
12908
12968
  el.scrollIntoView(scrollIntoViewOptions);
12969
+ if (typeof doneCallback === "function") {
12970
+ var currPageXOffset_1 = window.pageXOffset;
12971
+ var currPageYOffset_1 = window.pageYOffset;
12972
+ var scrollDone = setInterval(function () {
12973
+ if (currPageXOffset_1 == window.pageXOffset && currPageYOffset_1 == window.pageYOffset) {
12974
+ clearInterval(scrollDone);
12975
+ doneCallback();
12976
+ }
12977
+ currPageXOffset_1 = window.pageXOffset;
12978
+ currPageYOffset_1 = window.pageYOffset;
12979
+ }, 25);
12980
+ }
12909
12981
  }
12910
12982
  return needScroll;
12911
12983
  };
@@ -13273,6 +13345,17 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
13273
13345
  this.surveyChangedCallback();
13274
13346
  }
13275
13347
  };
13348
+ Object.defineProperty(SurveyElement.prototype, "skeletonHeight", {
13349
+ get: function () {
13350
+ var skeletonHeight = undefined;
13351
+ if (!!this.survey && this.survey.skeletonHeight) {
13352
+ skeletonHeight = this.survey.skeletonHeight + "px";
13353
+ }
13354
+ return skeletonHeight;
13355
+ },
13356
+ enumerable: false,
13357
+ configurable: true
13358
+ });
13276
13359
  Object.defineProperty(SurveyElement.prototype, "isInternal", {
13277
13360
  get: function () {
13278
13361
  return this.isContentElement;
@@ -13997,7 +14080,8 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
13997
14080
  },
13998
14081
  getLeaveOptions: function () {
13999
14082
  var cssClasses = _this.isPanel ? _this.cssClasses.panel : _this.cssClasses;
14000
- return { cssClass: cssClasses.contentLeave,
14083
+ return {
14084
+ cssClass: cssClasses.contentLeave,
14001
14085
  onBeforeRunAnimation: beforeRunAnimation,
14002
14086
  onAfterRunAnimation: afterRunAnimation
14003
14087
  };
@@ -14807,7 +14891,7 @@ function findScrollableParent(element) {
14807
14891
  }
14808
14892
  return findScrollableParent(element.parentElement);
14809
14893
  }
14810
- function scrollElementByChildId(id) {
14894
+ function activateLazyRenderingChecks(id) {
14811
14895
  var environment = settings.environment;
14812
14896
  if (!environment)
14813
14897
  return;
@@ -17426,7 +17510,7 @@ var text_area_TextAreaModel = /** @class */ (function () {
17426
17510
  };
17427
17511
  TextAreaModel.prototype.getTextValue = function () {
17428
17512
  if (!!this.options.getTextValue)
17429
- return this.options.getTextValue();
17513
+ return this.options.getTextValue() || "";
17430
17514
  return "";
17431
17515
  };
17432
17516
  TextAreaModel.prototype.onTextAreaChange = function (event) {
@@ -19303,7 +19387,7 @@ var question_Question = /** @class */ (function (_super) {
19303
19387
  });
19304
19388
  Object.defineProperty(Question.prototype, "isDisabledAttr", {
19305
19389
  get: function () {
19306
- return this.isDesignModeV2;
19390
+ return this.isDesignModeV2 || (!!this.readOnlyCallback && this.readOnlyCallback());
19307
19391
  },
19308
19392
  enumerable: false,
19309
19393
  configurable: true
@@ -19497,7 +19581,7 @@ var question_Question = /** @class */ (function (_super) {
19497
19581
  *
19498
19582
  * | Question type | Value type(s) |
19499
19583
  * | ------------- | ------------- |
19500
- * | Checkboxes | `Array<string \| number>` |
19584
+ * | Checkboxes | <code>Array&lt;string &#124; number&gt;</code> |
19501
19585
  * | Dropdown | `string` \| `number` |
19502
19586
  * | Dynamic Matrix | `Array<object>` |
19503
19587
  * | Dynamic Panel | `Array<object>` |
@@ -19505,14 +19589,14 @@ var question_Question = /** @class */ (function (_super) {
19505
19589
  * | File Upload | `File` \| `Array<File>` |
19506
19590
  * | HTML | (no value) |
19507
19591
  * | Image | (no value) |
19508
- * | Image Picker | `Array<string \| number>` |
19592
+ * | Image Picker | <code>Array&lt;string &#124; number&gt;</code> |
19509
19593
  * | Long Text | `string` |
19510
19594
  * | Multi-Select Dropdown | `object` |
19511
19595
  * | Multi-Select Matrix | `object` |
19512
19596
  * | Multiple Textboxes | `Array<string>` |
19513
19597
  * | Panel | (no value) |
19514
19598
  * | Radio Button Group | `string` \| `number` |
19515
- * | Ranking | `Array<string \| number>` |
19599
+ * | Ranking | <code>Array&lt;string &#124; number&gt;</code> |
19516
19600
  * | Rating Scale | `number` \| `string` |
19517
19601
  * | Signature | `string` (base64-encoded image) |
19518
19602
  * | Single-Line Input | `string` \| `number` \| `Date` |
@@ -20267,11 +20351,12 @@ var question_Question = /** @class */ (function (_super) {
20267
20351
  };
20268
20352
  Question.prototype.removeError = function (error) {
20269
20353
  if (!error)
20270
- return;
20354
+ return false;
20271
20355
  var errors = this.errors;
20272
20356
  var index = errors.indexOf(error);
20273
20357
  if (index !== -1)
20274
20358
  errors.splice(index, 1);
20359
+ return index !== -1;
20275
20360
  };
20276
20361
  Question.prototype.checkForErrors = function (isOnValueChanged, fireCallback) {
20277
20362
  var qErrors = new Array();
@@ -29787,9 +29872,11 @@ var question_matrixdropdownbase_QuestionMatrixDropdownModelBase = /** @class */
29787
29872
  rec.validationValues = this.getDataFilteredValues();
29788
29873
  rec.isSingleDetailPanel = this.detailPanelMode === "underRowSingle";
29789
29874
  for (var i = 0; i < rows.length; i++) {
29790
- res = rows[i].hasErrors(fireCallback, rec, function () {
29791
- _this.raiseOnCompletedAsyncValidators();
29792
- }) || res;
29875
+ if (rows[i].isVisible) {
29876
+ res = rows[i].hasErrors(fireCallback, rec, function () {
29877
+ _this.raiseOnCompletedAsyncValidators();
29878
+ }) || res;
29879
+ }
29793
29880
  }
29794
29881
  return res;
29795
29882
  };
@@ -29876,7 +29963,7 @@ var question_matrixdropdownbase_QuestionMatrixDropdownModelBase = /** @class */
29876
29963
  if (duplicatedRows.indexOf(row) < 0) {
29877
29964
  var question = row.getQuestionByName(columnName);
29878
29965
  if (question) {
29879
- _this.removeDuplicationError(question);
29966
+ _this.removeDuplicationError(row, question);
29880
29967
  }
29881
29968
  }
29882
29969
  });
@@ -29894,8 +29981,10 @@ var question_matrixdropdownbase_QuestionMatrixDropdownModelBase = /** @class */
29894
29981
  question.addError(new KeyDuplicationError(this.keyDuplicationError, this));
29895
29982
  }
29896
29983
  };
29897
- QuestionMatrixDropdownModelBase.prototype.removeDuplicationError = function (question) {
29898
- question.removeError(this.getDuplicationError(question));
29984
+ QuestionMatrixDropdownModelBase.prototype.removeDuplicationError = function (row, question) {
29985
+ if (question.removeError(this.getDuplicationError(question)) && question.errors.length === 0 && !!row.editingObj) {
29986
+ row.editingObj[question.getValueName()] = question.value;
29987
+ }
29899
29988
  };
29900
29989
  QuestionMatrixDropdownModelBase.prototype.getFirstQuestionToFocus = function (withError) {
29901
29990
  return this.getFirstCellQuestion(withError);
@@ -32352,6 +32441,7 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
32352
32441
  newRow = lastDelRow;
32353
32442
  }
32354
32443
  else {
32444
+ lastDelRow = undefined;
32355
32445
  newRow = this.createMatrixRow(val[index]);
32356
32446
  }
32357
32447
  rows.splice(index, 0, newRow);
@@ -34737,6 +34827,13 @@ var panel_QuestionRowModel = /** @class */ (function (_super) {
34737
34827
  QuestionRowModel.getRowId = function () {
34738
34828
  return "pr_" + QuestionRowModel.rowCounter++;
34739
34829
  };
34830
+ Object.defineProperty(QuestionRowModel.prototype, "allowRendering", {
34831
+ get: function () {
34832
+ return !this.panel || !this.panel.survey || !this.panel.survey["isLazyRenderingSuspended"];
34833
+ },
34834
+ enumerable: false,
34835
+ configurable: true
34836
+ });
34740
34837
  QuestionRowModel.prototype.startLazyRendering = function (rowContainerDiv, findScrollableContainer) {
34741
34838
  var _this = this;
34742
34839
  if (findScrollableContainer === void 0) { findScrollableContainer = findScrollableParent; }
@@ -34751,6 +34848,9 @@ var panel_QuestionRowModel = /** @class */ (function (_super) {
34751
34848
  this.isNeedRender = !hasScroll;
34752
34849
  if (hasScroll) {
34753
34850
  this._updateVisibility = function () {
34851
+ if (!_this.allowRendering) {
34852
+ return;
34853
+ }
34754
34854
  var isRowContainerDivVisible = isElementVisible(rowContainerDiv, 50);
34755
34855
  if (!_this.isNeedRender && isRowContainerDivVisible) {
34756
34856
  _this.isNeedRender = true;
@@ -34884,6 +34984,10 @@ var panel_QuestionRowModel = /** @class */ (function (_super) {
34884
34984
  if (this.elements[i].isVisible) {
34885
34985
  visElements.push(this.elements[i]);
34886
34986
  }
34987
+ if (this.elements[i].isPanel || this.elements[i].getType() === "paneldynamic") {
34988
+ this.setIsLazyRendering(false);
34989
+ this.stopLazyRendering();
34990
+ }
34887
34991
  }
34888
34992
  this.visibleElements = visElements;
34889
34993
  return;
@@ -36094,11 +36198,21 @@ var panel_PanelModelBase = /** @class */ (function (_super) {
36094
36198
  this.onVisibleChanged();
36095
36199
  }
36096
36200
  };
36201
+ PanelModelBase.prototype.canRenderFirstRows = function () {
36202
+ return this.isPage;
36203
+ };
36204
+ PanelModelBase.prototype.isLazyRenderInRow = function (rowIndex) {
36205
+ if (!this.survey || !this.survey.isLazyRendering)
36206
+ return false;
36207
+ return (rowIndex >= this.survey.lazyRenderingFirstBatchSize ||
36208
+ !this.canRenderFirstRows());
36209
+ };
36097
36210
  PanelModelBase.prototype.createRowAndSetLazy = function (index) {
36098
36211
  var row = this.createRow();
36099
36212
  row.setIsLazyRendering(this.isLazyRenderInRow(index));
36100
36213
  return row;
36101
36214
  };
36215
+ // TODO V2: make all createRow API private (at least protected) after removing DragDropPanelHelperV1
36102
36216
  PanelModelBase.prototype.createRow = function () {
36103
36217
  return new panel_QuestionRowModel(this);
36104
36218
  };
@@ -36329,15 +36443,6 @@ var panel_PanelModelBase = /** @class */ (function (_super) {
36329
36443
  }
36330
36444
  return result;
36331
36445
  };
36332
- PanelModelBase.prototype.isLazyRenderInRow = function (rowIndex) {
36333
- if (!this.survey || !this.survey.isLazyRendering)
36334
- return false;
36335
- return (rowIndex >= this.survey.lazyRenderingFirstBatchSize ||
36336
- !this.canRenderFirstRows());
36337
- };
36338
- PanelModelBase.prototype.canRenderFirstRows = function () {
36339
- return this.isPage;
36340
- };
36341
36446
  PanelModelBase.prototype.getDragDropInfo = function () {
36342
36447
  var page = this.getPage(this.parent);
36343
36448
  return !!page ? page.getDragDropInfo() : undefined;
@@ -36367,27 +36472,74 @@ var panel_PanelModelBase = /** @class */ (function (_super) {
36367
36472
  }
36368
36473
  }
36369
36474
  };
36370
- PanelModelBase.prototype.disableLazyRenderingBeforeElement = function (el) {
36371
- var row = el ? this.findRowByElement(el) : undefined;
36372
- var index = el ? this.rows.indexOf(row) : this.rows.length - 1;
36373
- for (var i = index; i >= 0; i--) {
36374
- var currentRow = this.rows[i];
36375
- if (currentRow.isNeedRender) {
36376
- break;
36377
- }
36378
- else {
36379
- currentRow.isNeedRender = true;
36380
- currentRow.stopLazyRendering();
36381
- }
36382
- }
36475
+ PanelModelBase.prototype.getAllRows = function () {
36476
+ var _this = this;
36477
+ var allRows = [];
36478
+ this.rows.forEach(function (row) {
36479
+ var nestedRows = [];
36480
+ row.elements.forEach(function (element) {
36481
+ if (element.isPanel) {
36482
+ nestedRows.push.apply(nestedRows, element.getAllRows());
36483
+ }
36484
+ else if (element.getType() == "paneldynamic") {
36485
+ if (_this.isDesignMode) {
36486
+ nestedRows.push.apply(nestedRows, element.template.getAllRows());
36487
+ }
36488
+ else {
36489
+ element.panels.forEach(function (panel) { return nestedRows.push.apply(nestedRows, panel.getAllRows()); });
36490
+ }
36491
+ }
36492
+ });
36493
+ allRows.push(row);
36494
+ allRows.push.apply(allRows, nestedRows);
36495
+ });
36496
+ return allRows;
36383
36497
  };
36384
- PanelModelBase.prototype.findRowByElement = function (el) {
36385
- var rows = this.rows;
36498
+ PanelModelBase.prototype.findRowAndIndexByElement = function (el, rows) {
36499
+ if (!el) {
36500
+ return { row: undefined, index: this.rows.length - 1 };
36501
+ }
36502
+ rows = rows || this.rows;
36386
36503
  for (var i = 0; i < rows.length; i++) {
36387
36504
  if (rows[i].elements.indexOf(el) > -1)
36388
- return rows[i];
36505
+ return { row: rows[i], index: i };
36389
36506
  }
36390
- return null;
36507
+ return { row: null, index: -1 };
36508
+ };
36509
+ PanelModelBase.prototype.forceRenderRow = function (row) {
36510
+ if (!!row && !row.isNeedRender) {
36511
+ row.isNeedRender = true;
36512
+ row.stopLazyRendering();
36513
+ }
36514
+ };
36515
+ PanelModelBase.prototype.forceRenderElement = function (el, elementsRendered, gap) {
36516
+ if (elementsRendered === void 0) { elementsRendered = function () { }; }
36517
+ if (gap === void 0) { gap = 0; }
36518
+ var allRows = this.getAllRows();
36519
+ var _a = this.findRowAndIndexByElement(el, allRows), row = _a.row, index = _a.index;
36520
+ if (index >= 0 && index < allRows.length) {
36521
+ var rowsToRender = [];
36522
+ rowsToRender.push(row);
36523
+ for (var i = index - 1; i >= index - gap && i >= 0; i--) {
36524
+ rowsToRender.push(allRows[i]);
36525
+ }
36526
+ this.forceRenderRows(rowsToRender, elementsRendered);
36527
+ }
36528
+ };
36529
+ PanelModelBase.prototype.forceRenderRows = function (rows, elementsRendered) {
36530
+ var _this = this;
36531
+ if (elementsRendered === void 0) { elementsRendered = function () { }; }
36532
+ var rowRenderedHandler = (function (rowsCount) { return function () {
36533
+ rowsCount--;
36534
+ if (rowsCount <= 0) {
36535
+ elementsRendered();
36536
+ }
36537
+ }; })(rows.length);
36538
+ rows.forEach(function (row) { return new RenderingCompletedAwaiter(row.visibleElements, rowRenderedHandler); });
36539
+ rows.forEach(function (row) { return _this.forceRenderRow(row); });
36540
+ };
36541
+ PanelModelBase.prototype.findRowByElement = function (el) {
36542
+ return this.findRowAndIndexByElement(el).row;
36391
36543
  };
36392
36544
  PanelModelBase.prototype.elementWidthChanged = function (el) {
36393
36545
  if (this.isLoadingFromJson)
@@ -37071,7 +37223,7 @@ var panel_PanelModel = /** @class */ (function (_super) {
37071
37223
  };
37072
37224
  PanelModel.prototype.beforeSetVisibleIndex = function (index) {
37073
37225
  var visibleIndex = -1;
37074
- if (this.showNumber && (this.isDesignMode || !this.locTitle.isEmpty)) {
37226
+ if (this.showNumber && (this.isDesignMode || !this.locTitle.isEmpty || this.hasParentInQuestionIndex())) {
37075
37227
  visibleIndex = index;
37076
37228
  }
37077
37229
  this.setPropertyValue("visibleIndex", visibleIndex);
@@ -37079,14 +37231,21 @@ var panel_PanelModel = /** @class */ (function (_super) {
37079
37231
  return visibleIndex < 0 ? 0 : 1;
37080
37232
  };
37081
37233
  PanelModel.prototype.getPanelStartIndex = function (index) {
37082
- if (this.showQuestionNumbers == "off")
37234
+ if (this.showQuestionNumbers === "off")
37083
37235
  return -1;
37084
- if (this.showQuestionNumbers == "onpanel")
37236
+ if (this.showQuestionNumbers === "onpanel")
37085
37237
  return 0;
37086
37238
  return index;
37087
37239
  };
37240
+ PanelModel.prototype.hasParentInQuestionIndex = function () {
37241
+ if (this.showQuestionNumbers !== "onpanel")
37242
+ return false;
37243
+ var str = this.questionStartIndex;
37244
+ var index = str.indexOf(".");
37245
+ return index > -1 && index < str.length - 1;
37246
+ };
37088
37247
  PanelModel.prototype.isContinueNumbering = function () {
37089
- return (this.showQuestionNumbers != "off" && this.showQuestionNumbers != "onpanel");
37248
+ return this.showQuestionNumbers !== "off" && this.showQuestionNumbers !== "onpanel";
37090
37249
  };
37091
37250
  PanelModel.prototype.notifySurveyOnVisibilityChanged = function () {
37092
37251
  if (this.survey != null && !this.isLoadingFromJson) {
@@ -37754,6 +37913,13 @@ var page_PageModel = /** @class */ (function (_super) {
37754
37913
  this.locNavigationTitle.strChanged();
37755
37914
  this.locNavigationDescription.strChanged();
37756
37915
  };
37916
+ PageModel.prototype.getMarkdownHtml = function (text, name) {
37917
+ var result = _super.prototype.getMarkdownHtml.call(this, text, name);
37918
+ if (name === "navigationTitle" && this.canShowPageNumber() && result) {
37919
+ return this.num + ". " + result;
37920
+ }
37921
+ return result;
37922
+ };
37757
37923
  Object.defineProperty(PageModel.prototype, "passed", {
37758
37924
  get: function () {
37759
37925
  return this.getPropertyValue("passed", false);
@@ -39155,6 +39321,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
39155
39321
  */
39156
39322
  _this.jsonErrors = null;
39157
39323
  _this.cssValue = null;
39324
+ _this._isLazyRenderingSuspended = false;
39158
39325
  /**
39159
39326
  * Specifies whether to hide validation errors thrown by the Required validation in the UI.
39160
39327
  *
@@ -39191,6 +39358,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
39191
39358
  _this.onResize = new EventBase();
39192
39359
  _this.isCurrentPageRendering = true;
39193
39360
  _this.isCurrentPageRendered = undefined;
39361
+ _this.skeletonHeight = undefined;
39194
39362
  _this.isTriggerIsRunning = false;
39195
39363
  _this.triggerValues = null;
39196
39364
  _this.triggerKeys = null;
@@ -39677,22 +39845,29 @@ var survey_SurveyModel = /** @class */ (function (_super) {
39677
39845
  enumerable: false,
39678
39846
  configurable: true
39679
39847
  });
39680
- SurveyModel.prototype.disableLazyRenderingBeforeElement = function (el) {
39681
- if (this.isDesignMode) {
39682
- var page = this.getPageByElement(el);
39683
- var index = this.pages.indexOf(page);
39684
- for (var i = index; i >= 0; i--) {
39685
- var currentPage = this.pages[i];
39686
- currentPage.disableLazyRenderingBeforeElement(currentPage == page ? el : undefined);
39687
- }
39688
- }
39848
+ Object.defineProperty(SurveyModel.prototype, "isLazyRenderingSuspended", {
39849
+ get: function () {
39850
+ return this._isLazyRenderingSuspended;
39851
+ },
39852
+ enumerable: false,
39853
+ configurable: true
39854
+ });
39855
+ SurveyModel.prototype.suspendLazyRendering = function () {
39856
+ if (!this.isLazyRendering)
39857
+ return;
39858
+ this._isLazyRenderingSuspended = true;
39859
+ };
39860
+ SurveyModel.prototype.releaseLazyRendering = function () {
39861
+ if (!this.isLazyRendering)
39862
+ return;
39863
+ this._isLazyRenderingSuspended = false;
39689
39864
  };
39690
39865
  SurveyModel.prototype.updateLazyRenderingRowsOnRemovingElements = function () {
39691
39866
  if (!this.isLazyRendering)
39692
39867
  return;
39693
39868
  var page = this.currentPage;
39694
39869
  if (!!page) {
39695
- scrollElementByChildId(page.id);
39870
+ activateLazyRenderingChecks(page.id);
39696
39871
  }
39697
39872
  };
39698
39873
  Object.defineProperty(SurveyModel.prototype, "triggers", {
@@ -40925,13 +41100,20 @@ var survey_SurveyModel = /** @class */ (function (_super) {
40925
41100
  /**
40926
41101
  * Calculates a given [expression](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#expressions) and returns a result value.
40927
41102
  * @param expression An expression to calculate.
41103
+ * @param callback A callback function that you can use to access the calculation result if the expression uses asynchronous functions.
40928
41104
  */
40929
- SurveyModel.prototype.runExpression = function (expression) {
41105
+ SurveyModel.prototype.runExpression = function (expression, callback) {
40930
41106
  if (!expression)
40931
41107
  return null;
40932
41108
  var values = this.getFilteredValues();
40933
41109
  var properties = this.getFilteredProperties();
40934
- return new ExpressionRunner(expression).run(values, properties);
41110
+ var exp = new ExpressionRunner(expression);
41111
+ var onCompleteRes = undefined;
41112
+ exp.onRunComplete = function (res) {
41113
+ onCompleteRes = res;
41114
+ callback && callback(res);
41115
+ };
41116
+ return exp.run(values, properties) || onCompleteRes;
40935
41117
  };
40936
41118
  /**
40937
41119
  * Calculates a given [expression](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#expressions) and returns `true` or `false`.
@@ -44219,7 +44401,8 @@ var survey_SurveyModel = /** @class */ (function (_super) {
44219
44401
  this.onGetMatrixRowActions.fire(this, options);
44220
44402
  return options.actions;
44221
44403
  };
44222
- SurveyModel.prototype.scrollElementToTop = function (element, question, page, id, scrollIfVisible, scrollIntoViewOptions) {
44404
+ SurveyModel.prototype.scrollElementToTop = function (element, question, page, id, scrollIfVisible, scrollIntoViewOptions, passedRootElement) {
44405
+ var _this = this;
44223
44406
  var options = {
44224
44407
  element: element,
44225
44408
  question: question,
@@ -44229,7 +44412,25 @@ var survey_SurveyModel = /** @class */ (function (_super) {
44229
44412
  };
44230
44413
  this.onScrollingElementToTop.fire(this, options);
44231
44414
  if (!options.cancel) {
44232
- survey_element_SurveyElement.ScrollElementToTop(options.elementId, scrollIfVisible, scrollIntoViewOptions);
44415
+ var elementPage_1 = this.getPageByElement(element);
44416
+ if (this.isLazyRendering) {
44417
+ var elementsToRenderBefore = 1;
44418
+ var rootElement = settings.environment.rootElement;
44419
+ var surveyRootElement = this.rootElement || passedRootElement || rootElement;
44420
+ if (!!this.skeletonHeight && !!surveyRootElement && typeof surveyRootElement.getBoundingClientRect === "function") {
44421
+ elementsToRenderBefore = surveyRootElement.getBoundingClientRect().height / this.skeletonHeight - 1;
44422
+ }
44423
+ elementPage_1.forceRenderElement(element, function () {
44424
+ _this.suspendLazyRendering();
44425
+ survey_element_SurveyElement.ScrollElementToTop(options.elementId, scrollIfVisible, scrollIntoViewOptions, function () {
44426
+ _this.releaseLazyRendering();
44427
+ activateLazyRenderingChecks(elementPage_1.id);
44428
+ });
44429
+ }, elementsToRenderBefore);
44430
+ }
44431
+ else {
44432
+ survey_element_SurveyElement.ScrollElementToTop(options.elementId, scrollIfVisible, scrollIntoViewOptions);
44433
+ }
44233
44434
  }
44234
44435
  };
44235
44436
  /**
@@ -51967,11 +52168,16 @@ var question_matrix_MatrixRowModel = /** @class */ (function (_super) {
51967
52168
  return MatrixRowModel;
51968
52169
  }(base_Base));
51969
52170
 
51970
- var question_matrix_MatrixCells = /** @class */ (function () {
52171
+ var question_matrix_MatrixCells = /** @class */ (function (_super) {
52172
+ question_matrix_extends(MatrixCells, _super);
51971
52173
  function MatrixCells(cellsOwner) {
51972
- this.cellsOwner = cellsOwner;
51973
- this.values = {};
52174
+ var _this = _super.call(this) || this;
52175
+ _this.cellsOwner = cellsOwner;
52176
+ _this.values = {};
52177
+ _this.locs = {};
52178
+ return _this;
51974
52179
  }
52180
+ MatrixCells.prototype.getType = function () { return "cells"; };
51975
52181
  Object.defineProperty(MatrixCells.prototype, "isEmpty", {
51976
52182
  get: function () {
51977
52183
  return Object.keys(this.values).length == 0;
@@ -51980,78 +52186,97 @@ var question_matrix_MatrixCells = /** @class */ (function () {
51980
52186
  configurable: true
51981
52187
  });
51982
52188
  MatrixCells.prototype.valuesChanged = function () {
51983
- if (!!this.onValuesChanged) {
52189
+ if (!this.locNotification && !!this.onValuesChanged) {
51984
52190
  this.onValuesChanged();
51985
52191
  }
51986
52192
  };
51987
- MatrixCells.prototype.setCellText = function (row, column, val) {
52193
+ MatrixCells.prototype.getDefaultCellLocText = function (column) {
52194
+ return this.getCellLocCore(this.defaultRowValue, column);
52195
+ };
52196
+ MatrixCells.prototype.getCellDisplayLocText = function (row, column) {
52197
+ return this.getCellLocCore(row, column);
52198
+ };
52199
+ MatrixCells.prototype.getCellLocCore = function (row, col) {
52200
+ var _this = this;
51988
52201
  row = this.getCellRowColumnValue(row, this.rows);
51989
- column = this.getCellRowColumnValue(column, this.columns);
51990
- if (!row || !column)
51991
- return;
51992
- if (val) {
51993
- if (!this.values[row])
51994
- this.values[row] = {};
51995
- if (!this.values[row][column])
51996
- this.values[row][column] = this.createString();
51997
- this.values[row][column].text = val;
52202
+ col = this.getCellRowColumnValue(col, this.columns);
52203
+ if (helpers_Helpers.isValueEmpty(row) || helpers_Helpers.isValueEmpty(col))
52204
+ return null;
52205
+ if (!this.locs[row]) {
52206
+ this.locs[row] = {};
51998
52207
  }
51999
- else {
52000
- if (this.values[row] && this.values[row][column]) {
52001
- var loc = this.values[row][column];
52002
- loc.text = "";
52003
- if (loc.isEmpty) {
52004
- delete this.values[row][column];
52005
- if (Object.keys(this.values[row]).length == 0) {
52006
- delete this.values[row];
52208
+ var res = this.locs[row][col];
52209
+ if (!res) {
52210
+ res = this.createString();
52211
+ res.setJson(this.getCellLocData(row, col));
52212
+ res.onGetTextCallback = function (str) {
52213
+ if (!str) {
52214
+ var column = itemvalue_ItemValue.getItemByValue(_this.columns, col);
52215
+ if (column) {
52216
+ return column.locText.getJson() || column.value;
52007
52217
  }
52008
52218
  }
52009
- }
52219
+ return str;
52220
+ };
52221
+ res.onStrChanged = function (oldValue, newValue) {
52222
+ _this.updateValues(row, col, newValue);
52223
+ };
52224
+ this.locs[row][col] = res;
52010
52225
  }
52011
- this.valuesChanged();
52226
+ return res;
52012
52227
  };
52013
- MatrixCells.prototype.setDefaultCellText = function (column, val) {
52014
- this.setCellText(settings.matrix.defaultRowName, column, val);
52228
+ Object.defineProperty(MatrixCells.prototype, "defaultRowValue", {
52229
+ get: function () { return settings.matrix.defaultRowName; },
52230
+ enumerable: false,
52231
+ configurable: true
52232
+ });
52233
+ MatrixCells.prototype.getCellLocData = function (row, col) {
52234
+ var data = this.getCellLocDataFromValue(row, col);
52235
+ if (data)
52236
+ return data;
52237
+ return this.getCellLocDataFromValue(this.defaultRowValue, col);
52015
52238
  };
52016
- MatrixCells.prototype.getCellLocText = function (row, column) {
52017
- row = this.getCellRowColumnValue(row, this.rows);
52018
- column = this.getCellRowColumnValue(column, this.columns);
52019
- if (!row || !column)
52020
- return null;
52239
+ MatrixCells.prototype.getCellLocDataFromValue = function (row, column) {
52021
52240
  if (!this.values[row])
52022
52241
  return null;
52023
52242
  if (!this.values[row][column])
52024
52243
  return null;
52025
52244
  return this.values[row][column];
52026
52245
  };
52027
- MatrixCells.prototype.getDefaultCellLocText = function (column, val) {
52028
- return this.getCellLocText(settings.matrix.defaultRowName, column);
52246
+ MatrixCells.prototype.getCellText = function (row, column) {
52247
+ var loc = this.getCellLocCore(row, column);
52248
+ return loc ? loc.calculatedText : null;
52029
52249
  };
52030
- MatrixCells.prototype.getCellDisplayLocText = function (row, column) {
52031
- var cellText = this.getCellLocText(row, column);
52032
- if (cellText && !cellText.isEmpty)
52033
- return cellText;
52034
- cellText = this.getCellLocText(settings.matrix.defaultRowName, column);
52035
- if (cellText && !cellText.isEmpty)
52036
- return cellText;
52037
- if (typeof column == "number") {
52038
- column =
52039
- column >= 0 && column < this.columns.length
52040
- ? this.columns[column]
52041
- : null;
52250
+ MatrixCells.prototype.setCellText = function (row, column, val) {
52251
+ var loc = this.getCellLocCore(row, column);
52252
+ if (loc) {
52253
+ loc.text = val;
52042
52254
  }
52043
- if (column && column.locText)
52044
- return column.locText;
52045
- return null;
52046
52255
  };
52047
- MatrixCells.prototype.getCellText = function (row, column) {
52048
- var loc = this.getCellLocText(row, column);
52049
- return loc ? loc.calculatedText : null;
52256
+ MatrixCells.prototype.updateValues = function (row, column, val) {
52257
+ if (val) {
52258
+ if (!this.values[row])
52259
+ this.values[row] = {};
52260
+ this.values[row][column] = val;
52261
+ this.valuesChanged();
52262
+ }
52263
+ else {
52264
+ if (this.values[row] && this.values[row][column]) {
52265
+ delete this.values[row][column];
52266
+ if (Object.keys(this.values[row]).length == 0) {
52267
+ delete this.values[row];
52268
+ }
52269
+ this.valuesChanged();
52270
+ }
52271
+ }
52050
52272
  };
52051
52273
  MatrixCells.prototype.getDefaultCellText = function (column) {
52052
- var loc = this.getCellLocText(settings.matrix.defaultRowName, column);
52274
+ var loc = this.getCellLocCore(this.defaultRowValue, column);
52053
52275
  return loc ? loc.calculatedText : null;
52054
52276
  };
52277
+ MatrixCells.prototype.setDefaultCellText = function (column, val) {
52278
+ this.setCellText(this.defaultRowValue, column, val);
52279
+ };
52055
52280
  MatrixCells.prototype.getCellDisplayText = function (row, column) {
52056
52281
  var loc = this.getCellDisplayLocText(row, column);
52057
52282
  return loc ? loc.calculatedText : null;
@@ -52085,18 +52310,22 @@ var question_matrix_MatrixCells = /** @class */ (function () {
52085
52310
  MatrixCells.prototype.getJson = function () {
52086
52311
  if (this.isEmpty)
52087
52312
  return null;
52313
+ var defaultRow = this.values[this.defaultRowValue];
52088
52314
  var res = {};
52089
52315
  for (var row in this.values) {
52090
52316
  var resRow = {};
52091
52317
  var rowValues = this.values[row];
52092
52318
  for (var col in rowValues) {
52093
- resRow[col] = rowValues[col].getJson();
52319
+ if (row === this.defaultRowValue || !defaultRow || defaultRow[col] !== rowValues[col]) {
52320
+ resRow[col] = rowValues[col];
52321
+ }
52094
52322
  }
52095
52323
  res[row] = resRow;
52096
52324
  }
52097
52325
  return res;
52098
52326
  };
52099
52327
  MatrixCells.prototype.setJson = function (value) {
52328
+ var _this = this;
52100
52329
  this.values = {};
52101
52330
  if (!!value) {
52102
52331
  for (var row in value) {
@@ -52107,21 +52336,23 @@ var question_matrix_MatrixCells = /** @class */ (function () {
52107
52336
  for (var col in rowValues) {
52108
52337
  if (col == "pos")
52109
52338
  continue;
52110
- var loc = this.createString();
52111
- loc.setJson(rowValues[col]);
52112
- this.values[row][col] = loc;
52339
+ this.values[row][col] = rowValues[col];
52113
52340
  }
52114
52341
  }
52115
52342
  }
52343
+ this.locNotification = true;
52344
+ this.runFuncOnLocs(function (row, col, loc) { return loc.setJson(_this.getCellLocData(row, col)); });
52345
+ this.locNotification = false;
52116
52346
  this.valuesChanged();
52117
52347
  };
52118
52348
  MatrixCells.prototype.locStrsChanged = function () {
52119
- if (this.isEmpty)
52120
- return;
52121
- for (var row in this.values) {
52122
- var rowValues = this.values[row];
52349
+ this.runFuncOnLocs(function (row, col, loc) { return loc.strChanged(); });
52350
+ };
52351
+ MatrixCells.prototype.runFuncOnLocs = function (func) {
52352
+ for (var row in this.locs) {
52353
+ var rowValues = this.locs[row];
52123
52354
  for (var col in rowValues) {
52124
- rowValues[col].strChanged();
52355
+ func(row, col, rowValues[col]);
52125
52356
  }
52126
52357
  }
52127
52358
  };
@@ -52129,7 +52360,7 @@ var question_matrix_MatrixCells = /** @class */ (function () {
52129
52360
  return new localizablestring_LocalizableString(this.cellsOwner, true);
52130
52361
  };
52131
52362
  return MatrixCells;
52132
- }());
52363
+ }(base_Base));
52133
52364
 
52134
52365
  /**
52135
52366
  * A class that describes the Single-Select Matrix question type.
@@ -53090,6 +53321,7 @@ var question_text_QuestionTextModel = /** @class */ (function (_super) {
53090
53321
  _this.updateRemainingCharacterCounter(event.target.value);
53091
53322
  };
53092
53323
  _this.onKeyUp = function (event) {
53324
+ _this.updateDateValidationMessage(event);
53093
53325
  if (_this.isInputTextUpdate) {
53094
53326
  if (!_this._isWaitingForEnter || event.keyCode === 13) {
53095
53327
  _this.updateValueOnEvent(event);
@@ -53104,7 +53336,6 @@ var question_text_QuestionTextModel = /** @class */ (function (_super) {
53104
53336
  _this.updateRemainingCharacterCounter(event.target.value);
53105
53337
  };
53106
53338
  _this.onKeyDown = function (event) {
53107
- _this.updateDateValidationMessage(event);
53108
53339
  _this.onKeyDownPreprocess && _this.onKeyDownPreprocess(event);
53109
53340
  if (_this.isInputTextUpdate) {
53110
53341
  _this._isWaitingForEnter = event.keyCode === 229;
@@ -57812,6 +58043,11 @@ var question_ranking_QuestionRankingModel = /** @class */ (function (_super) {
57812
58043
  this.updateRankingChoices();
57813
58044
  this.releaseAnimations();
57814
58045
  };
58046
+ QuestionRankingModel.prototype.updateValueFromSurvey = function (newValue, clearData) {
58047
+ _super.prototype.updateValueFromSurvey.call(this, newValue, clearData);
58048
+ if (newValue)
58049
+ this.isValueSetByUser = true;
58050
+ };
57815
58051
  QuestionRankingModel.prototype.addToValueByVisibleChoices = function () {
57816
58052
  var newValue = this.value.slice();
57817
58053
  this.visibleChoices.forEach(function (choice) {
@@ -60522,8 +60758,14 @@ var question_rating_QuestionRatingModel = /** @class */ (function (_super) {
60522
60758
  }
60523
60759
  _this.createRenderedRateItems();
60524
60760
  });
60525
- _this.createLocalizableString("minRateDescription", _this, true);
60526
- _this.createLocalizableString("maxRateDescription", _this, true);
60761
+ _this.createLocalizableString("minRateDescription", _this, true)
60762
+ .onStringChanged.add(function (sender, options) {
60763
+ _this.hasMinRateDescription = !sender.isEmpty;
60764
+ });
60765
+ _this.createLocalizableString("maxRateDescription", _this, true)
60766
+ .onStringChanged.add(function (sender, options) {
60767
+ _this.hasMaxRateDescription = !sender.isEmpty;
60768
+ });
60527
60769
  _this.initPropertyDependencies();
60528
60770
  return _this;
60529
60771
  }
@@ -60535,8 +60777,6 @@ var question_rating_QuestionRatingModel = /** @class */ (function (_super) {
60535
60777
  };
60536
60778
  QuestionRatingModel.prototype.endLoadingFromJson = function () {
60537
60779
  _super.prototype.endLoadingFromJson.call(this);
60538
- this.hasMinRateDescription = !!this.minRateDescription;
60539
- this.hasMaxRateDescription = !!this.maxRateDescription;
60540
60780
  if (this.jsonObj.rateMin !== undefined && this.jsonObj.rateCount !== undefined && this.jsonObj.rateMax === undefined) {
60541
60781
  this.updateRateMax();
60542
60782
  }
@@ -60794,6 +61034,7 @@ var question_rating_QuestionRatingModel = /** @class */ (function (_super) {
60794
61034
  }
60795
61035
  if (this.rateType == "smileys" && rateValues.length > 10)
60796
61036
  rateValues = rateValues.slice(0, 10);
61037
+ this.visibleChoicesValue = rateValues.map(function (i, idx) { return _this.getRatingItemValue(i, idx); });
60797
61038
  this.renderedRateItems = rateValues.map(function (v, i) {
60798
61039
  var renderedItem = null;
60799
61040
  if (_this.displayRateDescriptionsAsExtremeItems) {
@@ -60813,14 +61054,7 @@ var question_rating_QuestionRatingModel = /** @class */ (function (_super) {
60813
61054
  var step = this.rateStep;
60814
61055
  while (value <= this.rateMax &&
60815
61056
  res.length < settings.ratingMaximumRateValueCount) {
60816
- var description = void 0;
60817
- if (value === this.rateMin) {
60818
- description = this.minRateDescription && this.locMinRateDescription;
60819
- }
60820
- if (value === this.rateMax || res.length === settings.ratingMaximumRateValueCount) {
60821
- description = this.maxRateDescription && this.locMaxRateDescription;
60822
- }
60823
- var item = new RatingItemValue(value, description);
61057
+ var item = new itemvalue_ItemValue(value);
60824
61058
  item.locOwner = this;
60825
61059
  item.ownerPropertyName = "rateValues";
60826
61060
  res.push(item);
@@ -60828,6 +61062,22 @@ var question_rating_QuestionRatingModel = /** @class */ (function (_super) {
60828
61062
  }
60829
61063
  return res;
60830
61064
  };
61065
+ QuestionRatingModel.prototype.getRatingItemValue = function (item, index) {
61066
+ if (!item)
61067
+ return null;
61068
+ var value = item.value;
61069
+ var description;
61070
+ if (value === this.rateMin) {
61071
+ description = this.minRateDescription && this.locMinRateDescription;
61072
+ }
61073
+ if (value === this.rateMax || index === settings.ratingMaximumRateValueCount) {
61074
+ description = this.maxRateDescription && this.locMaxRateDescription;
61075
+ }
61076
+ var newItem = new RatingItemValue(value, description);
61077
+ newItem.locOwner = item.locOwner;
61078
+ newItem.ownerPropertyName = item.ownerPropertyName;
61079
+ return newItem;
61080
+ };
60831
61081
  QuestionRatingModel.prototype.correctValue = function (value, step) {
60832
61082
  if (!value)
60833
61083
  return value;
@@ -60882,7 +61132,6 @@ var question_rating_QuestionRatingModel = /** @class */ (function (_super) {
60882
61132
  },
60883
61133
  set: function (val) {
60884
61134
  this.setLocalizableStringText("minRateDescription", val);
60885
- this.hasMinRateDescription = !!this.minRateDescription;
60886
61135
  },
60887
61136
  enumerable: false,
60888
61137
  configurable: true
@@ -60907,7 +61156,6 @@ var question_rating_QuestionRatingModel = /** @class */ (function (_super) {
60907
61156
  },
60908
61157
  set: function (val) {
60909
61158
  this.setLocalizableStringText("maxRateDescription", val);
60910
- this.hasMaxRateDescription = !!this.maxRateDescription;
60911
61159
  },
60912
61160
  enumerable: false,
60913
61161
  configurable: true
@@ -61275,7 +61523,7 @@ var question_rating_QuestionRatingModel = /** @class */ (function (_super) {
61275
61523
  };
61276
61524
  Object.defineProperty(QuestionRatingModel.prototype, "visibleChoices", {
61277
61525
  get: function () {
61278
- return this.visibleRateValues;
61526
+ return this.visibleChoicesValue;
61279
61527
  },
61280
61528
  enumerable: false,
61281
61529
  configurable: true
@@ -61327,6 +61575,11 @@ var question_rating_QuestionRatingModel = /** @class */ (function (_super) {
61327
61575
  enumerable: false,
61328
61576
  configurable: true
61329
61577
  });
61578
+ QuestionRatingModel.prototype.onBlurCore = function (event) {
61579
+ var _a;
61580
+ (_a = this.dropdownListModel) === null || _a === void 0 ? void 0 : _a.onBlur(event);
61581
+ _super.prototype.onBlurCore.call(this, event);
61582
+ };
61330
61583
  QuestionRatingModel.prototype.updateCssClasses = function (res, css) {
61331
61584
  _super.prototype.updateCssClasses.call(this, res, css);
61332
61585
  if (!!this.dropdownListModel) {
@@ -64346,6 +64599,8 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
64346
64599
  _this.updateFooterActions();
64347
64600
  });
64348
64601
  _this.registerPropertyChangedHandlers(["allowAddPanel"], function () { _this.updateNoEntriesTextDefaultLoc(); });
64602
+ _this.registerPropertyChangedHandlers(["minPanelCount"], function () { _this.onMinPanelCountChanged(); });
64603
+ _this.registerPropertyChangedHandlers(["maxPanelCount"], function () { _this.onMaxPanelCountChanged(); });
64349
64604
  return _this;
64350
64605
  }
64351
64606
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "isCompositeQuestion", {
@@ -65309,17 +65564,18 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
65309
65564
  set: function (val) {
65310
65565
  if (val < 0)
65311
65566
  val = 0;
65312
- if (val == this.minPanelCount)
65313
- return;
65314
65567
  this.setPropertyValue("minPanelCount", val);
65315
- if (val > this.maxPanelCount)
65316
- this.maxPanelCount = val;
65317
- if (this.panelCount < val)
65318
- this.panelCount = val;
65319
65568
  },
65320
65569
  enumerable: false,
65321
65570
  configurable: true
65322
65571
  });
65572
+ QuestionPanelDynamicModel.prototype.onMinPanelCountChanged = function () {
65573
+ var val = this.minPanelCount;
65574
+ if (val > this.maxPanelCount)
65575
+ this.maxPanelCount = val;
65576
+ if (this.panelCount < val)
65577
+ this.panelCount = val;
65578
+ };
65323
65579
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "maxPanelCount", {
65324
65580
  /**
65325
65581
  * A maximum number of panels in Dynamic Panel. Users cannot add new panels if `panelCount` equals `maxPanelCount`.
@@ -65337,17 +65593,20 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
65337
65593
  return;
65338
65594
  if (val > settings.panel.maxPanelCount)
65339
65595
  val = settings.panel.maxPanelCount;
65340
- if (val == this.maxPanelCount)
65341
- return;
65342
65596
  this.setPropertyValue("maxPanelCount", val);
65343
- if (val < this.minPanelCount)
65344
- this.minPanelCount = val;
65345
- if (this.panelCount > val)
65346
- this.panelCount = val;
65597
+ this.updateFooterActions();
65347
65598
  },
65348
65599
  enumerable: false,
65349
65600
  configurable: true
65350
65601
  });
65602
+ QuestionPanelDynamicModel.prototype.onMaxPanelCountChanged = function () {
65603
+ var val = this.maxPanelCount;
65604
+ if (val < this.minPanelCount)
65605
+ this.minPanelCount = val;
65606
+ if (this.panelCount > val)
65607
+ this.panelCount = val;
65608
+ this.updateFooterActions();
65609
+ };
65351
65610
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "allowAddPanel", {
65352
65611
  /**
65353
65612
  * Specifies whether users are allowed to add new panels.
@@ -66095,6 +66354,12 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
66095
66354
  QuestionPanelDynamicModel.prototype.onSurveyLoad = function () {
66096
66355
  this.template.readOnly = this.isReadOnly;
66097
66356
  this.template.onSurveyLoad();
66357
+ if (this.panelCount < this.minPanelCount) {
66358
+ this.panelCount = this.minPanelCount;
66359
+ }
66360
+ if (this.panelCount > this.maxPanelCount) {
66361
+ this.panelCount = this.maxPanelCount;
66362
+ }
66098
66363
  this.buildPanelsFirstTime();
66099
66364
  _super.prototype.onSurveyLoad.call(this);
66100
66365
  };
@@ -70007,8 +70272,8 @@ Serializer.addClass("currencymask", [
70007
70272
 
70008
70273
  var Version;
70009
70274
  var ReleaseDate;
70010
- Version = "" + "1.12.3";
70011
- ReleaseDate = "" + "2024-09-24";
70275
+ Version = "" + "1.12.4";
70276
+ ReleaseDate = "" + "2024-10-01";
70012
70277
  function checkLibraryVersion(ver, libraryName) {
70013
70278
  if (Version != ver) {
70014
70279
  var str = "survey-core has version '" + Version + "' and " + libraryName