survey-core 2.3.1 → 2.3.2

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 (279) hide show
  1. package/fesm/i18n/arabic.mjs +1 -1
  2. package/fesm/i18n/basque.mjs +1 -1
  3. package/fesm/i18n/bulgarian.mjs +1 -1
  4. package/fesm/i18n/burmese.mjs +1 -1
  5. package/fesm/i18n/catalan.mjs +1 -1
  6. package/fesm/i18n/croatian.mjs +1 -1
  7. package/fesm/i18n/czech.mjs +1 -1
  8. package/fesm/i18n/danish.mjs +1 -1
  9. package/fesm/i18n/dutch.mjs +1 -1
  10. package/fesm/i18n/english.mjs +1 -1
  11. package/fesm/i18n/estonian.mjs +1 -1
  12. package/fesm/i18n/finnish.mjs +1 -1
  13. package/fesm/i18n/french.mjs +1 -1
  14. package/fesm/i18n/georgian.mjs +1 -1
  15. package/fesm/i18n/german.mjs +1 -1
  16. package/fesm/i18n/greek.mjs +1 -1
  17. package/fesm/i18n/haitian-creole.mjs +1 -1
  18. package/fesm/i18n/hebrew.mjs +1 -1
  19. package/fesm/i18n/hindi.mjs +1 -1
  20. package/fesm/i18n/hungarian.mjs +1 -1
  21. package/fesm/i18n/icelandic.mjs +1 -1
  22. package/fesm/i18n/index.mjs +1 -1
  23. package/fesm/i18n/indonesian.mjs +1 -1
  24. package/fesm/i18n/italian.mjs +1 -1
  25. package/fesm/i18n/japanese.mjs +1 -1
  26. package/fesm/i18n/kazakh.mjs +1 -1
  27. package/fesm/i18n/korean.mjs +1 -1
  28. package/fesm/i18n/latvian.mjs +1 -1
  29. package/fesm/i18n/lithuanian.mjs +1 -1
  30. package/fesm/i18n/macedonian.mjs +1 -1
  31. package/fesm/i18n/malay.mjs +1 -1
  32. package/fesm/i18n/nl-BE.mjs +1 -1
  33. package/fesm/i18n/norwegian.mjs +1 -1
  34. package/fesm/i18n/persian.mjs +1 -1
  35. package/fesm/i18n/philippines.mjs +1 -1
  36. package/fesm/i18n/polish.mjs +1 -1
  37. package/fesm/i18n/portuguese-br.mjs +1 -1
  38. package/fesm/i18n/portuguese.mjs +1 -1
  39. package/fesm/i18n/romanian.mjs +1 -1
  40. package/fesm/i18n/russian.mjs +1 -1
  41. package/fesm/i18n/serbian.mjs +1 -1
  42. package/fesm/i18n/simplified-chinese.mjs +1 -1
  43. package/fesm/i18n/slovak.mjs +1 -1
  44. package/fesm/i18n/slovenian.mjs +1 -1
  45. package/fesm/i18n/spanish.mjs +1 -1
  46. package/fesm/i18n/swahili.mjs +1 -1
  47. package/fesm/i18n/swedish.mjs +1 -1
  48. package/fesm/i18n/tajik.mjs +1 -1
  49. package/fesm/i18n/telugu.mjs +1 -1
  50. package/fesm/i18n/thai.mjs +1 -1
  51. package/fesm/i18n/traditional-chinese.mjs +1 -1
  52. package/fesm/i18n/turkish.mjs +1 -1
  53. package/fesm/i18n/ukrainian.mjs +1 -1
  54. package/fesm/i18n/urdu.mjs +1 -1
  55. package/fesm/i18n/vietnamese.mjs +1 -1
  56. package/fesm/i18n/welsh.mjs +1 -1
  57. package/fesm/icons/iconsV1.mjs +1 -1
  58. package/fesm/icons/iconsV2.mjs +1 -1
  59. package/fesm/survey-core.mjs +104 -49
  60. package/fesm/survey-core.mjs.map +1 -1
  61. package/fesm/survey.i18n.mjs +1 -1
  62. package/fesm/themes/index.mjs +1 -1
  63. package/i18n/arabic.js +1 -1
  64. package/i18n/arabic.min.js.LICENSE.txt +1 -1
  65. package/i18n/basque.js +1 -1
  66. package/i18n/basque.min.js.LICENSE.txt +1 -1
  67. package/i18n/bulgarian.js +1 -1
  68. package/i18n/bulgarian.min.js.LICENSE.txt +1 -1
  69. package/i18n/burmese.js +1 -1
  70. package/i18n/burmese.min.js.LICENSE.txt +1 -1
  71. package/i18n/catalan.js +1 -1
  72. package/i18n/catalan.min.js.LICENSE.txt +1 -1
  73. package/i18n/croatian.js +1 -1
  74. package/i18n/croatian.min.js.LICENSE.txt +1 -1
  75. package/i18n/czech.js +1 -1
  76. package/i18n/czech.min.js.LICENSE.txt +1 -1
  77. package/i18n/danish.js +1 -1
  78. package/i18n/danish.min.js.LICENSE.txt +1 -1
  79. package/i18n/dutch.js +1 -1
  80. package/i18n/dutch.min.js.LICENSE.txt +1 -1
  81. package/i18n/english.js +1 -1
  82. package/i18n/english.min.js.LICENSE.txt +1 -1
  83. package/i18n/estonian.js +1 -1
  84. package/i18n/estonian.min.js.LICENSE.txt +1 -1
  85. package/i18n/finnish.js +1 -1
  86. package/i18n/finnish.min.js.LICENSE.txt +1 -1
  87. package/i18n/french.js +1 -1
  88. package/i18n/french.min.js.LICENSE.txt +1 -1
  89. package/i18n/georgian.js +1 -1
  90. package/i18n/georgian.min.js.LICENSE.txt +1 -1
  91. package/i18n/german.js +1 -1
  92. package/i18n/german.min.js.LICENSE.txt +1 -1
  93. package/i18n/greek.js +1 -1
  94. package/i18n/greek.min.js.LICENSE.txt +1 -1
  95. package/i18n/haitian-creole.js +1 -1
  96. package/i18n/haitian-creole.min.js.LICENSE.txt +1 -1
  97. package/i18n/hebrew.js +1 -1
  98. package/i18n/hebrew.min.js.LICENSE.txt +1 -1
  99. package/i18n/hindi.js +1 -1
  100. package/i18n/hindi.min.js.LICENSE.txt +1 -1
  101. package/i18n/hungarian.js +1 -1
  102. package/i18n/hungarian.min.js.LICENSE.txt +1 -1
  103. package/i18n/icelandic.js +1 -1
  104. package/i18n/icelandic.min.js.LICENSE.txt +1 -1
  105. package/i18n/index.js +1 -1
  106. package/i18n/index.min.js.LICENSE.txt +1 -1
  107. package/i18n/indonesian.js +1 -1
  108. package/i18n/indonesian.min.js.LICENSE.txt +1 -1
  109. package/i18n/italian.js +1 -1
  110. package/i18n/italian.min.js.LICENSE.txt +1 -1
  111. package/i18n/japanese.js +1 -1
  112. package/i18n/japanese.min.js.LICENSE.txt +1 -1
  113. package/i18n/kazakh.js +1 -1
  114. package/i18n/kazakh.min.js.LICENSE.txt +1 -1
  115. package/i18n/korean.js +1 -1
  116. package/i18n/korean.min.js.LICENSE.txt +1 -1
  117. package/i18n/latvian.js +1 -1
  118. package/i18n/latvian.min.js.LICENSE.txt +1 -1
  119. package/i18n/lithuanian.js +1 -1
  120. package/i18n/lithuanian.min.js.LICENSE.txt +1 -1
  121. package/i18n/macedonian.js +1 -1
  122. package/i18n/macedonian.min.js.LICENSE.txt +1 -1
  123. package/i18n/malay.js +1 -1
  124. package/i18n/malay.min.js.LICENSE.txt +1 -1
  125. package/i18n/nl-BE.js +1 -1
  126. package/i18n/nl-BE.min.js.LICENSE.txt +1 -1
  127. package/i18n/norwegian.js +1 -1
  128. package/i18n/norwegian.min.js.LICENSE.txt +1 -1
  129. package/i18n/persian.js +1 -1
  130. package/i18n/persian.min.js.LICENSE.txt +1 -1
  131. package/i18n/philippines.js +1 -1
  132. package/i18n/philippines.min.js.LICENSE.txt +1 -1
  133. package/i18n/polish.js +1 -1
  134. package/i18n/polish.min.js.LICENSE.txt +1 -1
  135. package/i18n/portuguese-br.js +1 -1
  136. package/i18n/portuguese-br.min.js.LICENSE.txt +1 -1
  137. package/i18n/portuguese.js +1 -1
  138. package/i18n/portuguese.min.js.LICENSE.txt +1 -1
  139. package/i18n/romanian.js +1 -1
  140. package/i18n/romanian.min.js.LICENSE.txt +1 -1
  141. package/i18n/russian.js +1 -1
  142. package/i18n/russian.min.js.LICENSE.txt +1 -1
  143. package/i18n/serbian.js +1 -1
  144. package/i18n/serbian.min.js.LICENSE.txt +1 -1
  145. package/i18n/simplified-chinese.js +1 -1
  146. package/i18n/simplified-chinese.min.js.LICENSE.txt +1 -1
  147. package/i18n/slovak.js +1 -1
  148. package/i18n/slovak.min.js.LICENSE.txt +1 -1
  149. package/i18n/slovenian.js +1 -1
  150. package/i18n/slovenian.min.js.LICENSE.txt +1 -1
  151. package/i18n/spanish.js +1 -1
  152. package/i18n/spanish.min.js.LICENSE.txt +1 -1
  153. package/i18n/swahili.js +1 -1
  154. package/i18n/swahili.min.js.LICENSE.txt +1 -1
  155. package/i18n/swedish.js +1 -1
  156. package/i18n/swedish.min.js.LICENSE.txt +1 -1
  157. package/i18n/tajik.js +1 -1
  158. package/i18n/tajik.min.js.LICENSE.txt +1 -1
  159. package/i18n/telugu.js +1 -1
  160. package/i18n/telugu.min.js.LICENSE.txt +1 -1
  161. package/i18n/thai.js +1 -1
  162. package/i18n/thai.min.js.LICENSE.txt +1 -1
  163. package/i18n/traditional-chinese.js +1 -1
  164. package/i18n/traditional-chinese.min.js.LICENSE.txt +1 -1
  165. package/i18n/turkish.js +1 -1
  166. package/i18n/turkish.min.js.LICENSE.txt +1 -1
  167. package/i18n/ukrainian.js +1 -1
  168. package/i18n/ukrainian.min.js.LICENSE.txt +1 -1
  169. package/i18n/urdu.js +1 -1
  170. package/i18n/urdu.min.js.LICENSE.txt +1 -1
  171. package/i18n/vietnamese.js +1 -1
  172. package/i18n/vietnamese.min.js.LICENSE.txt +1 -1
  173. package/i18n/welsh.js +1 -1
  174. package/i18n/welsh.min.js.LICENSE.txt +1 -1
  175. package/icons/iconsV1.js +1 -1
  176. package/icons/iconsV1.min.js.LICENSE.txt +1 -1
  177. package/icons/iconsV2.js +1 -1
  178. package/icons/iconsV2.min.js.LICENSE.txt +1 -1
  179. package/package.json +1 -1
  180. package/survey-core.css +1 -1
  181. package/survey-core.fontless.css +1 -1
  182. package/survey-core.fontless.min.css +1 -1
  183. package/survey-core.min.css +1 -1
  184. package/survey.core.js +106 -54
  185. package/survey.core.js.map +1 -1
  186. package/survey.core.min.js +1 -1
  187. package/survey.core.min.js.LICENSE.txt +1 -1
  188. package/survey.i18n.js +1 -1
  189. package/survey.i18n.min.js.LICENSE.txt +1 -1
  190. package/themes/borderless-dark-panelless.js +1 -1
  191. package/themes/borderless-dark-panelless.min.js.LICENSE.txt +1 -1
  192. package/themes/borderless-dark.js +1 -1
  193. package/themes/borderless-dark.min.js.LICENSE.txt +1 -1
  194. package/themes/borderless-light-panelless.js +1 -1
  195. package/themes/borderless-light-panelless.min.js.LICENSE.txt +1 -1
  196. package/themes/borderless-light.js +1 -1
  197. package/themes/borderless-light.min.js.LICENSE.txt +1 -1
  198. package/themes/contrast-dark-panelless.js +1 -1
  199. package/themes/contrast-dark-panelless.min.js.LICENSE.txt +1 -1
  200. package/themes/contrast-dark.js +1 -1
  201. package/themes/contrast-dark.min.js.LICENSE.txt +1 -1
  202. package/themes/contrast-light-panelless.js +1 -1
  203. package/themes/contrast-light-panelless.min.js.LICENSE.txt +1 -1
  204. package/themes/contrast-light.js +1 -1
  205. package/themes/contrast-light.min.js.LICENSE.txt +1 -1
  206. package/themes/default-dark-panelless.js +1 -1
  207. package/themes/default-dark-panelless.min.js.LICENSE.txt +1 -1
  208. package/themes/default-dark.js +1 -1
  209. package/themes/default-dark.min.js.LICENSE.txt +1 -1
  210. package/themes/default-light-panelless.js +1 -1
  211. package/themes/default-light-panelless.min.js.LICENSE.txt +1 -1
  212. package/themes/default-light.js +1 -1
  213. package/themes/default-light.min.js.LICENSE.txt +1 -1
  214. package/themes/doubleborder-dark-panelless.js +1 -1
  215. package/themes/doubleborder-dark-panelless.min.js.LICENSE.txt +1 -1
  216. package/themes/doubleborder-dark.js +1 -1
  217. package/themes/doubleborder-dark.min.js.LICENSE.txt +1 -1
  218. package/themes/doubleborder-light-panelles.js +1 -1
  219. package/themes/doubleborder-light-panelles.min.js.LICENSE.txt +1 -1
  220. package/themes/doubleborder-light.js +1 -1
  221. package/themes/doubleborder-light.min.js.LICENSE.txt +1 -1
  222. package/themes/flat-dark-panelless.js +1 -1
  223. package/themes/flat-dark-panelless.min.js.LICENSE.txt +1 -1
  224. package/themes/flat-dark.js +1 -1
  225. package/themes/flat-dark.min.js.LICENSE.txt +1 -1
  226. package/themes/flat-light-panelless.js +1 -1
  227. package/themes/flat-light-panelless.min.js.LICENSE.txt +1 -1
  228. package/themes/flat-light.js +1 -1
  229. package/themes/flat-light.min.js.LICENSE.txt +1 -1
  230. package/themes/index.js +1 -1
  231. package/themes/index.min.js.LICENSE.txt +1 -1
  232. package/themes/layered-dark-panelless.js +1 -1
  233. package/themes/layered-dark-panelless.min.js.LICENSE.txt +1 -1
  234. package/themes/layered-dark.js +1 -1
  235. package/themes/layered-dark.min.js.LICENSE.txt +1 -1
  236. package/themes/layered-light-panelless.js +1 -1
  237. package/themes/layered-light-panelless.min.js.LICENSE.txt +1 -1
  238. package/themes/layered-light.js +1 -1
  239. package/themes/layered-light.min.js.LICENSE.txt +1 -1
  240. package/themes/plain-dark-panelless.js +1 -1
  241. package/themes/plain-dark-panelless.min.js.LICENSE.txt +1 -1
  242. package/themes/plain-dark.js +1 -1
  243. package/themes/plain-dark.min.js.LICENSE.txt +1 -1
  244. package/themes/plain-light-panelless.js +1 -1
  245. package/themes/plain-light-panelless.min.js.LICENSE.txt +1 -1
  246. package/themes/plain-light.js +1 -1
  247. package/themes/plain-light.min.js.LICENSE.txt +1 -1
  248. package/themes/sharp-dark-panelless.js +1 -1
  249. package/themes/sharp-dark-panelless.min.js.LICENSE.txt +1 -1
  250. package/themes/sharp-dark.js +1 -1
  251. package/themes/sharp-dark.min.js.LICENSE.txt +1 -1
  252. package/themes/sharp-light-panelless.js +1 -1
  253. package/themes/sharp-light-panelless.min.js.LICENSE.txt +1 -1
  254. package/themes/sharp-light.js +1 -1
  255. package/themes/sharp-light.min.js.LICENSE.txt +1 -1
  256. package/themes/solid-dark-panelless.js +1 -1
  257. package/themes/solid-dark-panelless.min.js.LICENSE.txt +1 -1
  258. package/themes/solid-dark.js +1 -1
  259. package/themes/solid-dark.min.js.LICENSE.txt +1 -1
  260. package/themes/solid-light-panelless.js +1 -1
  261. package/themes/solid-light-panelless.min.js.LICENSE.txt +1 -1
  262. package/themes/solid-light.js +1 -1
  263. package/themes/solid-light.min.js.LICENSE.txt +1 -1
  264. package/themes/three-dimensional-dark-panelless.js +1 -1
  265. package/themes/three-dimensional-dark-panelless.min.js.LICENSE.txt +1 -1
  266. package/themes/three-dimensional-dark.js +1 -1
  267. package/themes/three-dimensional-dark.min.js.LICENSE.txt +1 -1
  268. package/themes/three-dimensional-light-panelless.js +1 -1
  269. package/themes/three-dimensional-light-panelless.min.js.LICENSE.txt +1 -1
  270. package/themes/three-dimensional-light.js +1 -1
  271. package/themes/three-dimensional-light.min.js.LICENSE.txt +1 -1
  272. package/typings/src/dropdownMultiSelectListModel.d.ts +0 -1
  273. package/typings/src/list.d.ts +2 -0
  274. package/typings/src/panel.d.ts +2 -0
  275. package/typings/src/question.d.ts +1 -0
  276. package/typings/src/question_baseselect.d.ts +1 -0
  277. package/typings/src/question_boolean.d.ts +0 -3
  278. package/typings/src/question_paneldynamic.d.ts +1 -0
  279. package/typings/src/survey.d.ts +1 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - Survey JavaScript library v2.3.1
2
+ * surveyjs - Survey JavaScript library v2.3.2
3
3
  * Copyright (c) 2015-2025 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
@@ -9337,6 +9337,8 @@ class ListModel extends ActionContainer {
9337
9337
  isItemVisible(item) {
9338
9338
  if (item.id === this.loadingIndicator.id)
9339
9339
  return item.visible;
9340
+ if (this.disableSearch)
9341
+ return item.visible;
9340
9342
  return item.visible && this.hasText(item, this.filterString);
9341
9343
  }
9342
9344
  getRenderedActions() {
@@ -9573,10 +9575,7 @@ class ListModel extends ActionContainer {
9573
9575
  }
9574
9576
  onPointerDown(event, item) { }
9575
9577
  refresh() {
9576
- if (this.filterString !== "") {
9577
- this.filterString = "";
9578
- }
9579
- else {
9578
+ if (this.filterString == "") {
9580
9579
  this.raiseUpdate({ needUpdateIsEmpty: true });
9581
9580
  }
9582
9581
  this.resetFocusedItem();
@@ -9739,6 +9738,9 @@ __decorate([
9739
9738
  __decorate([
9740
9739
  property()
9741
9740
  ], ListModel.prototype, "listAriaLabel", void 0);
9741
+ __decorate([
9742
+ property({ defaultValue: false })
9743
+ ], ListModel.prototype, "disableSearch", void 0);
9742
9744
 
9743
9745
  class PopupModel extends Base {
9744
9746
  refreshInnerModel() {
@@ -9967,6 +9969,11 @@ function createPopupModelWithListModel(listOptions, popupOptions) {
9967
9969
  _popupOptions.onShow();
9968
9970
  listModel.scrollToSelectedItem();
9969
9971
  };
9972
+ popupModel.onHide = () => {
9973
+ if (!!_popupOptions.onHide)
9974
+ _popupOptions.onHide();
9975
+ listModel.filterString = "";
9976
+ };
9970
9977
  return popupModel;
9971
9978
  }
9972
9979
  function getActionDropdownButtonTarget(container) {
@@ -17639,6 +17646,9 @@ class Question extends SurveyElement {
17639
17646
  set value(newValue) {
17640
17647
  this.setNewValue(newValue);
17641
17648
  }
17649
+ getStructuredValue(level = -1) {
17650
+ return this.value;
17651
+ }
17642
17652
  get hasFilteredValue() { return false; }
17643
17653
  getFilteredValue(isUnwrapped) { return this.value; }
17644
17654
  getFilteredName() { return this.getValueName(); }
@@ -19679,8 +19689,10 @@ class CalculatedValue extends Base {
19679
19689
  }
19680
19690
  }
19681
19691
  ensureExpression() {
19682
- if (!!this.expressionRunner)
19692
+ if (!!this.expressionRunner) {
19693
+ this.expressionRunner.expression = this.expression;
19683
19694
  return;
19695
+ }
19684
19696
  this.expressionRunner = new ExpressionRunner(this.expression);
19685
19697
  this.expressionRunner.onRunComplete = newValue => {
19686
19698
  if (!Helpers.isTwoValueEquals(newValue, this.value, false, true, false)) {
@@ -20538,7 +20550,6 @@ class QuestionMatrixBaseModel extends Question {
20538
20550
  super(name);
20539
20551
  this.generatedVisibleRows = null;
20540
20552
  this.generatedTotalRow = null;
20541
- this.filteredRows = null;
20542
20553
  this.columns = this.createColumnValues();
20543
20554
  this.rows = this.createItemValues("rows");
20544
20555
  }
@@ -20717,6 +20728,9 @@ class QuestionMatrixBaseModel extends Question {
20717
20728
  ItemValue.runEnabledConditionsForItems(this.rows, undefined, properties);
20718
20729
  if (this.filteredRows.length === this.rows.length) {
20719
20730
  this.filteredRows = null;
20731
+ if (!!this.generatedVisibleRows && this.generatedVisibleRows.length !== this.rows.length) {
20732
+ this.generatedVisibleRows = null;
20733
+ }
20720
20734
  }
20721
20735
  return hasChanged;
20722
20736
  }
@@ -21817,7 +21831,9 @@ class QuestionCompositeModel extends QuestionCustomModelBase {
21817
21831
  json.createElements(res, this);
21818
21832
  }
21819
21833
  this.initElement(res);
21834
+ this.setIsContentElement(res);
21820
21835
  res.readOnly = this.isReadOnly;
21836
+ res.onGetNoCallback = (no) => { return this.no; };
21821
21837
  res.questions.forEach(q => {
21822
21838
  q.setParentQuestion(this);
21823
21839
  q.onUpdateCssClassesCallback = (css) => { this.onUpdateQuestionCssClasses(q, css); };
@@ -32140,7 +32156,7 @@ class PanelModelBase extends SurveyElement {
32140
32156
  const q = el;
32141
32157
  if (!q.isEmpty()) {
32142
32158
  var valueName = q.getValueName();
32143
- data[valueName] = q.value;
32159
+ data[valueName] = q.getStructuredValue(level - 1);
32144
32160
  if (!!this.data) {
32145
32161
  var comment = this.data.getComment(valueName);
32146
32162
  if (!!comment) {
@@ -32702,6 +32718,8 @@ class PanelModelBase extends SurveyElement {
32702
32718
  return res;
32703
32719
  }
32704
32720
  childVisibilityChanged() {
32721
+ if (this.isRunningConditions)
32722
+ return;
32705
32723
  var newIsVisibleValue = this.getIsPageVisible(null);
32706
32724
  var oldIsVisibleValue = this.getPropertyValue("isVisible", true);
32707
32725
  if (newIsVisibleValue !== oldIsVisibleValue) {
@@ -33352,10 +33370,17 @@ class PanelModelBase extends SurveyElement {
33352
33370
  if (this.isDesignMode || this.isLoadingFromJson)
33353
33371
  return;
33354
33372
  var elements = this.elements.slice();
33373
+ const prevContentVisibility = this.getIsPageVisible();
33374
+ this.isRunningConditions = true;
33355
33375
  for (var i = 0; i < elements.length; i++) {
33356
33376
  elements[i].runCondition(properties);
33357
33377
  }
33358
33378
  this.runConditionCore(properties);
33379
+ const newContentVisibility = this.getIsPageVisible();
33380
+ this.isRunningConditions = false;
33381
+ if (prevContentVisibility !== newContentVisibility) {
33382
+ this.childVisibilityChanged();
33383
+ }
33359
33384
  }
33360
33385
  onAnyValueChanged(name, questionName) {
33361
33386
  var els = this.elements;
@@ -33608,6 +33633,9 @@ class PanelModel extends PanelModelBase {
33608
33633
  }
33609
33634
  calcNo() {
33610
33635
  let no = Helpers.getNumberByIndex(this.visibleIndex, this.getStartIndex());
33636
+ if (this.onGetNoCallback) {
33637
+ no = this.onGetNoCallback(no);
33638
+ }
33611
33639
  if (!!this.parent) {
33612
33640
  no = this.parent.addNoFromChild(no);
33613
33641
  }
@@ -37815,7 +37843,7 @@ class SurveyModel extends SurveyElementCore {
37815
37843
  const opt = options || { includePages: false, includePanels: false };
37816
37844
  if (!opt.includePages && !opt.includePanels)
37817
37845
  return this.data;
37818
- return this.getStructuredData(!!opt.includePages, !opt.includePanels ? (opt.includePages ? 1 : 0) : -1);
37846
+ return this.getStructuredData(!!opt.includePages, !opt.includePanels ? (opt.includePages ? 1 : 0) : 100);
37819
37847
  }
37820
37848
  getStructuredData(includePages = true, level = -1) {
37821
37849
  if (level === 0)
@@ -40898,6 +40926,9 @@ class SurveyModel extends SurveyElementCore {
40898
40926
  this.onValueChanging.fire(this, options);
40899
40927
  return options.value;
40900
40928
  }
40929
+ getLocNotification(loc, value, oldValue) {
40930
+ return loc || Helpers.isTwoValueEquals(value, oldValue, false, true, false);
40931
+ }
40901
40932
  updateQuestionValue(valueName, newValue) {
40902
40933
  if (this.isLoadingFromJson)
40903
40934
  return;
@@ -41576,6 +41607,7 @@ class SurveyModel extends SurveyElementCore {
41576
41607
  newValue = this.getUnbindValue(newValue);
41577
41608
  this.setDataValueCore(this.valuesHash, name, newValue);
41578
41609
  }
41610
+ locNotification = this.getLocNotification(locNotification, newValue, oldValue);
41579
41611
  this.updateOnSetValue(name, newValue, oldValue, locNotification, allowNotifyValueChanged, questionName);
41580
41612
  }
41581
41613
  isValueEmpyOnSetValue(name, val) {
@@ -41732,6 +41764,7 @@ class SurveyModel extends SurveyElementCore {
41732
41764
  return;
41733
41765
  const commentName = name + this.commentSuffix;
41734
41766
  newValue = this.questionOnValueChanging(commentName, newValue, name);
41767
+ locNotification = this.getLocNotification(locNotification, newValue, this.getComment(name));
41735
41768
  if (this.isValueEmpty(newValue)) {
41736
41769
  this.deleteDataValueCore(this.valuesHash, commentName);
41737
41770
  }
@@ -44225,12 +44258,22 @@ class QuestionSelectBase extends Question {
44225
44258
  valueFromData(val) {
44226
44259
  let item = this.getItemByValue(val, this.activeChoices);
44227
44260
  if (!!item) {
44228
- if (typeof val === "object" && item.showCommentArea && !Helpers.isValueEmpty(val[this.commentPropertyValue]))
44229
- return { value: item.value, [this.commentPropertyValue]: val[this.commentPropertyValue] };
44230
- return item.value;
44261
+ return this.getChoiceValue(item, val, false);
44231
44262
  }
44232
44263
  return super.valueFromData(val);
44233
44264
  }
44265
+ getChoiceValue(choice, val, objOnComment) {
44266
+ const isObj = typeof val === "object";
44267
+ const comment = isObj ? val[this.commentPropertyValue] : "";
44268
+ const hasComment = !Helpers.isValueEmpty(comment);
44269
+ if (isObj && choice.showCommentArea && (objOnComment || hasComment)) {
44270
+ const res = { value: choice.value };
44271
+ if (hasComment)
44272
+ res[this.commentPropertyValue] = comment;
44273
+ return res;
44274
+ }
44275
+ return choice.value;
44276
+ }
44234
44277
  getItemByValue(val, choices) {
44235
44278
  const chs = choices || this.visibleChoices;
44236
44279
  if (!!val && typeof val === "object" && !Helpers.isValueEmpty(val.value)) {
@@ -46105,7 +46148,6 @@ class DropdownListModel extends Base {
46105
46148
  }, 1);
46106
46149
  }
46107
46150
  onHidePopup() {
46108
- this.resetFilterString();
46109
46151
  this.question.suggestedItem = null;
46110
46152
  if (this.choicesLazyLoadEnabled) {
46111
46153
  this.resetItemsSettings();
@@ -46157,17 +46199,17 @@ class DropdownListModel extends Base {
46157
46199
  return res;
46158
46200
  }
46159
46201
  setQuestionValue(item) {
46202
+ let selectedItem = item;
46160
46203
  if (this.allowCustomChoices && item.id === this.customItemValue.id) {
46161
46204
  const newChoice = this.createCustomItem();
46162
- if (!!newChoice) {
46163
- this.question.selectItem(newChoice);
46164
- this.hintString = "";
46165
- }
46205
+ selectedItem = newChoice;
46166
46206
  }
46167
- else {
46168
- this.question.selectItem(item);
46169
- if (this.searchEnabled)
46170
- this.applyInputString(item);
46207
+ if (!!selectedItem) {
46208
+ this.resetFilterString();
46209
+ this.question.selectItem(selectedItem);
46210
+ if (this.searchEnabled) {
46211
+ this.applyInputString(selectedItem);
46212
+ }
46171
46213
  }
46172
46214
  }
46173
46215
  createCustomItem() {
@@ -46195,6 +46237,7 @@ class DropdownListModel extends Base {
46195
46237
  }
46196
46238
  });
46197
46239
  model.isAllDataLoaded = !this.choicesLazyLoadEnabled;
46240
+ model.disableSearch = this.choicesLazyLoadEnabled;
46198
46241
  model.actions.forEach(a => a.disableTabStop = true);
46199
46242
  model.setOnFilterStringChangedCallback(this.listModelFilterStringChanged);
46200
46243
  }
@@ -46206,12 +46249,13 @@ class DropdownListModel extends Base {
46206
46249
  resetFilterString() {
46207
46250
  if (!!this.filterString) {
46208
46251
  this.filterString = undefined;
46252
+ this.listModel.filterString = "";
46209
46253
  }
46254
+ this.inputString = null;
46255
+ this.hintString = "";
46210
46256
  }
46211
46257
  clear() {
46212
46258
  this.customValue = undefined;
46213
- this.inputString = null;
46214
- this.hintString = "";
46215
46259
  this.resetFilterString();
46216
46260
  }
46217
46261
  onSetFilterString() {
@@ -46471,6 +46515,8 @@ class DropdownListModel extends Base {
46471
46515
  }
46472
46516
  setChoicesLazyLoadEnabled(newValue) {
46473
46517
  this.choicesLazyLoadEnabled = newValue;
46518
+ this.listModel.disableSearch = newValue;
46519
+ this.listModel.isAllDataLoaded = !newValue;
46474
46520
  }
46475
46521
  setInputPlaceholder(newValue) {
46476
46522
  this.inputPlaceholder = newValue;
@@ -46628,8 +46674,6 @@ class DropdownListModel extends Base {
46628
46674
  doKey2ClickBlur(event);
46629
46675
  this._popupModel.hide();
46630
46676
  this.resetFilterString();
46631
- this.inputString = null;
46632
- this.hintString = "";
46633
46677
  event.stopPropagation();
46634
46678
  }
46635
46679
  onFocus(event) {
@@ -46642,9 +46686,6 @@ class DropdownListModel extends Base {
46642
46686
  if (this.searchEnabled && !!newValue) {
46643
46687
  this.applyInputString(newValue);
46644
46688
  }
46645
- else {
46646
- this.inputString = null;
46647
- }
46648
46689
  }
46649
46690
  dispose() {
46650
46691
  super.dispose();
@@ -50815,7 +50856,13 @@ class QuestionCheckboxModel extends QuestionCheckboxBase {
50815
50856
  const index = this.getItemValIndexByItemValue(item.value);
50816
50857
  if (index > -1) {
50817
50858
  const val = this.createValueCopy();
50818
- val[index][this.commentPropertyValue] = newValue;
50859
+ const itemVal = val[index];
50860
+ if (newValue) {
50861
+ itemVal[this.commentPropertyValue] = newValue;
50862
+ }
50863
+ else {
50864
+ delete itemVal[this.commentPropertyValue];
50865
+ }
50819
50866
  this.value = val;
50820
50867
  }
50821
50868
  }
@@ -51117,6 +51164,9 @@ class QuestionCheckboxModel extends QuestionCheckboxBase {
51117
51164
  return -1;
51118
51165
  }
51119
51166
  removeNoneItemsValues(value, newValue) {
51167
+ if (value.length === 1 && newValue.length === 1
51168
+ && this.getRealValue(value[0]) === this.getRealValue(newValue[0]))
51169
+ return;
51120
51170
  const noneValues = this.getNoneItems().map(item => item.value);
51121
51171
  if (noneValues.length > 0) {
51122
51172
  const prevNone = this.noneIndexInArray(value, noneValues);
@@ -51285,9 +51335,9 @@ class QuestionCheckboxModel extends QuestionCheckboxBase {
51285
51335
  return [super.valueFromData(val)];
51286
51336
  let value = [];
51287
51337
  for (let i = 0; i < val.length; i++) {
51288
- let choiceitem = ItemValue.getItemByValue(this.visibleChoices, val[i]);
51338
+ const choiceitem = this.getItemByValue(val[i], this.visibleChoices);
51289
51339
  if (!!choiceitem) {
51290
- value.push(choiceitem.value);
51340
+ value.push(this.getChoiceValue(choiceitem, val[i], true));
51291
51341
  }
51292
51342
  else {
51293
51343
  value.push(val[i]);
@@ -51301,9 +51351,13 @@ class QuestionCheckboxModel extends QuestionCheckboxBase {
51301
51351
  }
51302
51352
  convertValueFromObject(val) {
51303
51353
  const valProp = this.getValuePropertyName();
51304
- if (!valProp)
51354
+ if (!valProp || !Array.isArray(val))
51305
51355
  return val;
51306
- return Helpers.convertArrayObjectToValue(val, valProp);
51356
+ const res = [];
51357
+ for (let i = 0; i < val.length; i++) {
51358
+ res.push(this.getRealValue(val[i]));
51359
+ }
51360
+ return res;
51307
51361
  }
51308
51362
  renderedValueFromDataCore(val) {
51309
51363
  if (!val || !Array.isArray(val))
@@ -51556,11 +51610,6 @@ class DropdownMultiSelectListModel extends DropdownListModel {
51556
51610
  res.forceShowFilter = this.question.choicesLazyLoadEnabled;
51557
51611
  return res;
51558
51612
  }
51559
- resetFilterString() {
51560
- super.resetFilterString();
51561
- this.inputString = null;
51562
- this.hintString = "";
51563
- }
51564
51613
  get shouldResetAfterCancel() {
51565
51614
  return IsTouch && !this.closeOnSelect;
51566
51615
  }
@@ -56856,16 +56905,12 @@ class QuestionBooleanModel extends Question {
56856
56905
  }
56857
56906
  this.setBooleanValue(val);
56858
56907
  }
56859
- get checkedValue() { return this.booleanValue; }
56860
- set checkedValue(val) { this.booleanValue = val; }
56861
56908
  setBooleanValue(val) {
56862
56909
  if (this.isValueEmpty(val)) {
56863
56910
  this.value = undefined;
56864
- this.booleanValueRendered = undefined;
56865
56911
  }
56866
56912
  else {
56867
56913
  this.value = val == true ? this.getValueTrue() : this.getValueFalse();
56868
- this.booleanValueRendered = val;
56869
56914
  }
56870
56915
  }
56871
56916
  get defaultValue() {
@@ -57088,7 +57133,7 @@ class QuestionBooleanModel extends Question {
57088
57133
  if (css.radioItem) {
57089
57134
  className = css.radioItem;
57090
57135
  }
57091
- if (css.radioItemChecked && value === this.booleanValue) {
57136
+ if (css.radioItemChecked && value === this.value) {
57092
57137
  className = (className ? className + " " : "") + css.radioItemChecked;
57093
57138
  }
57094
57139
  if (this.isDisabledStyle) {
@@ -57119,9 +57164,6 @@ class QuestionBooleanModel extends Question {
57119
57164
  return "switch";
57120
57165
  }
57121
57166
  }
57122
- __decorate([
57123
- property()
57124
- ], QuestionBooleanModel.prototype, "booleanValueRendered", void 0);
57125
57167
  __decorate([
57126
57168
  property({ localizable: true })
57127
57169
  ], QuestionBooleanModel.prototype, "label", void 0);
@@ -59020,7 +59062,7 @@ class PanelDynamicItemGetterContext extends QuestionItemValueGetterContext {
59020
59062
  }
59021
59063
  const expVar = settings.expressionVariables;
59022
59064
  const panelPrefix = expVar.panel;
59023
- if (path.length > 1 && path[0].name === expVar.parentPanel.toLocaleLowerCase()) {
59065
+ if (path.length > 1 && path[0].name.toLocaleLowerCase() === expVar.parentPanel.toLocaleLowerCase()) {
59024
59066
  const q = this.item.data;
59025
59067
  if (!!q && !!q.parentQuestion && !!q.parent && !!q.parent.data) {
59026
59068
  path[0].name = panelPrefix;
@@ -59981,6 +60023,19 @@ class QuestionPanelDynamicModel extends Question {
59981
60023
  set panelsState(val) {
59982
60024
  this.setPropertyValue("panelsState", val);
59983
60025
  }
60026
+ getStructuredValue(level = -1) {
60027
+ if (level < 0 || this.isEmpty() || !Array.isArray(this.value))
60028
+ return this.value;
60029
+ const data = new Array();
60030
+ const valCount = Math.min(this.visiblePanelCount, this.value.length);
60031
+ for (let i = 0; i < valCount; i++) {
60032
+ const panel = this.visiblePanels[i];
60033
+ const panelData = {};
60034
+ panel.collectValues(panelData, level);
60035
+ data.push(panelData);
60036
+ }
60037
+ return data;
60038
+ }
59984
60039
  setTemplatePanelSurveyImpl() {
59985
60040
  this.template.setSurveyImpl(this.useTemplatePanel
59986
60041
  ? this.surveyImpl
@@ -65138,11 +65193,11 @@ var Version;
65138
65193
  var ReleaseDate;
65139
65194
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
65140
65195
  //@ts-ignore
65141
- Version = `${"2.3.1"}`;
65196
+ Version = `${"2.3.2"}`;
65142
65197
  settings.version = Version;
65143
65198
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
65144
65199
  //@ts-ignore
65145
- ReleaseDate = `${"2025-08-06"}`;
65200
+ ReleaseDate = `${"2025-08-13"}`;
65146
65201
  function checkLibraryVersion(ver, libraryName) {
65147
65202
  if (Version != ver) {
65148
65203
  const str = "survey-core has version '" + Version + "' and " + libraryName