survey-core 1.12.4 → 1.12.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/defaultV2.css +86 -6
  2. package/defaultV2.css.map +1 -1
  3. package/defaultV2.fontless.css +86 -6
  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 +1 -1
  114. package/modern.fontless.css +1 -1
  115. package/modern.fontless.min.css +1 -1
  116. package/modern.min.css +1 -1
  117. package/package.json +1 -1
  118. package/plugins/bootstrap-integration/index.js +1 -1
  119. package/plugins/bootstrap-integration/index.min.js +1 -1
  120. package/plugins/bootstrap-material-integration/index.js +1 -1
  121. package/plugins/bootstrap-material-integration/index.min.js +1 -1
  122. package/survey.core.js +619 -321
  123. package/survey.core.js.map +1 -1
  124. package/survey.core.min.js +3 -3
  125. package/survey.css +1 -1
  126. package/survey.i18n.js +1 -1
  127. package/survey.i18n.min.js +1 -1
  128. package/survey.min.css +1 -1
  129. package/themes/borderless-dark-panelless.js +1 -1
  130. package/themes/borderless-dark-panelless.min.js +1 -1
  131. package/themes/borderless-dark.js +1 -1
  132. package/themes/borderless-dark.min.js +1 -1
  133. package/themes/borderless-light-panelless..js +1 -1
  134. package/themes/borderless-light-panelless..min.js +1 -1
  135. package/themes/borderless-light.js +1 -1
  136. package/themes/borderless-light.min.js +1 -1
  137. package/themes/contrast-dark-panelless.js +1 -1
  138. package/themes/contrast-dark-panelless.min.js +1 -1
  139. package/themes/contrast-dark.js +1 -1
  140. package/themes/contrast-dark.min.js +1 -1
  141. package/themes/contrast-light-panelless.js +1 -1
  142. package/themes/contrast-light-panelless.min.js +1 -1
  143. package/themes/contrast-light.js +1 -1
  144. package/themes/contrast-light.min.js +1 -1
  145. package/themes/default-dark-panelless.js +1 -1
  146. package/themes/default-dark-panelless.min.js +1 -1
  147. package/themes/default-dark.js +1 -1
  148. package/themes/default-dark.min.js +1 -1
  149. package/themes/default-light-panelless.js +1 -1
  150. package/themes/default-light-panelless.min.js +1 -1
  151. package/themes/default-light.js +1 -1
  152. package/themes/default-light.min.js +1 -1
  153. package/themes/doubleborder-dark-panelless.js +1 -1
  154. package/themes/doubleborder-dark-panelless.min.js +1 -1
  155. package/themes/doubleborder-dark.js +1 -1
  156. package/themes/doubleborder-dark.min.js +1 -1
  157. package/themes/doubleborder-light-panelles.js +1 -1
  158. package/themes/doubleborder-light-panelles.min.js +1 -1
  159. package/themes/doubleborder-light.js +1 -1
  160. package/themes/doubleborder-light.min.js +1 -1
  161. package/themes/flat-dark-panelless.js +1 -1
  162. package/themes/flat-dark-panelless.min.js +1 -1
  163. package/themes/flat-dark.js +1 -1
  164. package/themes/flat-dark.min.js +1 -1
  165. package/themes/flat-light-panelless.js +1 -1
  166. package/themes/flat-light-panelless.min.js +1 -1
  167. package/themes/flat-light.js +1 -1
  168. package/themes/flat-light.min.js +1 -1
  169. package/themes/index.js +1 -1
  170. package/themes/index.min.js +1 -1
  171. package/themes/layered-dark-panelless.js +1 -1
  172. package/themes/layered-dark-panelless.min.js +1 -1
  173. package/themes/layered-dark.js +1 -1
  174. package/themes/layered-dark.min.js +1 -1
  175. package/themes/layered-light-panelless.js +1 -1
  176. package/themes/layered-light-panelless.min.js +1 -1
  177. package/themes/layered-light.js +1 -1
  178. package/themes/layered-light.min.js +1 -1
  179. package/themes/plain-dark-panelless.js +1 -1
  180. package/themes/plain-dark-panelless.min.js +1 -1
  181. package/themes/plain-dark.js +1 -1
  182. package/themes/plain-dark.min.js +1 -1
  183. package/themes/plain-light-panelless.js +1 -1
  184. package/themes/plain-light-panelless.min.js +1 -1
  185. package/themes/plain-light.js +1 -1
  186. package/themes/plain-light.min.js +1 -1
  187. package/themes/sharp-dark-panelless.js +1 -1
  188. package/themes/sharp-dark-panelless.min.js +1 -1
  189. package/themes/sharp-dark.js +1 -1
  190. package/themes/sharp-dark.min.js +1 -1
  191. package/themes/sharp-light-panelless.js +1 -1
  192. package/themes/sharp-light-panelless.min.js +1 -1
  193. package/themes/sharp-light.js +1 -1
  194. package/themes/sharp-light.min.js +1 -1
  195. package/themes/solid-dark-panelless.js +1 -1
  196. package/themes/solid-dark-panelless.min.js +1 -1
  197. package/themes/solid-dark.js +1 -1
  198. package/themes/solid-dark.min.js +1 -1
  199. package/themes/solid-light-panelless.js +1 -1
  200. package/themes/solid-light-panelless.min.js +1 -1
  201. package/themes/solid-light.js +1 -1
  202. package/themes/solid-light.min.js +1 -1
  203. package/themes/three-dimensional-dark-panelless.js +1 -1
  204. package/themes/three-dimensional-dark-panelless.min.js +1 -1
  205. package/themes/three-dimensional-dark.js +1 -1
  206. package/themes/three-dimensional-dark.min.js +1 -1
  207. package/themes/three-dimensional-light-panelless.js +1 -1
  208. package/themes/three-dimensional-light-panelless.min.js +1 -1
  209. package/themes/three-dimensional-light.js +1 -1
  210. package/themes/three-dimensional-light.min.js +1 -1
  211. package/ts3.4/typings/packages/survey-core/entries/chunks/model.d.ts +1 -1
  212. package/ts3.4/typings/packages/survey-core/src/base-interfaces.d.ts +2 -2
  213. package/ts3.4/typings/packages/survey-core/src/base.d.ts +4 -15
  214. package/ts3.4/typings/packages/survey-core/src/defaultCss/defaultV2Css.d.ts +1 -0
  215. package/ts3.4/typings/packages/survey-core/src/jsonobject.d.ts +2 -0
  216. package/ts3.4/typings/packages/survey-core/src/page.d.ts +8 -3
  217. package/ts3.4/typings/packages/survey-core/src/panel.d.ts +2 -0
  218. package/ts3.4/typings/packages/survey-core/src/question.d.ts +2 -2
  219. package/ts3.4/typings/packages/survey-core/src/question_baseselect.d.ts +0 -3
  220. package/ts3.4/typings/packages/survey-core/src/question_comment.d.ts +0 -3
  221. package/ts3.4/typings/packages/survey-core/src/question_file.d.ts +20 -2
  222. package/ts3.4/typings/packages/survey-core/src/question_matrixdropdownbase.d.ts +2 -0
  223. package/ts3.4/typings/packages/survey-core/src/question_matrixdynamic.d.ts +4 -0
  224. package/ts3.4/typings/packages/survey-core/src/question_text.d.ts +0 -1
  225. package/ts3.4/typings/packages/survey-core/src/survey-element.d.ts +16 -1
  226. package/ts3.4/typings/packages/survey-core/src/survey.d.ts +78 -31
  227. package/ts3.4/typings/packages/survey-core/src/surveyTimerModel.d.ts +1 -1
  228. package/ts3.4/typings/packages/survey-core/src/surveytimer.d.ts +1 -0
  229. package/ts3.4/typings/packages/survey-core/src/themes.d.ts +19 -13
  230. package/ts3.4/typings/packages/survey-core/src/utils/text-area.d.ts +1 -0
  231. package/ts3.4/typings/packages/survey-core/src/validator.d.ts +1 -0
  232. package/typings/packages/survey-core/entries/chunks/model.d.ts +1 -1
  233. package/typings/packages/survey-core/src/base-interfaces.d.ts +2 -2
  234. package/typings/packages/survey-core/src/base.d.ts +4 -15
  235. package/typings/packages/survey-core/src/defaultCss/defaultV2Css.d.ts +1 -0
  236. package/typings/packages/survey-core/src/jsonobject.d.ts +2 -0
  237. package/typings/packages/survey-core/src/page.d.ts +9 -3
  238. package/typings/packages/survey-core/src/panel.d.ts +2 -0
  239. package/typings/packages/survey-core/src/question.d.ts +2 -2
  240. package/typings/packages/survey-core/src/question_baseselect.d.ts +0 -3
  241. package/typings/packages/survey-core/src/question_comment.d.ts +0 -3
  242. package/typings/packages/survey-core/src/question_file.d.ts +21 -2
  243. package/typings/packages/survey-core/src/question_matrixdropdownbase.d.ts +2 -0
  244. package/typings/packages/survey-core/src/question_matrixdynamic.d.ts +4 -0
  245. package/typings/packages/survey-core/src/question_text.d.ts +0 -1
  246. package/typings/packages/survey-core/src/survey-element.d.ts +16 -1
  247. package/typings/packages/survey-core/src/survey.d.ts +84 -32
  248. package/typings/packages/survey-core/src/surveyTimerModel.d.ts +1 -1
  249. package/typings/packages/survey-core/src/surveytimer.d.ts +1 -0
  250. package/typings/packages/survey-core/src/themes.d.ts +19 -13
  251. package/typings/packages/survey-core/src/utils/text-area.d.ts +1 -0
  252. package/typings/packages/survey-core/src/validator.d.ts +1 -0
package/survey.core.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - Survey JavaScript library v1.12.4
2
+ * surveyjs - Survey JavaScript library v1.12.6
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
  */
@@ -964,7 +964,7 @@ module.exports = "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\
964
964
  /*!*******************************************!*\
965
965
  !*** ./src/entries/core.ts + 127 modules ***!
966
966
  \*******************************************/
967
- /*! exports provided: Version, ReleaseDate, checkLibraryVersion, setLicenseKey, slk, hasLicense, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, EventBase, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, ExpressionExecutor, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, UnaryOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedErrorRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, QuestionMatrixBaseModel, MultipleTextItemModel, MultipleTextCell, MultipleTextErrorCell, MutlipleTextErrorRow, MutlipleTextRow, QuestionMultipleTextModel, MultipleTextEditorModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionTagboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, RenderedRatingItem, QuestionExpressionModel, QuestionTextBase, CharacterCounter, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyTimerModel, tryFocusPage, createTOCListModel, getTocRootCss, TOCModel, SurveyProgressModel, ProgressButtons, ProgressButtonsResponsivityManager, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, SurveyTriggerSkip, Trigger, PopupSurveyModel, SurveyWindowModel, TextPreProcessor, Notifier, Cover, CoverCell, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, ListModel, MultiSelectListModel, PopupModel, createDialogOptions, PopupBaseViewModel, PopupDropdownViewModel, PopupModalViewModel, createPopupViewModel, createPopupModalViewModel, DropdownListModel, DropdownMultiSelectListModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, IsTouch, _setIsTouch, confirmAction, confirmActionAsync, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, loadFileFromBase64, increaseHeightByContent, createSvg, chooseFiles, sanitizeEditableContent, prepareElementForVerticalAnimation, cleanHtmlElementAfterAnimation, classesToSelector, InputMaskBase, InputMaskPattern, InputMaskNumeric, InputMaskDateTime, InputMaskCurrency, CssClassBuilder, TextAreaModel, surveyCss, defaultV2Css, defaultV2ThemeName, DragDropCore, DragDropChoices, DragDropRankingSelectToRank, StylesManager, defaultStandardCss, modernCss, SvgIconRegistry, SvgRegistry, SvgBundleViewModel, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, getOriginalEvent, getElement, createDropdownActionModel, createDropdownActionModelAdvanced, createPopupModelWithListModel, getActionDropdownButtonTarget, BaseAction, Action, ActionDropdownViewModel, AnimationUtils, AnimationPropertyUtils, AnimationGroupUtils, AnimationProperty, AnimationBoolean, AnimationGroup, AnimationTab, AdaptiveActionContainer, defaultActionBarCss, ActionContainer, DragOrClickHelper, Model */
967
+ /*! exports provided: Version, ReleaseDate, checkLibraryVersion, setLicenseKey, slk, hasLicense, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, EventBase, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, ExpressionExecutor, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, UnaryOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedErrorRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, QuestionMatrixBaseModel, MultipleTextItemModel, MultipleTextCell, MultipleTextErrorCell, MutlipleTextErrorRow, MutlipleTextRow, QuestionMultipleTextModel, MultipleTextEditorModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionTagboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionFilePage, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, RenderedRatingItem, QuestionExpressionModel, QuestionTextBase, CharacterCounter, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyTimerModel, tryFocusPage, createTOCListModel, getTocRootCss, TOCModel, SurveyProgressModel, ProgressButtons, ProgressButtonsResponsivityManager, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, SurveyTriggerSkip, Trigger, PopupSurveyModel, SurveyWindowModel, TextPreProcessor, Notifier, Cover, CoverCell, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, ListModel, MultiSelectListModel, PopupModel, createDialogOptions, PopupBaseViewModel, PopupDropdownViewModel, PopupModalViewModel, createPopupViewModel, createPopupModalViewModel, DropdownListModel, DropdownMultiSelectListModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, IsTouch, _setIsTouch, confirmAction, confirmActionAsync, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, loadFileFromBase64, increaseHeightByContent, createSvg, chooseFiles, sanitizeEditableContent, prepareElementForVerticalAnimation, cleanHtmlElementAfterAnimation, classesToSelector, InputMaskBase, InputMaskPattern, InputMaskNumeric, InputMaskDateTime, InputMaskCurrency, CssClassBuilder, TextAreaModel, surveyCss, defaultV2Css, defaultV2ThemeName, DragDropCore, DragDropChoices, DragDropRankingSelectToRank, StylesManager, defaultStandardCss, modernCss, SvgIconRegistry, SvgRegistry, SvgBundleViewModel, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, getOriginalEvent, getElement, createDropdownActionModel, createDropdownActionModelAdvanced, createPopupModelWithListModel, getActionDropdownButtonTarget, BaseAction, Action, ActionDropdownViewModel, AnimationUtils, AnimationPropertyUtils, AnimationGroupUtils, AnimationProperty, AnimationBoolean, AnimationGroup, AnimationTab, AdaptiveActionContainer, defaultActionBarCss, ActionContainer, DragOrClickHelper, Model */
968
968
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
969
969
 
970
970
  "use strict";
@@ -1081,6 +1081,7 @@ __webpack_require__.d(__webpack_exports__, "QuestionDropdownModel", function() {
1081
1081
  __webpack_require__.d(__webpack_exports__, "QuestionFactory", function() { return /* reexport */ questionfactory_QuestionFactory; });
1082
1082
  __webpack_require__.d(__webpack_exports__, "ElementFactory", function() { return /* reexport */ questionfactory_ElementFactory; });
1083
1083
  __webpack_require__.d(__webpack_exports__, "QuestionFileModel", function() { return /* reexport */ question_file_QuestionFileModel; });
1084
+ __webpack_require__.d(__webpack_exports__, "QuestionFilePage", function() { return /* reexport */ question_file_QuestionFilePage; });
1084
1085
  __webpack_require__.d(__webpack_exports__, "QuestionHtmlModel", function() { return /* reexport */ question_html_QuestionHtmlModel; });
1085
1086
  __webpack_require__.d(__webpack_exports__, "QuestionRadiogroupModel", function() { return /* reexport */ question_radiogroup_QuestionRadiogroupModel; });
1086
1087
  __webpack_require__.d(__webpack_exports__, "QuestionRatingModel", function() { return /* reexport */ question_rating_QuestionRatingModel; });
@@ -2361,8 +2362,10 @@ var jsonobject_JsonObjectProperty = /** @class */ (function () {
2361
2362
  return this.getValue(obj);
2362
2363
  };
2363
2364
  JsonObjectProperty.prototype.getValue = function (obj) {
2364
- if (this.onGetValue)
2365
+ if (this.onGetValue) {
2366
+ obj = this.getOriginalObj(obj);
2365
2367
  return this.onGetValue(obj);
2368
+ }
2366
2369
  if (this.serializationProperty && !!obj[this.serializationProperty])
2367
2370
  return obj[this.serializationProperty].getJson();
2368
2371
  return obj[this.name];
@@ -2389,6 +2392,7 @@ var jsonobject_JsonObjectProperty = /** @class */ (function () {
2389
2392
  };
2390
2393
  JsonObjectProperty.prototype.setValue = function (obj, value, jsonConv) {
2391
2394
  if (this.onSetValue) {
2395
+ obj = this.getOriginalObj(obj);
2392
2396
  this.onSetValue(obj, value, jsonConv);
2393
2397
  }
2394
2398
  else {
@@ -2477,7 +2481,7 @@ var jsonobject_JsonObjectProperty = /** @class */ (function () {
2477
2481
  };
2478
2482
  JsonObjectProperty.prototype.isVisible = function (layout, obj) {
2479
2483
  if (obj === void 0) { obj = null; }
2480
- var isLayout = !this.layout || this.layout == layout;
2484
+ var isLayout = !this.layout || !layout || this.layout === layout;
2481
2485
  if (!this.visible || !isLayout)
2482
2486
  return false;
2483
2487
  if (!!this.visibleIf && !!obj) {
@@ -3007,6 +3011,9 @@ var jsonobject_JsonMetadataClass = /** @class */ (function () {
3007
3011
  if (propInfo.readOnly === true) {
3008
3012
  prop.readOnly = true;
3009
3013
  }
3014
+ if (propInfo.availableInMatrixColumn === true) {
3015
+ prop.availableInMatrixColumn = true;
3016
+ }
3010
3017
  if (propInfo.choices) {
3011
3018
  var choicesFunc = typeof propInfo.choices === "function" ? propInfo.choices : null;
3012
3019
  var choicesValue = typeof propInfo.choices !== "function" ? propInfo.choices : null;
@@ -9142,8 +9149,8 @@ var base_Base = /** @class */ (function () {
9142
9149
  this.isCreating = true;
9143
9150
  this.animationAllowedLock = 0;
9144
9151
  //remove when knockout obsolete
9145
- this.supportOnElementRenderedEvent = true;
9146
- this.onElementRenderedEventEnabled = false;
9152
+ this.supportOnElementRerenderedEvent = true;
9153
+ this.onElementRerenderedEventEnabled = false;
9147
9154
  this._onElementRerendered = new EventBase();
9148
9155
  this.bindingsValue = new base_Bindings(this);
9149
9156
  CustomPropertiesCollection.createProperties(this);
@@ -10080,7 +10087,7 @@ var base_Base = /** @class */ (function () {
10080
10087
  configurable: true
10081
10088
  });
10082
10089
  Base.prototype.getIsAnimationAllowed = function () {
10083
- return settings.animationEnabled && this.animationAllowedLock >= 0 && !this.isLoadingFromJson && !this.isDisposed && (!!this.onElementRerendered || !this.supportOnElementRenderedEvent);
10090
+ return settings.animationEnabled && this.animationAllowedLock >= 0 && !this.isLoadingFromJson && !this.isDisposed && (!!this.onElementRerendered || !this.supportOnElementRerenderedEvent);
10084
10091
  };
10085
10092
  Base.prototype.blockAnimations = function () {
10086
10093
  this.animationAllowedLock--;
@@ -10088,17 +10095,17 @@ var base_Base = /** @class */ (function () {
10088
10095
  Base.prototype.releaseAnimations = function () {
10089
10096
  this.animationAllowedLock++;
10090
10097
  };
10091
- Base.prototype.enableOnElementRenderedEvent = function () {
10092
- this.onElementRenderedEventEnabled = true;
10098
+ Base.prototype.enableOnElementRerenderedEvent = function () {
10099
+ this.onElementRerenderedEventEnabled = true;
10093
10100
  };
10094
- Base.prototype.disableOnElementRenderedEvent = function () {
10101
+ Base.prototype.disableOnElementRerenderedEvent = function () {
10095
10102
  var _a;
10096
10103
  (_a = this.onElementRerendered) === null || _a === void 0 ? void 0 : _a.fire(this, { isCancel: true });
10097
- this.onElementRenderedEventEnabled = false;
10104
+ this.onElementRerenderedEventEnabled = false;
10098
10105
  };
10099
10106
  Object.defineProperty(Base.prototype, "onElementRerendered", {
10100
10107
  get: function () {
10101
- return this.supportOnElementRenderedEvent && this.onElementRenderedEventEnabled ? this._onElementRerendered : undefined;
10108
+ return this.supportOnElementRerenderedEvent && this.onElementRerenderedEventEnabled ? this._onElementRerendered : undefined;
10102
10109
  },
10103
10110
  enumerable: false,
10104
10111
  configurable: true
@@ -10111,66 +10118,6 @@ var base_Base = /** @class */ (function () {
10111
10118
  return Base;
10112
10119
  }());
10113
10120
 
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
-
10174
10121
  var ArrayChanges = /** @class */ (function () {
10175
10122
  function ArrayChanges(index, deleteCount, itemsToAdd, deletedItems) {
10176
10123
  this.index = index;
@@ -10350,7 +10297,9 @@ var responsivity_manager_ResponsivityManager = /** @class */ (function () {
10350
10297
  var _items = this.container.querySelectorAll(this.itemsSelector);
10351
10298
  (_items || []).forEach(function (item, index) {
10352
10299
  var currentAction = actions[index];
10353
- _this.calcActionDimensions(currentAction, item);
10300
+ if (!!currentAction) {
10301
+ _this.calcActionDimensions(currentAction, item);
10302
+ }
10354
10303
  });
10355
10304
  };
10356
10305
  ResponsivityManager.prototype.calcActionDimensions = function (currentAction, item) {
@@ -12910,6 +12859,7 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
12910
12859
  }
12911
12860
  }
12912
12861
  }, function () { return _this.renderedIsExpanded; });
12862
+ _this.onAfterRenderElement = _this.addEvent();
12913
12863
  _this.name = name;
12914
12864
  _this.createNewArray("errors");
12915
12865
  _this.createNewArray("titleActions");
@@ -12939,16 +12889,7 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
12939
12889
  }
12940
12890
  return info;
12941
12891
  };
12942
- SurveyElement.ScrollElementToTop = function (elementId, scrollIfVisible, scrollIntoViewOptions, doneCallback) {
12943
- var root = settings.environment.root;
12944
- if (!elementId || typeof root === "undefined")
12945
- return false;
12946
- var el = root.getElementById(elementId);
12947
- return SurveyElement.ScrollElementToViewCore(el, false, scrollIfVisible, scrollIntoViewOptions, doneCallback);
12948
- };
12949
- SurveyElement.ScrollElementToViewCore = function (el, checkLeft, scrollIfVisible, scrollIntoViewOptions, doneCallback) {
12950
- if (!el || !el.scrollIntoView)
12951
- return false;
12892
+ SurveyElement.IsNeedScrollIntoView = function (el, checkLeft, scrollIfVisible) {
12952
12893
  var elTop = scrollIfVisible ? -1 : el.getBoundingClientRect().top;
12953
12894
  var needScroll = elTop < 0;
12954
12895
  var elLeft = -1;
@@ -12964,20 +12905,48 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
12964
12905
  needScroll = width > 0 && width < elLeft;
12965
12906
  }
12966
12907
  }
12967
- if (needScroll) {
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);
12908
+ return needScroll;
12909
+ };
12910
+ SurveyElement.ScrollIntoView = function (el, scrollIntoViewOptions, doneCallback) {
12911
+ el.scrollIntoView(scrollIntoViewOptions);
12912
+ if (typeof doneCallback === "function") {
12913
+ var lastPos_1 = null;
12914
+ var same_1 = 0;
12915
+ var checkPos_1 = function () {
12916
+ var newPos = el.getBoundingClientRect().top;
12917
+ if (newPos === lastPos_1) {
12918
+ if (same_1++ > 2) {
12975
12919
  doneCallback();
12920
+ return;
12976
12921
  }
12977
- currPageXOffset_1 = window.pageXOffset;
12978
- currPageYOffset_1 = window.pageYOffset;
12979
- }, 25);
12980
- }
12922
+ }
12923
+ else {
12924
+ lastPos_1 = newPos;
12925
+ same_1 = 0;
12926
+ }
12927
+ requestAnimationFrame(checkPos_1);
12928
+ };
12929
+ DomWindowHelper.requestAnimationFrame(checkPos_1);
12930
+ }
12931
+ };
12932
+ SurveyElement.ScrollElementToTop = function (elementId, scrollIfVisible, scrollIntoViewOptions, doneCallback) {
12933
+ var root = settings.environment.root;
12934
+ if (!elementId || typeof root === "undefined")
12935
+ return false;
12936
+ var el = root.getElementById(elementId);
12937
+ return SurveyElement.ScrollElementToViewCore(el, false, scrollIfVisible, scrollIntoViewOptions, doneCallback);
12938
+ };
12939
+ SurveyElement.ScrollElementToViewCore = function (el, checkLeft, scrollIfVisible, scrollIntoViewOptions, doneCallback) {
12940
+ if (!el || !el.scrollIntoView) {
12941
+ doneCallback && doneCallback();
12942
+ return false;
12943
+ }
12944
+ var needScroll = SurveyElement.IsNeedScrollIntoView(el, checkLeft, scrollIfVisible);
12945
+ if (needScroll) {
12946
+ SurveyElement.ScrollIntoView(el, scrollIntoViewOptions, doneCallback);
12947
+ }
12948
+ else {
12949
+ doneCallback && doneCallback();
12981
12950
  }
12982
12951
  return needScroll;
12983
12952
  };
@@ -13727,7 +13696,7 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
13727
13696
  };
13728
13697
  Object.defineProperty(SurveyElement.prototype, "isDefaultV2Theme", {
13729
13698
  get: function () {
13730
- return this.survey && this.survey.getCss().root == "sd-root-modern";
13699
+ return this.survey && this.survey.getCss().root.indexOf("sd-root-modern") !== -1;
13731
13700
  },
13732
13701
  enumerable: false,
13733
13702
  configurable: true
@@ -14124,12 +14093,16 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
14124
14093
  SurveyElement.prototype.getIsAnimationAllowed = function () {
14125
14094
  return _super.prototype.getIsAnimationAllowed.call(this) && !!this.survey && !this.survey["isEndLoadingFromJson"];
14126
14095
  };
14096
+ SurveyElement.prototype.afterRenderCore = function (element) {
14097
+ this.onAfterRenderElement.fire(this, { htmlElement: element });
14098
+ };
14127
14099
  SurveyElement.prototype.dispose = function () {
14128
14100
  _super.prototype.dispose.call(this);
14129
14101
  if (this.titleToolbarValue) {
14130
14102
  this.titleToolbarValue.dispose();
14131
14103
  }
14132
14104
  };
14105
+ // TODO V2: get rid of this flag
14133
14106
  SurveyElement.CreateDisabledDesignElements = false;
14134
14107
  survey_element_decorate([
14135
14108
  jsonobject_property({ defaultValue: null })
@@ -14162,6 +14135,66 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
14162
14135
  return SurveyElement;
14163
14136
  }(survey_element_SurveyElementCore));
14164
14137
 
14138
+ var RenderingCompletedAwaiter = /** @class */ (function () {
14139
+ function RenderingCompletedAwaiter(_elements, _renderedHandler, waitingTimeout) {
14140
+ var _this = this;
14141
+ if (waitingTimeout === void 0) { waitingTimeout = 100; }
14142
+ this._elements = _elements;
14143
+ this._renderedHandler = _renderedHandler;
14144
+ this._elementsToRenderCount = 0;
14145
+ this._elementsToRenderTimer = undefined;
14146
+ this._elementRenderedHandler = function (s, o) {
14147
+ var _a;
14148
+ (_a = s.onAfterRenderElement) === null || _a === void 0 ? void 0 : _a.remove(_this._elementRenderedHandler);
14149
+ _this._elementsToRenderCount--;
14150
+ if (_this._elementsToRenderCount <= 0) {
14151
+ _this.visibleElementsRendered();
14152
+ }
14153
+ };
14154
+ this._elements.forEach(function (element) {
14155
+ if (element.onAfterRenderElement) {
14156
+ element.onAfterRenderElement.add(_this._elementRenderedHandler);
14157
+ _this._elementsToRenderCount++;
14158
+ }
14159
+ });
14160
+ if (this._elementsToRenderCount > 0) {
14161
+ this._elementsToRenderTimer = setTimeout(function () {
14162
+ if (_this._elementsToRenderCount > 0) {
14163
+ _this.visibleElementsRendered();
14164
+ }
14165
+ }, waitingTimeout);
14166
+ }
14167
+ else {
14168
+ this.visibleElementsRendered();
14169
+ }
14170
+ }
14171
+ RenderingCompletedAwaiter.prototype.stopWaitingForElementsRendering = function () {
14172
+ var _this = this;
14173
+ if (this._elementsToRenderTimer) {
14174
+ clearTimeout(this._elementsToRenderTimer);
14175
+ this._elementsToRenderTimer = undefined;
14176
+ }
14177
+ this._elements.forEach(function (element) {
14178
+ var _a;
14179
+ (_a = element.onAfterRenderElement) === null || _a === void 0 ? void 0 : _a.remove(_this._elementRenderedHandler);
14180
+ });
14181
+ this._elementsToRenderCount = 0;
14182
+ };
14183
+ RenderingCompletedAwaiter.prototype.visibleElementsRendered = function () {
14184
+ var renderedHandler = this._renderedHandler;
14185
+ this.dispose();
14186
+ if (typeof renderedHandler == "function") {
14187
+ renderedHandler();
14188
+ }
14189
+ };
14190
+ RenderingCompletedAwaiter.prototype.dispose = function () {
14191
+ this.stopWaitingForElementsRendering();
14192
+ this._elements = undefined;
14193
+ this._renderedHandler = undefined;
14194
+ };
14195
+ return RenderingCompletedAwaiter;
14196
+ }());
14197
+
14165
14198
 
14166
14199
  // CONCATENATED MODULE: ./packages/survey-core/src/localizablestring.ts
14167
14200
 
@@ -16638,6 +16671,11 @@ var validator_SurveyValidator = /** @class */ (function (_super) {
16638
16671
  _this.createLocalizableString("text", _this, true);
16639
16672
  return _this;
16640
16673
  }
16674
+ Object.defineProperty(SurveyValidator.prototype, "isValidator", {
16675
+ get: function () { return true; },
16676
+ enumerable: false,
16677
+ configurable: true
16678
+ });
16641
16679
  SurveyValidator.prototype.getSurvey = function (live) {
16642
16680
  if (live === void 0) { live = false; }
16643
16681
  return !!this.errorOwner && !!this.errorOwner["getSurvey"]
@@ -17496,16 +17534,21 @@ var text_area_TextAreaModel = /** @class */ (function () {
17496
17534
  this.onPropertyChangedCallback = function () {
17497
17535
  if (_this.element) {
17498
17536
  _this.element.value = _this.getTextValue();
17499
- if (_this.autoGrow) {
17500
- increaseHeightByContent(_this.element);
17501
- }
17537
+ _this.updateElement();
17502
17538
  }
17503
17539
  };
17504
17540
  this.question.registerFunctionOnPropertyValueChanged(this.options.propertyName, this.onPropertyChangedCallback, "__textarea");
17505
17541
  }
17542
+ TextAreaModel.prototype.updateElement = function () {
17543
+ var _this = this;
17544
+ if (this.element && this.autoGrow) {
17545
+ setTimeout(function () { return increaseHeightByContent(_this.element); }, 1);
17546
+ }
17547
+ };
17506
17548
  TextAreaModel.prototype.setElement = function (element) {
17507
17549
  if (!!element) {
17508
17550
  this.element = element;
17551
+ this.updateElement();
17509
17552
  }
17510
17553
  };
17511
17554
  TextAreaModel.prototype.getTextValue = function () {
@@ -18775,7 +18818,8 @@ var question_Question = /** @class */ (function (_super) {
18775
18818
  }
18776
18819
  this.checkForResponsiveness(el);
18777
18820
  };
18778
- Question.prototype.afterRenderCore = function (el) {
18821
+ Question.prototype.afterRenderCore = function (element) {
18822
+ _super.prototype.afterRenderCore.call(this, element);
18779
18823
  };
18780
18824
  Question.prototype.getCommentElementsId = function () {
18781
18825
  return [this.commentId];
@@ -19110,6 +19154,7 @@ var question_Question = /** @class */ (function (_super) {
19110
19154
  * @param onError Pass `true` if you want to focus an input field with the first validation error. Default value: `false` (focuses the first input field). Applies to question types with multiple input fields.
19111
19155
  */
19112
19156
  Question.prototype.focus = function (onError, scrollIfVisible) {
19157
+ var _this = this;
19113
19158
  if (onError === void 0) { onError = false; }
19114
19159
  if (this.isDesignMode || !this.isVisible || !this.survey)
19115
19160
  return;
@@ -19119,16 +19164,17 @@ var question_Question = /** @class */ (function (_super) {
19119
19164
  this.survey.focusQuestionByInstance(this, onError);
19120
19165
  }
19121
19166
  else {
19122
- this.focuscore(onError, scrollIfVisible);
19123
- }
19124
- };
19125
- Question.prototype.focuscore = function (onError, scrollIfVisible) {
19126
- if (onError === void 0) { onError = false; }
19127
- if (!!this.survey) {
19128
- this.expandAllParents();
19129
- this.survey.scrollElementToTop(this, this, null, this.id, scrollIfVisible);
19167
+ if (!!this.survey) {
19168
+ this.expandAllParents();
19169
+ var scrollOptions = this.survey["isSmoothScrollEnabled"] ? { behavior: "smooth" } : undefined;
19170
+ this.survey.scrollElementToTop(this, this, null, this.id, scrollIfVisible, scrollOptions, undefined, function () {
19171
+ _this.focusInputElement(onError);
19172
+ });
19173
+ }
19174
+ else {
19175
+ this.focusInputElement(onError);
19176
+ }
19130
19177
  }
19131
- this.focusInputElement(onError);
19132
19178
  };
19133
19179
  Question.prototype.focusInputElement = function (onError) {
19134
19180
  var id = !onError ? this.getFirstInputElementId() : this.getFirstErrorInputElementId();
@@ -20655,9 +20701,12 @@ var question_Question = /** @class */ (function (_super) {
20655
20701
  if (this.isValueEmpty(value) && helpers_Helpers.isNumber(this[propName])) {
20656
20702
  value = 0;
20657
20703
  }
20658
- this[propName] = value;
20704
+ this.updateBindingProp(propName, value);
20659
20705
  }
20660
20706
  };
20707
+ Question.prototype.updateBindingProp = function (propName, value) {
20708
+ this[propName] = value;
20709
+ };
20661
20710
  Question.prototype.getComponentName = function () {
20662
20711
  return RendererFactory.Instance.getRendererByQuestion(this);
20663
20712
  };
@@ -27759,7 +27808,7 @@ var MatrixDropdownRowTextProcessor = /** @class */ (function (_super) {
27759
27808
  textValue.value = this.row.rowIndex;
27760
27809
  return true;
27761
27810
  }
27762
- if (textValue.name == question_matrixdropdownbase_MatrixDropdownRowModelBase.RowValueVariableName) {
27811
+ if ([question_matrixdropdownbase_MatrixDropdownRowModelBase.RowValueVariableName, question_matrixdropdownbase_MatrixDropdownRowModelBase.RowNameVariableName].indexOf(textValue.name) > -1) {
27763
27812
  textValue.isExists = true;
27764
27813
  textValue.value = this.row.rowName;
27765
27814
  return true;
@@ -27993,11 +28042,12 @@ var question_matrixdropdownbase_MatrixDropdownRowModelBase = /** @class */ (func
27993
28042
  MatrixDropdownRowModelBase.prototype.applyRowVariablesToValues = function (res, rowIndex) {
27994
28043
  res[MatrixDropdownRowModelBase.IndexVariableName] = rowIndex;
27995
28044
  res[MatrixDropdownRowModelBase.RowValueVariableName] = this.rowName;
28045
+ res[MatrixDropdownRowModelBase.RowNameVariableName] = this.rowName;
27996
28046
  };
27997
28047
  MatrixDropdownRowModelBase.prototype.runCondition = function (values, properties, rowsVisibleIf) {
27998
- if (!!this.data) {
27999
- values[MatrixDropdownRowModelBase.OwnerVariableName] = this.data.getFilteredData();
28000
- }
28048
+ if (!this.data)
28049
+ return;
28050
+ values[MatrixDropdownRowModelBase.OwnerVariableName] = this.data.getFilteredData();
28001
28051
  var rowIndex = this.rowIndex;
28002
28052
  this.applyRowVariablesToValues(values, rowIndex);
28003
28053
  var newProps = helpers_Helpers.createCopy(properties);
@@ -28408,11 +28458,14 @@ var question_matrixdropdownbase_MatrixDropdownRowModelBase = /** @class */ (func
28408
28458
  };
28409
28459
  Object.defineProperty(MatrixDropdownRowModelBase.prototype, "rowIndex", {
28410
28460
  get: function () {
28411
- return !!this.data ? this.data.getRowIndex(this) + 1 : -1;
28461
+ return this.getRowIndex();
28412
28462
  },
28413
28463
  enumerable: false,
28414
28464
  configurable: true
28415
28465
  });
28466
+ MatrixDropdownRowModelBase.prototype.getRowIndex = function () {
28467
+ return !!this.data ? this.data.getRowIndex(this) + 1 : -1;
28468
+ };
28416
28469
  Object.defineProperty(MatrixDropdownRowModelBase.prototype, "editingObj", {
28417
28470
  get: function () {
28418
28471
  return this.editingObjValue;
@@ -28450,6 +28503,7 @@ var question_matrixdropdownbase_MatrixDropdownRowModelBase = /** @class */ (func
28450
28503
  MatrixDropdownRowModelBase.OwnerVariableName = "self";
28451
28504
  MatrixDropdownRowModelBase.IndexVariableName = "rowIndex";
28452
28505
  MatrixDropdownRowModelBase.RowValueVariableName = "rowValue";
28506
+ MatrixDropdownRowModelBase.RowNameVariableName = "rowName";
28453
28507
  MatrixDropdownRowModelBase.idCounter = 1;
28454
28508
  return MatrixDropdownRowModelBase;
28455
28509
  }());
@@ -29113,9 +29167,9 @@ var question_matrixdropdownbase_QuestionMatrixDropdownModelBase = /** @class */
29113
29167
  return !!question ? question.getConditionJson(operator) : null;
29114
29168
  };
29115
29169
  QuestionMatrixDropdownModelBase.prototype.clearIncorrectValues = function () {
29116
- var rows = this.visibleRows;
29117
- if (!rows)
29170
+ if (!Array.isArray(this.visibleRows))
29118
29171
  return;
29172
+ var rows = this.generatedVisibleRows;
29119
29173
  for (var i = 0; i < rows.length; i++) {
29120
29174
  rows[i].clearIncorrectValues(this.getRowValue(i));
29121
29175
  }
@@ -29520,13 +29574,13 @@ var question_matrixdropdownbase_QuestionMatrixDropdownModelBase = /** @class */
29520
29574
  * @see setRowValue
29521
29575
  */
29522
29576
  QuestionMatrixDropdownModelBase.prototype.getRowValue = function (rowIndex) {
29523
- if (rowIndex < 0)
29577
+ if (rowIndex < 0 || !Array.isArray(this.visibleRows))
29524
29578
  return null;
29525
- var visRows = this.visibleRows;
29526
- if (rowIndex >= visRows.length)
29579
+ var rows = this.generatedVisibleRows;
29580
+ if (rowIndex >= rows.length)
29527
29581
  return null;
29528
29582
  var newValue = this.createNewValue();
29529
- return this.getRowValueCore(visRows[rowIndex], newValue);
29583
+ return this.getRowValueCore(rows[rowIndex], newValue);
29530
29584
  };
29531
29585
  QuestionMatrixDropdownModelBase.prototype.checkIfValueInRowDuplicated = function (checkedRow, cellQuestion) {
29532
29586
  if (!this.generatedVisibleRows)
@@ -30095,7 +30149,14 @@ var question_matrixdropdownbase_QuestionMatrixDropdownModelBase = /** @class */
30095
30149
  });
30096
30150
  Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "hasInvisibleRows", {
30097
30151
  get: function () {
30098
- return !!this.visibleRowsArray && this.visibleRowsArray.length !== this.generatedVisibleRows.length;
30152
+ var rows = this.generatedVisibleRows;
30153
+ if (!Array.isArray(rows))
30154
+ return false;
30155
+ for (var i = 0; i < rows.length; i++) {
30156
+ if (!rows[i].isVisible)
30157
+ return true;
30158
+ }
30159
+ return false;
30099
30160
  },
30100
30161
  enumerable: false,
30101
30162
  configurable: true
@@ -30171,9 +30232,9 @@ var question_matrixdropdownbase_QuestionMatrixDropdownModelBase = /** @class */
30171
30232
  return { value: newValue, rowValue: rowValue };
30172
30233
  };
30173
30234
  QuestionMatrixDropdownModelBase.prototype.getRowIndex = function (row) {
30174
- if (!this.generatedVisibleRows)
30235
+ if (!Array.isArray(this.generatedVisibleRows))
30175
30236
  return -1;
30176
- return this.visibleRows.indexOf(row);
30237
+ return this.generatedVisibleRows.indexOf(row);
30177
30238
  };
30178
30239
  QuestionMatrixDropdownModelBase.prototype.getElementsInDesign = function (includeHidden) {
30179
30240
  if (includeHidden === void 0) { includeHidden = false; }
@@ -30306,7 +30367,7 @@ var question_matrixdropdownbase_QuestionMatrixDropdownModelBase = /** @class */
30306
30367
  };
30307
30368
  QuestionMatrixDropdownModelBase.prototype.clearInvisibleValuesInRows = function () {
30308
30369
  var _a;
30309
- if (this.isEmpty() || !this.isRowsFiltered)
30370
+ if (this.isEmpty() || !this.isRowsFiltered())
30310
30371
  return;
30311
30372
  var sharedQuestions = ((_a = this.survey) === null || _a === void 0 ? void 0 : _a.questionsByValueName(this.getValueName())) || [];
30312
30373
  if (sharedQuestions.length < 2) {
@@ -30571,17 +30632,17 @@ var question_matrixdropdown_QuestionMatrixDropdownModel = /** @class */ (functio
30571
30632
  if (!rows)
30572
30633
  return res;
30573
30634
  for (var i = 0; i < rows.length; i++) {
30574
- var rowValue = rows[i].rowName;
30575
- var val = value[rowValue];
30635
+ var rowName = rows[i].rowName;
30636
+ var val = value[rowName];
30576
30637
  if (!val)
30577
30638
  continue;
30578
30639
  if (keysAsText) {
30579
- var displayRowValue = itemvalue_ItemValue.getTextOrHtmlByValue(this.rows, rowValue);
30640
+ var displayRowValue = itemvalue_ItemValue.getTextOrHtmlByValue(this.rows, rowName);
30580
30641
  if (!!displayRowValue) {
30581
- rowValue = displayRowValue;
30642
+ rowName = displayRowValue;
30582
30643
  }
30583
30644
  }
30584
- res[rowValue] = this.getRowDisplayValue(keysAsText, rows[i], val);
30645
+ res[rowName] = this.getRowDisplayValue(keysAsText, rows[i], val);
30585
30646
  }
30586
30647
  return res;
30587
30648
  };
@@ -30636,11 +30697,11 @@ var question_matrixdropdown_QuestionMatrixDropdownModel = /** @class */ (functio
30636
30697
  }
30637
30698
  _super.prototype.clearGeneratedRows.call(this);
30638
30699
  };
30639
- QuestionMatrixDropdownModel.prototype.getRowValueForCreation = function (val, rowValue) {
30640
- var res = val[rowValue];
30700
+ QuestionMatrixDropdownModel.prototype.getRowValueForCreation = function (val, rowName) {
30701
+ var res = val[rowName];
30641
30702
  if (!res)
30642
30703
  return res;
30643
- var names = this.defaultValuesInRows[rowValue];
30704
+ var names = this.defaultValuesInRows[rowName];
30644
30705
  if (!Array.isArray(names) || names.length === 0)
30645
30706
  return res;
30646
30707
  names.forEach(function (name) {
@@ -30687,8 +30748,8 @@ var question_matrixdropdown_QuestionMatrixDropdownModel = /** @class */ (functio
30687
30748
  val = {};
30688
30749
  for (var i = 0; i < this.rows.length; i++) {
30689
30750
  var row = this.rows[i];
30690
- var rowValue = val[row.value];
30691
- this.updateProgressInfoByRow(res, !!rowValue ? rowValue : {});
30751
+ var rowName = val[row.value];
30752
+ this.updateProgressInfoByRow(res, !!rowName ? rowName : {});
30692
30753
  }
30693
30754
  };
30694
30755
  return QuestionMatrixDropdownModel;
@@ -31522,6 +31583,10 @@ var MatrixDynamicRowModel = /** @class */ (function (_super) {
31522
31583
  _this.buildCells(value);
31523
31584
  return _this;
31524
31585
  }
31586
+ MatrixDynamicRowModel.prototype.getRowIndex = function () {
31587
+ var res = _super.prototype.getRowIndex.call(this);
31588
+ return res > 0 ? res : this.index + 1;
31589
+ };
31525
31590
  Object.defineProperty(MatrixDynamicRowModel.prototype, "rowName", {
31526
31591
  get: function () {
31527
31592
  return this.id;
@@ -31586,10 +31651,10 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
31586
31651
  };
31587
31652
  _this.createLocalizableString("removeRowText", _this, false, "removeRow");
31588
31653
  _this.createLocalizableString("emptyRowsText", _this, false, true);
31589
- _this.registerPropertyChangedHandlers(["hideColumnsIfEmpty", "allowAddRows"], function () {
31590
- _this.updateShowTableAndAddRow();
31591
- });
31654
+ _this.registerPropertyChangedHandlers(["hideColumnsIfEmpty", "allowAddRows"], function () { _this.updateShowTableAndAddRow(); });
31592
31655
  _this.registerPropertyChangedHandlers(["allowRowsDragAndDrop", "isReadOnly", "lockedRowCount"], function () { _this.resetRenderedTable(); });
31656
+ _this.registerPropertyChangedHandlers(["minRowCount"], function () { _this.onMinRowCountChanged(); });
31657
+ _this.registerPropertyChangedHandlers(["maxRowCount"], function () { _this.onMaxRowCountChanged(); });
31593
31658
  _this.dragOrClickHelper = new dragOrClickHelper_DragOrClickHelper(_this.startDragMatrixRow);
31594
31659
  return _this;
31595
31660
  }
@@ -31697,7 +31762,7 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
31697
31762
  return (_super.prototype.isDefaultValueEmpty.call(this) && this.isValueEmpty(this.defaultRowValue));
31698
31763
  };
31699
31764
  QuestionMatrixDynamicModel.prototype.valueFromData = function (val) {
31700
- if (this.minRowCount < 1)
31765
+ if (this.minRowCount < 1 || this.isEmpty())
31701
31766
  return _super.prototype.valueFromData.call(this, val);
31702
31767
  if (!Array.isArray(val))
31703
31768
  val = [];
@@ -31751,6 +31816,7 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
31751
31816
  return this.rowCountValue;
31752
31817
  },
31753
31818
  set: function (val) {
31819
+ val = helpers_Helpers.getNumber(val);
31754
31820
  if (val < 0 || val > settings.matrix.maxRowCount)
31755
31821
  return;
31756
31822
  this.setRowCountValueFromData = false;
@@ -31783,6 +31849,23 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
31783
31849
  enumerable: false,
31784
31850
  configurable: true
31785
31851
  });
31852
+ QuestionMatrixDynamicModel.prototype.updateBindingProp = function (propName, value) {
31853
+ _super.prototype.updateBindingProp.call(this, propName, value);
31854
+ var rows = this.generatedVisibleRows;
31855
+ if (propName !== "rowCount" || !Array.isArray(rows))
31856
+ return;
31857
+ var val = this.getUnbindValue(this.value) || [];
31858
+ if (val.length < rows.length) {
31859
+ var hasValue = false;
31860
+ for (var i = val.length; i < rows.length; i++) {
31861
+ hasValue || (hasValue = !rows[i].isEmpty);
31862
+ val.push(rows[i].value || {});
31863
+ }
31864
+ if (hasValue) {
31865
+ this.value = val;
31866
+ }
31867
+ }
31868
+ };
31786
31869
  QuestionMatrixDynamicModel.prototype.updateProgressInfoByValues = function (res) {
31787
31870
  var val = this.value;
31788
31871
  if (!Array.isArray(val))
@@ -31867,14 +31950,19 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
31867
31950
  if (val < 0)
31868
31951
  val = 0;
31869
31952
  this.setPropertyValue("minRowCount", val);
31870
- if (val > this.maxRowCount)
31871
- this.maxRowCount = val;
31872
- if (this.rowCount < val)
31873
- this.rowCount = val;
31874
31953
  },
31875
31954
  enumerable: false,
31876
31955
  configurable: true
31877
31956
  });
31957
+ QuestionMatrixDynamicModel.prototype.onMinRowCountChanged = function () {
31958
+ var val = this.minRowCount;
31959
+ if (val > this.maxRowCount)
31960
+ this.maxRowCount = val;
31961
+ if (this.initialRowCount < val)
31962
+ this.initialRowCount = val;
31963
+ if (this.rowCount < val)
31964
+ this.rowCount = val;
31965
+ };
31878
31966
  Object.defineProperty(QuestionMatrixDynamicModel.prototype, "maxRowCount", {
31879
31967
  /**
31880
31968
  * A maximum number of rows in the matrix. Users cannot add new rows if `rowCount` equals `maxRowCount`.
@@ -31895,14 +31983,17 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
31895
31983
  if (val == this.maxRowCount)
31896
31984
  return;
31897
31985
  this.setPropertyValue("maxRowCount", val);
31898
- if (val < this.minRowCount)
31899
- this.minRowCount = val;
31900
- if (this.rowCount > val)
31901
- this.rowCount = val;
31902
31986
  },
31903
31987
  enumerable: false,
31904
31988
  configurable: true
31905
31989
  });
31990
+ QuestionMatrixDynamicModel.prototype.onMaxRowCountChanged = function () {
31991
+ var val = this.maxRowCount;
31992
+ if (val < this.minRowCount)
31993
+ this.minRowCount = val;
31994
+ if (this.rowCount > val)
31995
+ this.rowCount = val;
31996
+ };
31906
31997
  Object.defineProperty(QuestionMatrixDynamicModel.prototype, "allowAddRows", {
31907
31998
  /**
31908
31999
  * Specifies whether users are allowed to add new rows.
@@ -31997,6 +32088,8 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
31997
32088
  this.addRow(true);
31998
32089
  };
31999
32090
  QuestionMatrixDynamicModel.prototype.getQuestionToFocusOnAddingRow = function () {
32091
+ if (this.visibleRows.length === 0)
32092
+ return null;
32000
32093
  var row = this.visibleRows[this.visibleRows.length - 1];
32001
32094
  for (var i = 0; i < row.cells.length; i++) {
32002
32095
  var q = row.cells[i].question;
@@ -32074,8 +32167,9 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
32074
32167
  }
32075
32168
  if (this.data) {
32076
32169
  this.runCellsCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());
32077
- if (this.isValueEmpty(defaultValue)) {
32078
- var row = this.visibleRows[this.rowCount - 1];
32170
+ var rows = this.visibleRows;
32171
+ if (this.isValueEmpty(defaultValue) && rows.length > 0) {
32172
+ var row = rows[rows.length - 1];
32079
32173
  if (!this.isValueEmpty(row.value)) {
32080
32174
  if (!newValue) {
32081
32175
  newValue = this.createNewValue();
@@ -32089,8 +32183,10 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
32089
32183
  }
32090
32184
  }
32091
32185
  if (this.survey) {
32092
- if (prevRowCount + 1 == this.rowCount) {
32093
- this.survey.matrixRowAdded(this, this.visibleRows[this.visibleRows.length - 1]);
32186
+ var rows = this.visibleRows;
32187
+ if (prevRowCount + 1 == this.rowCount && rows.length > 0) {
32188
+ var row = rows[rows.length - 1];
32189
+ this.survey.matrixRowAdded(this, row);
32094
32190
  this.onRowsChanged();
32095
32191
  }
32096
32192
  }
@@ -32524,6 +32620,8 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
32524
32620
  return result;
32525
32621
  };
32526
32622
  QuestionMatrixDynamicModel.prototype.deleteRowValue = function (newValue, row) {
32623
+ if (!Array.isArray(newValue))
32624
+ return newValue;
32527
32625
  var isEmpty = true;
32528
32626
  for (var i = 0; i < newValue.length; i++) {
32529
32627
  if (this.isObject(newValue[i]) && Object.keys(newValue[i]).length > 0) {
@@ -33365,6 +33463,7 @@ var defaultV2Css = {
33365
33463
  changeCameraButton: "sd-file__change-camera-button",
33366
33464
  takePictureButton: "sd-file__take-picture-button",
33367
33465
  loadingIndicator: "sd-file__loading-indicator",
33466
+ page: "sd-file__page"
33368
33467
  },
33369
33468
  signaturepad: {
33370
33469
  mainRoot: "sd-element sd-question sd-question--signature sd-row__question",
@@ -33695,7 +33794,8 @@ var surveytimer_SurveyTimer = /** @class */ (function () {
33695
33794
  function SurveyTimer() {
33696
33795
  this.listenerCounter = 0;
33697
33796
  this.timerId = -1;
33698
- this.onTimer = new EventBase();
33797
+ this.onTimerTick = new EventBase();
33798
+ this.onTimer = this.onTimerTick;
33699
33799
  }
33700
33800
  Object.defineProperty(SurveyTimer, "instance", {
33701
33801
  get: function () {
@@ -33711,7 +33811,7 @@ var surveytimer_SurveyTimer = /** @class */ (function () {
33711
33811
  var _this = this;
33712
33812
  if (func === void 0) { func = null; }
33713
33813
  if (func) {
33714
- this.onTimer.add(func);
33814
+ this.onTimerTick.add(func);
33715
33815
  }
33716
33816
  this.prevTimeInMs = surveyTimerFunctions.now();
33717
33817
  if (this.timerId < 0) {
@@ -33724,7 +33824,7 @@ var surveytimer_SurveyTimer = /** @class */ (function () {
33724
33824
  SurveyTimer.prototype.stop = function (func) {
33725
33825
  if (func === void 0) { func = null; }
33726
33826
  if (func) {
33727
- this.onTimer.remove(func);
33827
+ this.onTimerTick.remove(func);
33728
33828
  }
33729
33829
  this.listenerCounter--;
33730
33830
  if (this.listenerCounter == 0 && this.timerId > -1) {
@@ -33734,7 +33834,7 @@ var surveytimer_SurveyTimer = /** @class */ (function () {
33734
33834
  };
33735
33835
  SurveyTimer.prototype.doTimer = function () {
33736
33836
  var _this = this;
33737
- if (this.onTimer.isEmpty || this.listenerCounter == 0) {
33837
+ if (this.onTimerTick.isEmpty || this.listenerCounter == 0) {
33738
33838
  this.timerId = -1;
33739
33839
  }
33740
33840
  if (this.timerId < 0)
@@ -33746,7 +33846,7 @@ var surveytimer_SurveyTimer = /** @class */ (function () {
33746
33846
  seconds = 1;
33747
33847
  }
33748
33848
  var prevItem = this.timerId;
33749
- this.onTimer.fire(this, { seconds: seconds });
33849
+ this.onTimerTick.fire(this, { seconds: seconds });
33750
33850
  //We have to check that we have the same timerId
33751
33851
  //It could be changed during events execution and it will lead to double timer events
33752
33852
  if (prevItem !== this.timerId)
@@ -33846,8 +33946,8 @@ var surveyTimerModel_SurveyTimerModel = /** @class */ (function (_super) {
33846
33946
  }
33847
33947
  this.spent = this.spent + seconds;
33848
33948
  this.update();
33849
- if (this.onTimer) {
33850
- this.onTimer(page);
33949
+ if (this.onTimerTick) {
33950
+ this.onTimerTick(page);
33851
33951
  }
33852
33952
  };
33853
33953
  SurveyTimerModel.prototype.updateProgress = function () {
@@ -34238,7 +34338,7 @@ var header_Cover = /** @class */ (function (_super) {
34238
34338
  return this.height ? Math.max(this.height, this.actualHeight + 40) + "px" : undefined;
34239
34339
  }
34240
34340
  if (this.survey && this.survey.isMobile) {
34241
- return this.mobileHeight ? Math.max(this.mobileHeight, this.actualHeight + 40) + "px" : undefined;
34341
+ return this.mobileHeight ? Math.max(this.mobileHeight, this.actualHeight) + "px" : undefined;
34242
34342
  }
34243
34343
  return undefined;
34244
34344
  },
@@ -34319,13 +34419,19 @@ var header_Cover = /** @class */ (function (_super) {
34319
34419
  };
34320
34420
  Cover.prototype.processResponsiveness = function (width) {
34321
34421
  if (this.survey && this.survey.rootElement) {
34322
- var logoEl = this.survey.rootElement.querySelectorAll(".sv-header__logo")[0];
34323
- var titleEl = this.survey.rootElement.querySelectorAll(".sv-header__title")[0];
34324
- var descriptionEl = this.survey.rootElement.querySelectorAll(".sv-header__description")[0];
34325
- var logoHeight = logoEl ? logoEl.getBoundingClientRect().height : 0;
34326
- var titleHeight = titleEl ? titleEl.getBoundingClientRect().height : 0;
34327
- var descriptionHeight = descriptionEl ? descriptionEl.getBoundingClientRect().height : 0;
34328
- this.actualHeight = this.calculateActualHeight(logoHeight, titleHeight, descriptionHeight);
34422
+ if (!this.survey.isMobile) {
34423
+ var logoEl = this.survey.rootElement.querySelectorAll(".sv-header__logo")[0];
34424
+ var titleEl = this.survey.rootElement.querySelectorAll(".sv-header__title")[0];
34425
+ var descriptionEl = this.survey.rootElement.querySelectorAll(".sv-header__description")[0];
34426
+ var logoHeight = logoEl ? logoEl.getBoundingClientRect().height : 0;
34427
+ var titleHeight = titleEl ? titleEl.getBoundingClientRect().height : 0;
34428
+ var descriptionHeight = descriptionEl ? descriptionEl.getBoundingClientRect().height : 0;
34429
+ this.actualHeight = this.calculateActualHeight(logoHeight, titleHeight, descriptionHeight);
34430
+ }
34431
+ else {
34432
+ var headerContainer = this.survey.rootElement.querySelectorAll(".sv-header > div")[0];
34433
+ this.actualHeight = headerContainer ? headerContainer.getBoundingClientRect().height : 0;
34434
+ }
34329
34435
  }
34330
34436
  };
34331
34437
  Object.defineProperty(Cover.prototype, "hasBackground", {
@@ -35598,7 +35704,7 @@ var panel_PanelModelBase = /** @class */ (function (_super) {
35598
35704
  PanelModelBase.prototype.getValue = function () {
35599
35705
  var data = {};
35600
35706
  this.collectValues(data, 0);
35601
- return data;
35707
+ return helpers_Helpers.getUnbindValue(data);
35602
35708
  };
35603
35709
  PanelModelBase.prototype.collectValues = function (data, level) {
35604
35710
  var elements = this.elements;
@@ -36995,6 +37101,9 @@ var panel_PanelModelBase = /** @class */ (function (_super) {
36995
37101
  }
36996
37102
  return this.layoutColumns.slice(0, tailIndex + 1);
36997
37103
  };
37104
+ PanelModelBase.prototype.afterRender = function (el) {
37105
+ this.afterRenderCore(el);
37106
+ };
36998
37107
  PanelModelBase.prototype.dispose = function () {
36999
37108
  _super.prototype.dispose.call(this);
37000
37109
  if (this.rows) {
@@ -37467,6 +37576,11 @@ var panel_PanelModel = /** @class */ (function (_super) {
37467
37576
  PanelModel.prototype.getContainerCss = function () {
37468
37577
  return this.getCssRoot(this.cssClasses.panel);
37469
37578
  };
37579
+ PanelModel.prototype.afterRenderCore = function (element) {
37580
+ var _a;
37581
+ _super.prototype.afterRenderCore.call(this, element);
37582
+ (_a = this.survey) === null || _a === void 0 ? void 0 : _a.afterRenderPanel(this, element);
37583
+ };
37470
37584
  return PanelModel;
37471
37585
  }(panel_PanelModelBase));
37472
37586
 
@@ -37820,7 +37934,7 @@ var page_PageModel = /** @class */ (function (_super) {
37820
37934
  _this.hasShownValue = false;
37821
37935
  /**
37822
37936
  * A time period that a respondent has spent on this page so far; measured in seconds. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).
37823
- * @see maxTimeToFinish
37937
+ * @see timeLimit
37824
37938
  */
37825
37939
  _this.timeSpent = 0;
37826
37940
  _this.createLocalizableString("navigationDescription", _this, true);
@@ -38107,12 +38221,6 @@ var page_PageModel = /** @class */ (function (_super) {
38107
38221
  this.survey.scrollElementToTop(this, null, this, this.id);
38108
38222
  }
38109
38223
  };
38110
- // public get timeSpent(): number {
38111
- // return this.getPropertyValue("timeSpent", 0);
38112
- // }
38113
- // public set timeSpent(val: number) {
38114
- // this.setPropertyValue("timeSpent", val);
38115
- // }
38116
38224
  /**
38117
38225
  * Returns a list of all panels on this page.
38118
38226
  * @param visibleOnly A Boolean value that specifies whether to include only visible panels.
@@ -38130,28 +38238,42 @@ var page_PageModel = /** @class */ (function (_super) {
38130
38238
  if (includingDesignTime === void 0) { includingDesignTime = false; }
38131
38239
  return this.getAllPanels(visibleOnly, includingDesignTime);
38132
38240
  };
38133
- Object.defineProperty(PageModel.prototype, "maxTimeToFinish", {
38241
+ Object.defineProperty(PageModel.prototype, "timeLimit", {
38134
38242
  /**
38135
38243
  * A time period that a respondent has to complete this page; measured in seconds. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).
38136
38244
  *
38137
- * A negative value or 0 sets an unlimited time period.
38245
+ * Default value: 0 (time is unlimited)
38138
38246
  *
38139
- * Alternatively, you can use the `SurveyModel`'s [`maxTimeToFinishPage`](https://surveyjs.io/form-library/documentation/surveymodel#maxTimeToFinishPage) property to specify identical time periods for all survey pages.
38247
+ * Alternatively, you can use the `SurveyModel`'s [`timeLimitPerPage`](https://surveyjs.io/form-library/documentation/surveymodel#timeLimitPerPage) property to specify identical time periods for all survey pages.
38140
38248
  * @see timeSpent
38141
38249
  */
38142
38250
  get: function () {
38143
- return this.getPropertyValue("maxTimeToFinish", 0);
38251
+ return this.getPropertyValue("timeLimit", 0);
38252
+ },
38253
+ set: function (val) {
38254
+ this.setPropertyValue("timeLimit", val);
38255
+ },
38256
+ enumerable: false,
38257
+ configurable: true
38258
+ });
38259
+ Object.defineProperty(PageModel.prototype, "maxTimeToFinish", {
38260
+ /**
38261
+ * Obsolete. Use the [`timeLimit`](https://surveyjs.io/form-library/documentation/api-reference/page-model#timeLimit) property instead.
38262
+ * @deprecated
38263
+ */
38264
+ get: function () {
38265
+ return this.timeLimit;
38144
38266
  },
38145
38267
  set: function (val) {
38146
- this.setPropertyValue("maxTimeToFinish", val);
38268
+ this.timeLimit = val;
38147
38269
  },
38148
38270
  enumerable: false,
38149
38271
  configurable: true
38150
38272
  });
38151
38273
  PageModel.prototype.getMaxTimeToFinish = function () {
38152
- if (this.maxTimeToFinish !== 0)
38153
- return this.maxTimeToFinish;
38154
- var res = !!this.survey ? this.survey.maxTimeToFinishPage : 0;
38274
+ if (this.timeLimit !== 0)
38275
+ return this.timeLimit;
38276
+ var res = !!this.survey ? this.survey.timeLimitPerPage : 0;
38155
38277
  return res > 0 ? res : 0;
38156
38278
  };
38157
38279
  PageModel.prototype.onNumChanged = function (value) { };
@@ -38193,7 +38315,7 @@ Serializer.addClass("page", [
38193
38315
  default: "inherit",
38194
38316
  choices: ["inherit", "show", "hide"],
38195
38317
  },
38196
- { name: "maxTimeToFinish:number", default: 0, minValue: 0 },
38318
+ { name: "timeLimit:number", alternativeName: "maxTimeToFinish", default: 0, minValue: 0 },
38197
38319
  {
38198
38320
  name: "navigationTitle",
38199
38321
  visibleIf: function (obj) {
@@ -39219,12 +39341,18 @@ var survey_SurveyModel = /** @class */ (function (_super) {
39219
39341
  * An event that is raised every second while the timer is running.
39220
39342
  *
39221
39343
  * Use the [`timeSpent`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#timeSpent) property to find out how many seconds have elapsed.
39222
- * @see maxTimeToFinish
39223
- * @see maxTimeToFinishPage
39224
- * @see showTimerPanel
39344
+ * @see timeLimit
39345
+ * @see timeLimitPerPage
39346
+ * @see showTimer
39347
+ * @see timerLocation
39225
39348
  * @see startTimer
39226
39349
  */
39227
- _this.onTimer = _this.addEvent();
39350
+ _this.onTimerTick = _this.addEvent();
39351
+ /**
39352
+ * Obsolete. Use the [`onTimerTick`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onTimerTick) event instead.
39353
+ * @deprecated
39354
+ */
39355
+ _this.onTimer = _this.onTimerTick;
39228
39356
  _this.onTimerPanelInfoText = _this.addEvent();
39229
39357
  /**
39230
39358
  * An event that is raised after an item value is changed in a panel within a [Dynamic Panel](https://surveyjs.io/form-library/examples/questiontype-paneldynamic/) question.
@@ -39321,6 +39449,18 @@ var survey_SurveyModel = /** @class */ (function (_super) {
39321
39449
  */
39322
39450
  _this.jsonErrors = null;
39323
39451
  _this.cssValue = null;
39452
+ /**
39453
+ * Specifies whether the [Complete page](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#complete-page) should display the [survey header](https://surveyjs.io/form-library/examples/brand-your-survey-header/).
39454
+ *
39455
+ * Possible values:
39456
+ *
39457
+ * - `true` - Displays the survey header on the Complete page.
39458
+ * - `false` - Hides the header when users reach the Complete page.
39459
+ * - `"auto"` (default) - Displays a header with the basic view, but hides a header with the advanced view (see the [`headerView`](https://surveyjs.io/form-library/documentation/api-reference/itheme#headerView) property description).
39460
+ *
39461
+ * > This property cannot be specified in the survey JSON schema. Use dot notation to specify it.
39462
+ */
39463
+ _this.showHeaderOnCompletePage = "auto";
39324
39464
  _this._isLazyRenderingSuspended = false;
39325
39465
  /**
39326
39466
  * Specifies whether to hide validation errors thrown by the Required validation in the UI.
@@ -39352,6 +39492,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
39352
39492
  _this.isNavigationButtonPressed = false;
39353
39493
  _this.mouseDownPage = null;
39354
39494
  _this.isCalculatingProgressText = false;
39495
+ _this.isSmoothScrollEnabled = false;
39355
39496
  /**
39356
39497
  * An event that is raised when the survey's width or height is changed.
39357
39498
  */
@@ -39397,7 +39538,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
39397
39538
  _this.createLocalizableString("editText", _this, false, true);
39398
39539
  _this.createLocalizableString("questionTitleTemplate", _this, true);
39399
39540
  _this.timerModelValue = new surveyTimerModel_SurveyTimerModel(_this);
39400
- _this.timerModelValue.onTimer = function (page) {
39541
+ _this.timerModelValue.onTimerTick = function (page) {
39401
39542
  _this.doTimer(page);
39402
39543
  };
39403
39544
  _this.createNewArray("pages", function (value) {
@@ -39774,7 +39915,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
39774
39915
  Object.defineProperty(SurveyModel.prototype, "bodyCss", {
39775
39916
  get: function () {
39776
39917
  return new CssClassBuilder().append(this.css.body)
39777
- .append(this.css.bodyWithTimer, this.showTimerPanel != "none" && this.state === "running")
39918
+ .append(this.css.bodyWithTimer, this.showTimer && this.state === "running")
39778
39919
  .append(this.css.body + "--" + this.calculatedWidthMode).toString();
39779
39920
  },
39780
39921
  enumerable: false,
@@ -44401,7 +44542,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
44401
44542
  this.onGetMatrixRowActions.fire(this, options);
44402
44543
  return options.actions;
44403
44544
  };
44404
- SurveyModel.prototype.scrollElementToTop = function (element, question, page, id, scrollIfVisible, scrollIntoViewOptions, passedRootElement) {
44545
+ SurveyModel.prototype.scrollElementToTop = function (element, question, page, id, scrollIfVisible, scrollIntoViewOptions, passedRootElement, onScolledCallback) {
44405
44546
  var _this = this;
44406
44547
  var options = {
44407
44548
  element: element,
@@ -44413,7 +44554,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
44413
44554
  this.onScrollingElementToTop.fire(this, options);
44414
44555
  if (!options.cancel) {
44415
44556
  var elementPage_1 = this.getPageByElement(element);
44416
- if (this.isLazyRendering) {
44557
+ if (this.isLazyRendering && !!elementPage_1) {
44417
44558
  var elementsToRenderBefore = 1;
44418
44559
  var rootElement = settings.environment.rootElement;
44419
44560
  var surveyRootElement = this.rootElement || passedRootElement || rootElement;
@@ -44425,11 +44566,12 @@ var survey_SurveyModel = /** @class */ (function (_super) {
44425
44566
  survey_element_SurveyElement.ScrollElementToTop(options.elementId, scrollIfVisible, scrollIntoViewOptions, function () {
44426
44567
  _this.releaseLazyRendering();
44427
44568
  activateLazyRenderingChecks(elementPage_1.id);
44569
+ onScolledCallback && onScolledCallback();
44428
44570
  });
44429
44571
  }, elementsToRenderBefore);
44430
44572
  }
44431
44573
  else {
44432
- survey_element_SurveyElement.ScrollElementToTop(options.elementId, scrollIfVisible, scrollIntoViewOptions);
44574
+ survey_element_SurveyElement.ScrollElementToTop(options.elementId, scrollIfVisible, scrollIntoViewOptions, onScolledCallback);
44433
44575
  }
44434
44576
  }
44435
44577
  };
@@ -46177,64 +46319,117 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46177
46319
  };
46178
46320
  Object.defineProperty(SurveyModel.prototype, "showTimerPanel", {
46179
46321
  /**
46180
- * Displays the timer panel and specifies its position. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).
46322
+ * Obsolete. Use the [`showTimer`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#showTimer) and [`timerLocation`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#timerLocation) properties instead.
46323
+ * @deprecated
46324
+ */
46325
+ get: function () {
46326
+ if (!this.showTimer)
46327
+ return "none";
46328
+ return this.timerLocation;
46329
+ },
46330
+ set: function (val) {
46331
+ this.showTimer = val !== "none";
46332
+ if (this.showTimer) {
46333
+ this.timerLocation = val;
46334
+ }
46335
+ },
46336
+ enumerable: false,
46337
+ configurable: true
46338
+ });
46339
+ Object.defineProperty(SurveyModel.prototype, "showTimer", {
46340
+ /**
46341
+ * Specifies the timer's visibility. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).
46181
46342
  *
46182
- * Possible values:
46343
+ * Default value: `false`
46183
46344
  *
46184
- * - `"top"` - Displays the timer panel at the top of the survey.
46185
- * - `"bottom"` - Displays the timer panel at the bottom of the survey.
46186
- * - `"none"` (default) - Hides the timer panel.
46345
+ * If you set this property to `true`, the timer starts automatically when the survey begins. To specify time limits, use the [`timeLimit`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#timeLimit) and [`timeLimitPerPage`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#timeLimitPerPage) properties.
46187
46346
  *
46188
- * If the timer panel is displayed, the timer starts automatically when the survey begins. To specify time limits, use the [`maxTimeToFinish`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#maxTimeToFinish) and [`maxTimeToFinishPage`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#maxTimeToFinishPage) properties.
46347
+ * The timer displays information about time spent on an individual page and the entire survey. If you want to display only the page timer or the survey timer, set the [`timerInfoMode`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#timerInfoMode) property to `"page"` or `"survey"`.
46189
46348
  *
46190
- * The timer panel displays information about time spent on an individual page and the entire survey. If you want to display only the page timer or the survey timer, set the [`showTimerPanelMode`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#showTimerPanelMode) property to `"page"` or `"survey"`.
46191
- * @see startTimer
46192
- * @see stopTimer
46349
+ * You can enable the timer without displaying it. In this case, you need to specify the required time limits and use the [`startTimer()`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#startTimer) and [`stopTimer()`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#stopTimer) methods to control the timer.
46350
+ * @see timerLocation
46193
46351
  * @see timeSpent
46194
- * @see onTimer
46352
+ * @see onTimerTick
46195
46353
  */
46196
46354
  get: function () {
46197
- return this.getPropertyValue("showTimerPanel");
46355
+ return this.getPropertyValue("showTimer");
46198
46356
  },
46199
46357
  set: function (val) {
46200
- this.setPropertyValue("showTimerPanel", val);
46358
+ this.setPropertyValue("showTimer", val);
46359
+ },
46360
+ enumerable: false,
46361
+ configurable: true
46362
+ });
46363
+ Object.defineProperty(SurveyModel.prototype, "timerLocation", {
46364
+ /**
46365
+ * Specifies the timer's position relative to the survey. Applies only if the [`showTimer`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#showTimer) property is set to `true`.
46366
+ *
46367
+ * Possible values:
46368
+ *
46369
+ * - `"top"` (default) - Displays the timer at the top of the survey.
46370
+ * - `"bottom"` - Displays the timer at the bottom of the survey.
46371
+ * @see onTimerTick
46372
+ */
46373
+ get: function () {
46374
+ return this.getPropertyValue("timerLocation");
46375
+ },
46376
+ set: function (val) {
46377
+ this.setPropertyValue("timerLocation", val);
46201
46378
  },
46202
46379
  enumerable: false,
46203
46380
  configurable: true
46204
46381
  });
46205
46382
  Object.defineProperty(SurveyModel.prototype, "isTimerPanelShowingOnTop", {
46206
46383
  get: function () {
46207
- return this.showTimerPanel == "top";
46384
+ return this.showTimer && this.timerLocation === "top";
46208
46385
  },
46209
46386
  enumerable: false,
46210
46387
  configurable: true
46211
46388
  });
46212
46389
  Object.defineProperty(SurveyModel.prototype, "isTimerPanelShowingOnBottom", {
46213
46390
  get: function () {
46214
- return this.showTimerPanel == "bottom";
46391
+ return this.showTimer && this.timerLocation === "bottom";
46215
46392
  },
46216
46393
  enumerable: false,
46217
46394
  configurable: true
46218
46395
  });
46219
- Object.defineProperty(SurveyModel.prototype, "showTimerPanelMode", {
46396
+ Object.defineProperty(SurveyModel.prototype, "timerInfoMode", {
46220
46397
  /**
46221
- * Specifies whether the timer panel displays timers for the current page, the entire survey, or both. Applies only if the timer panel is [visible](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#showTimerPanel).
46398
+ * Specifies whether the timer panel displays timers for the current page, the entire survey, or both. Applies only if the timer panel is [visible](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#showTimer).
46222
46399
  *
46223
46400
  * Possible values:
46224
46401
  *
46225
46402
  * - `"survey"` - Displays only the survey timer.
46226
46403
  * - `"page"` - Displays only the page timer.
46227
- * - `"all"` (default) - Displays both the survey and page timers.
46404
+ * - `"combined"` (default) - Displays both the survey and page timers.
46228
46405
  * @see timeSpent
46229
- * @see onTimer
46406
+ * @see onTimerTick
46230
46407
  * @see startTimer
46231
46408
  * @see stopTimer
46232
46409
  */
46233
46410
  get: function () {
46234
- return this.getPropertyValue("showTimerPanelMode");
46411
+ return this.getTimerInfoVal(this.getPropertyValue("timerInfoMode"));
46412
+ },
46413
+ set: function (val) {
46414
+ this.setPropertyValue("timerInfoMode", val);
46415
+ },
46416
+ enumerable: false,
46417
+ configurable: true
46418
+ });
46419
+ SurveyModel.prototype.getTimerInfoVal = function (val) {
46420
+ return val === "all" ? "combined" : val;
46421
+ };
46422
+ Object.defineProperty(SurveyModel.prototype, "showTimerPanelMode", {
46423
+ /**
46424
+ * Obsolete. Use the [`timerInfoMode`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#timerInfoMode) property instead.
46425
+ * @deprecated
46426
+ */
46427
+ get: function () {
46428
+ var res = this.timerInfoMode;
46429
+ return res === "combined" ? "all" : res;
46235
46430
  },
46236
46431
  set: function (val) {
46237
- this.setPropertyValue("showTimerPanelMode", val);
46432
+ this.timerInfoMode = this.getTimerInfoVal(val);
46238
46433
  },
46239
46434
  enumerable: false,
46240
46435
  configurable: true
@@ -46353,11 +46548,11 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46353
46548
  var pageSpent = page.timeSpent;
46354
46549
  var surveySpent = this.timeSpent;
46355
46550
  var pageLimitSec = page.getMaxTimeToFinish();
46356
- var surveyLimit = this.maxTimeToFinish;
46357
- if (this.showTimerPanelMode == "page") {
46551
+ var surveyLimit = this.timeLimit;
46552
+ if (this.timerInfoMode == "page") {
46358
46553
  return { spent: pageSpent, limit: pageLimitSec };
46359
46554
  }
46360
- if (this.showTimerPanelMode == "survey") {
46555
+ if (this.timerInfoMode == "survey") {
46361
46556
  return { spent: surveySpent, limit: surveyLimit };
46362
46557
  }
46363
46558
  else {
@@ -46383,16 +46578,16 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46383
46578
  var surveySpent = this.getDisplayTime(this.timeSpent);
46384
46579
  var pageLimitSec = page.getMaxTimeToFinish();
46385
46580
  var pageLimit = this.getDisplayTime(pageLimitSec);
46386
- var surveyLimit = this.getDisplayTime(this.maxTimeToFinish);
46387
- if (this.showTimerPanelMode == "page")
46581
+ var surveyLimit = this.getDisplayTime(this.timeLimit);
46582
+ if (this.timerInfoMode == "page")
46388
46583
  return this.getTimerInfoPageText(page, pageSpent, pageLimit);
46389
- if (this.showTimerPanelMode == "survey")
46584
+ if (this.timerInfoMode == "survey")
46390
46585
  return this.getTimerInfoSurveyText(surveySpent, surveyLimit);
46391
- if (this.showTimerPanelMode == "all") {
46392
- if (pageLimitSec <= 0 && this.maxTimeToFinish <= 0) {
46586
+ if (this.timerInfoMode == "combined") {
46587
+ if (pageLimitSec <= 0 && this.timeLimit <= 0) {
46393
46588
  return this.getLocalizationFormatString("timerSpentAll", pageSpent, surveySpent);
46394
46589
  }
46395
- if (pageLimitSec > 0 && this.maxTimeToFinish > 0) {
46590
+ if (pageLimitSec > 0 && this.timeLimit > 0) {
46396
46591
  return this.getLocalizationFormatString("timerLimitAll", pageSpent, pageLimit, surveySpent, surveyLimit);
46397
46592
  }
46398
46593
  var pageText = this.getTimerInfoPageText(page, pageSpent, pageLimit);
@@ -46407,7 +46602,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46407
46602
  : this.getLocalizationFormatString("timerSpentPage", pageSpent, pageLimit);
46408
46603
  };
46409
46604
  SurveyModel.prototype.getTimerInfoSurveyText = function (surveySpent, surveyLimit) {
46410
- var strName = this.maxTimeToFinish > 0 ? "timerLimitSurvey" : "timerSpentSurvey";
46605
+ var strName = this.timeLimit > 0 ? "timerLimitSurvey" : "timerSpentSurvey";
46411
46606
  return this.getLocalizationFormatString(strName, surveySpent, surveyLimit);
46412
46607
  };
46413
46608
  SurveyModel.prototype.getDisplayClockTime = function (val) {
@@ -46443,10 +46638,10 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46443
46638
  /**
46444
46639
  * Starts a timer that calculates how many seconds a respondent has spent on the survey. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).
46445
46640
  * @see stopTimer
46446
- * @see maxTimeToFinish
46447
- * @see maxTimeToFinishPage
46641
+ * @see timeLimit
46642
+ * @see timeLimitPerPage
46448
46643
  * @see timeSpent
46449
- * @see onTimer
46644
+ * @see onTimerTick
46450
46645
  */
46451
46646
  SurveyModel.prototype.startTimer = function () {
46452
46647
  if (this.isEditMode) {
@@ -46454,17 +46649,17 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46454
46649
  }
46455
46650
  };
46456
46651
  SurveyModel.prototype.startTimerFromUI = function () {
46457
- if (this.showTimerPanel != "none" && this.state === "running") {
46652
+ if (this.showTimer && this.state === "running") {
46458
46653
  this.startTimer();
46459
46654
  }
46460
46655
  };
46461
46656
  /**
46462
46657
  * Stops the timer. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).
46463
46658
  * @see startTimer
46464
- * @see maxTimeToFinish
46465
- * @see maxTimeToFinishPage
46659
+ * @see timeLimit
46660
+ * @see timeLimitPerPage
46466
46661
  * @see timeSpent
46467
- * @see onTimer
46662
+ * @see onTimerTick
46468
46663
  */
46469
46664
  SurveyModel.prototype.stopTimer = function () {
46470
46665
  this.timerModel.stop();
@@ -46476,8 +46671,8 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46476
46671
  * Assign a number to this property if you need to start the quiz timer from a specific time (for instance, if you want to continue an interrupted quiz).
46477
46672
  *
46478
46673
  * You can also find out how many seconds a respondent has spent on an individual survey page. To do this, use the [`timeSpent`](https://surveyjs.io/form-library/documentation/api-reference/page-model#timeSpent) property of a [`PageModel`](https://surveyjs.io/form-library/documentation/api-reference/page-model) object.
46479
- * @see maxTimeToFinish
46480
- * @see maxTimeToFinishPage
46674
+ * @see timeLimit
46675
+ * @see timeLimitPerPage
46481
46676
  * @see startTimer
46482
46677
  */
46483
46678
  get: function () { return this.timerModel.spent; },
@@ -46485,52 +46680,80 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46485
46680
  enumerable: false,
46486
46681
  configurable: true
46487
46682
  });
46488
- Object.defineProperty(SurveyModel.prototype, "maxTimeToFinish", {
46683
+ Object.defineProperty(SurveyModel.prototype, "timeLimit", {
46489
46684
  /**
46490
46685
  * A time period that a respondent has to complete the survey; measured in seconds. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).
46491
46686
  *
46492
- * A negative value or 0 sets an unlimited time period.
46687
+ * Default value: 0 (time is unlimited)
46493
46688
  *
46494
46689
  * [View Demo](https://surveyjs.io/form-library/examples/make-quiz-javascript/ (linkStyle))
46495
- * @see maxTimeToFinishPage
46690
+ * @see timeLimitPerPage
46496
46691
  * @see startTimer
46497
46692
  * @see timeSpent
46498
46693
  */
46499
46694
  get: function () {
46500
- return this.getPropertyValue("maxTimeToFinish", 0);
46695
+ return this.getPropertyValue("timeLimit", 0);
46501
46696
  },
46502
46697
  set: function (val) {
46503
- this.setPropertyValue("maxTimeToFinish", val);
46698
+ this.setPropertyValue("timeLimit", val);
46504
46699
  },
46505
46700
  enumerable: false,
46506
46701
  configurable: true
46507
46702
  });
46508
- Object.defineProperty(SurveyModel.prototype, "maxTimeToFinishPage", {
46703
+ Object.defineProperty(SurveyModel.prototype, "maxTimeToFinish", {
46704
+ /**
46705
+ * Obsolete. Use the [`timeLimit`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#timeLimit) property instead.
46706
+ * @deprecated
46707
+ */
46708
+ get: function () {
46709
+ return this.timeLimit;
46710
+ },
46711
+ set: function (val) {
46712
+ this.timeLimit = val;
46713
+ },
46714
+ enumerable: false,
46715
+ configurable: true
46716
+ });
46717
+ Object.defineProperty(SurveyModel.prototype, "timeLimitPerPage", {
46509
46718
  /**
46510
46719
  * A time period that a respondent has to complete each survey page; measured in seconds. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).
46511
46720
  *
46512
- * A negative value or 0 sets an unlimited time period.
46721
+ * Default value: 0 (time is unlimited)
46513
46722
  *
46514
- * You can also use `PageModel`'s [`maxTimeToFinish`](https://surveyjs.io/form-library/documentation/api-reference/page-model#maxTimeToFinish) property to specify a time period for an individual survey page.
46723
+ * You can also use `PageModel`'s [`timeLimit`](https://surveyjs.io/form-library/documentation/api-reference/page-model#timeLimit) property to specify a time period for an individual survey page.
46515
46724
  *
46516
46725
  * [View Demo](https://surveyjs.io/form-library/examples/make-quiz-javascript/ (linkStyle))
46517
- * @see maxTimeToFinish
46726
+ * @see timeLimit
46518
46727
  * @see startTimer
46519
46728
  * @see timeSpent
46520
46729
  */
46521
46730
  get: function () {
46522
- return this.getPropertyValue("maxTimeToFinishPage", 0);
46731
+ return this.getPropertyValue("timeLimitPerPage", 0);
46523
46732
  },
46524
46733
  set: function (val) {
46525
- this.setPropertyValue("maxTimeToFinishPage", val);
46734
+ this.setPropertyValue("timeLimitPerPage", val);
46735
+ },
46736
+ enumerable: false,
46737
+ configurable: true
46738
+ });
46739
+ Object.defineProperty(SurveyModel.prototype, "maxTimeToFinishPage", {
46740
+ /**
46741
+ * Obsolete. Use the [`timeLimitPerPage`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#timeLimitPerPage) property instead.
46742
+ * @deprecated
46743
+ */
46744
+ get: function () {
46745
+ return this.timeLimitPerPage;
46746
+ },
46747
+ set: function (val) {
46748
+ this.timeLimitPerPage = val;
46526
46749
  },
46527
46750
  enumerable: false,
46528
46751
  configurable: true
46529
46752
  });
46530
46753
  SurveyModel.prototype.doTimer = function (page) {
46531
- this.onTimer.fire(this, {});
46532
- if (this.maxTimeToFinish > 0 && this.maxTimeToFinish <= this.timeSpent) {
46533
- this.timeSpent = this.maxTimeToFinish;
46754
+ this.onTimerTick.fire(this, {});
46755
+ if (this.timeLimit > 0 && this.timeLimit <= this.timeSpent) {
46756
+ this.timeSpent = this.timeLimit;
46534
46757
  this.completeLastPage();
46535
46758
  }
46536
46759
  if (page) {
@@ -46838,7 +47061,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46838
47061
  }
46839
47062
  }
46840
47063
  else if (isStrCiEqual(layoutElement.id, "advanced-header")) {
46841
- if ((this.state === "running" || this.state === "starting") && layoutElement.container === container) {
47064
+ if ((this.state === "running" || this.state === "starting" || (this.showHeaderOnCompletePage === true && this.state === "completed")) && layoutElement.container === container) {
46842
47065
  containerLayoutElements.push(layoutElement);
46843
47066
  }
46844
47067
  }
@@ -47362,18 +47585,13 @@ Serializer.addClass("survey", [
47362
47585
  default: "noPreview",
47363
47586
  choices: ["noPreview", "showAllQuestions", "showAnsweredQuestions"],
47364
47587
  },
47365
- { name: "maxTimeToFinish:number", default: 0, minValue: 0 },
47366
- { name: "maxTimeToFinishPage:number", default: 0, minValue: 0 },
47367
- {
47368
- name: "showTimerPanel",
47369
- default: "none",
47370
- choices: ["none", "top", "bottom"],
47371
- },
47372
- {
47373
- name: "showTimerPanelMode",
47374
- default: "all",
47375
- choices: ["page", "survey", "all"],
47376
- },
47588
+ { name: "showTimer:boolean" },
47589
+ { name: "timeLimit:number", alternativeName: "maxTimeToFinish", default: 0, minValue: 0, enableIf: function (obj) { return obj.showTimer; } },
47590
+ { name: "timeLimitPerPage:number", alternativeName: "maxTimeToFinishPage", default: 0, minValue: 0, enableIf: function (obj) { return obj.showTimer; } },
47591
+ { name: "timerLocation", default: "top", choices: ["top", "bottom"], enableIf: function (obj) { return obj.showTimer; } },
47592
+ { name: "timerInfoMode", alternativeName: "showTimerPanelMode",
47593
+ default: "combined", choices: ["page", "survey", "combined"], enableIf: function (obj) { return obj.showTimer; } },
47594
+ { name: "showTimerPanel", visible: false, isSerializable: false },
47377
47595
  {
47378
47596
  name: "widthMode",
47379
47597
  default: "auto",
@@ -47426,6 +47644,7 @@ var question_baseselect_decorate = (undefined && undefined.__decorate) || functi
47426
47644
 
47427
47645
 
47428
47646
 
47647
+
47429
47648
  /**
47430
47649
  * A base class for multiple-choice question types ([Checkboxes](https://surveyjs.io/form-library/documentation/questioncheckboxmodel), [Dropdown](https://surveyjs.io/form-library/documentation/questiondropdownmodel), [Radio Button Group](https://surveyjs.io/form-library/documentation/questionradiogroupmodel), etc.).
47431
47650
  */
@@ -48064,6 +48283,9 @@ var question_baseselect_QuestionSelectBase = /** @class */ (function (_super) {
48064
48283
  return this.otherValueCore;
48065
48284
  };
48066
48285
  QuestionSelectBase.prototype.selectOtherValueFromComment = function (val) {
48286
+ if (val) {
48287
+ this.prevIsOtherSelected = true;
48288
+ }
48067
48289
  this.value = val ? this.otherItem.value : undefined;
48068
48290
  };
48069
48291
  QuestionSelectBase.prototype.setQuestionComment = function (newValue) {
@@ -49656,24 +49878,8 @@ var question_baseselect_QuestionSelectBase = /** @class */ (function (_super) {
49656
49878
  QuestionSelectBase.prototype.getItemEnabled = function (item) {
49657
49879
  return !this.isDisabledAttr && item.isEnabled;
49658
49880
  };
49659
- QuestionSelectBase.prototype.afterRender = function (el) {
49660
- _super.prototype.afterRender.call(this, el);
49661
- this.rootElement = el;
49662
- };
49663
- QuestionSelectBase.prototype.beforeDestroyQuestionElement = function (el) {
49664
- _super.prototype.beforeDestroyQuestionElement.call(this, el);
49665
- this.rootElement = undefined;
49666
- };
49667
49881
  QuestionSelectBase.prototype.focusOtherComment = function () {
49668
- var _this = this;
49669
- if (!!this.rootElement) {
49670
- setTimeout(function () {
49671
- var commentEl = _this.rootElement.querySelector("textarea");
49672
- if (!!commentEl) {
49673
- commentEl.focus();
49674
- }
49675
- }, 10);
49676
- }
49882
+ survey_element_SurveyElement.FocusElement(this.otherId);
49677
49883
  };
49678
49884
  QuestionSelectBase.prototype.onValueChanged = function () {
49679
49885
  _super.prototype.onValueChanged.call(this);
@@ -53442,7 +53648,7 @@ var question_text_QuestionTextModel = /** @class */ (function (_super) {
53442
53648
  return inputMask;
53443
53649
  };
53444
53650
  QuestionTextModel.prototype.isTextValue = function () {
53445
- return ["text", "number", "password"].indexOf(this.inputType) > -1;
53651
+ return this.isDateInputType || ["text", "number", "password"].indexOf(this.inputType) > -1;
53446
53652
  };
53447
53653
  QuestionTextModel.prototype.getType = function () {
53448
53654
  return "text";
@@ -53786,7 +53992,7 @@ var question_text_QuestionTextModel = /** @class */ (function (_super) {
53786
53992
  if (!this.isMinMaxType)
53787
53993
  return true;
53788
53994
  var isValid = !this.isValueLessMin && !this.isValueGreaterMax;
53789
- if (this.inputType === "number" && !!this.survey &&
53995
+ if ((!isValid || this.errors.length > 0) && !!this.survey &&
53790
53996
  (this.survey.isValidateOnValueChanging || this.survey.isValidateOnValueChanged)) {
53791
53997
  this.hasErrors();
53792
53998
  }
@@ -53916,11 +54122,6 @@ var question_text_QuestionTextModel = /** @class */ (function (_super) {
53916
54122
  enumerable: false,
53917
54123
  configurable: true
53918
54124
  });
53919
- QuestionTextModel.prototype.canRunValidators = function (isOnValueChanged) {
53920
- return (this.errors.length > 0 ||
53921
- !isOnValueChanged ||
53922
- this.supportGoNextPageError());
53923
- };
53924
54125
  QuestionTextModel.prototype.setNewValue = function (newValue) {
53925
54126
  newValue = this.correctValueType(newValue);
53926
54127
  if (!!newValue) {
@@ -58598,7 +58799,6 @@ var question_comment_extends = (undefined && undefined.__extends) || (function (
58598
58799
 
58599
58800
 
58600
58801
 
58601
-
58602
58802
  /**
58603
58803
  * A class that describes the Long Text question type.
58604
58804
  *
@@ -58728,8 +58928,12 @@ var question_comment_QuestionCommentModel = /** @class */ (function (_super) {
58728
58928
  Object.defineProperty(QuestionCommentModel.prototype, "renderedAllowResize", {
58729
58929
  get: function () {
58730
58930
  var res = this.allowResize;
58731
- var allowResize = res === undefined && this.survey ? this.survey.allowResizeComment : !!res;
58732
- return allowResize && !this.isPreviewStyle && !this.isReadOnlyStyle;
58931
+ if (res === undefined && this.survey) {
58932
+ return this.survey.allowResizeComment;
58933
+ }
58934
+ else {
58935
+ return !!res;
58936
+ }
58733
58937
  },
58734
58938
  enumerable: false,
58735
58939
  configurable: true
@@ -58747,15 +58951,8 @@ var question_comment_QuestionCommentModel = /** @class */ (function (_super) {
58747
58951
  QuestionCommentModel.prototype.afterRenderQuestionElement = function (el) {
58748
58952
  var root = settings.environment.root;
58749
58953
  this.element = root.getElementById(this.inputId) || el;
58750
- this.updateElement();
58751
58954
  _super.prototype.afterRenderQuestionElement.call(this, el);
58752
58955
  };
58753
- QuestionCommentModel.prototype.updateElement = function () {
58754
- var _this_1 = this;
58755
- if (this.element && this.renderedAutoGrow) {
58756
- setTimeout(function () { return increaseHeightByContent(_this_1.element); }, 1);
58757
- }
58758
- };
58759
58956
  QuestionCommentModel.prototype.beforeDestroyQuestionElement = function (el) {
58760
58957
  _super.prototype.beforeDestroyQuestionElement.call(this, el);
58761
58958
  this.element = undefined;
@@ -58763,8 +58960,6 @@ var question_comment_QuestionCommentModel = /** @class */ (function (_super) {
58763
58960
  QuestionCommentModel.prototype.onInput = function (event) {
58764
58961
  if (this.isInputTextUpdate)
58765
58962
  this.value = event.target.value;
58766
- else
58767
- this.updateElement();
58768
58963
  this.updateRemainingCharacterCounter(event.target.value);
58769
58964
  };
58770
58965
  QuestionCommentModel.prototype.onBlurCore = function (event) {
@@ -58777,15 +58972,6 @@ var question_comment_QuestionCommentModel = /** @class */ (function (_super) {
58777
58972
  event.stopPropagation();
58778
58973
  }
58779
58974
  };
58780
- QuestionCommentModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {
58781
- if (updateIsAnswered === void 0) { updateIsAnswered = true; }
58782
- _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);
58783
- this.updateElement();
58784
- };
58785
- QuestionCommentModel.prototype.onValueChanged = function () {
58786
- _super.prototype.onValueChanged.call(this);
58787
- this.updateElement();
58788
- };
58789
58975
  QuestionCommentModel.prototype.setNewValue = function (newValue) {
58790
58976
  if (!this.acceptCarriageReturn && !!newValue) {
58791
58977
  // eslint-disable-next-line no-control-regex
@@ -59063,6 +59249,7 @@ var question_file_decorate = (undefined && undefined.__decorate) || function (de
59063
59249
 
59064
59250
 
59065
59251
 
59252
+
59066
59253
  function dataUrl2File(dataUrl, fileName, type) {
59067
59254
  var str = atob(dataUrl.split(",")[1]);
59068
59255
  var buffer = new Uint8Array(str.split("").map(function (c) { return c.charCodeAt(0); })).buffer;
@@ -59204,6 +59391,32 @@ var question_file_QuestionFileModelBase = /** @class */ (function (_super) {
59204
59391
  return QuestionFileModelBase;
59205
59392
  }(question_Question));
59206
59393
 
59394
+ var question_file_QuestionFilePage = /** @class */ (function (_super) {
59395
+ question_file_extends(QuestionFilePage, _super);
59396
+ function QuestionFilePage(question, index) {
59397
+ var _this = _super.call(this) || this;
59398
+ _this.question = question;
59399
+ _this.index = index;
59400
+ _this.id = QuestionFilePage.getId();
59401
+ return _this;
59402
+ }
59403
+ QuestionFilePage.getId = function () {
59404
+ return "sv_sfp_" + QuestionFilePage.pageCounter++;
59405
+ };
59406
+ Object.defineProperty(QuestionFilePage.prototype, "css", {
59407
+ get: function () {
59408
+ return this.question.cssClasses.page;
59409
+ },
59410
+ enumerable: false,
59411
+ configurable: true
59412
+ });
59413
+ QuestionFilePage.pageCounter = 0;
59414
+ question_file_decorate([
59415
+ propertyArray({})
59416
+ ], QuestionFilePage.prototype, "items", void 0);
59417
+ return QuestionFilePage;
59418
+ }(base_Base));
59419
+
59207
59420
  /**
59208
59421
  * A class that describes the File Upload question type.
59209
59422
  *
@@ -59217,6 +59430,10 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59217
59430
  _this.fileNavigator = new container_ActionContainer();
59218
59431
  _this.canFlipCameraValue = undefined;
59219
59432
  _this.prevPreviewLength = 0;
59433
+ _this._renderedPages = [];
59434
+ _this.pagesAnimation = new AnimationTab(_this.getPagesAnimationOptions(), function (val) {
59435
+ _this._renderedPages = val;
59436
+ }, function () { return _this.renderedPages; });
59220
59437
  _this.calcAvailableItemsCount = function (availableWidth, itemWidth, gap) {
59221
59438
  var itemsCount = Math.floor(availableWidth / (itemWidth + gap));
59222
59439
  if ((itemsCount + 1) * (itemWidth + gap) - gap <= availableWidth)
@@ -59295,6 +59512,7 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59295
59512
  id: "prevPage",
59296
59513
  iconSize: 16,
59297
59514
  action: function () {
59515
+ _this.navigationDirection = "left";
59298
59516
  _this.indexToShow = _this.previewValue.length && ((_this.indexToShow - 1 + _this.pagesCount) % _this.pagesCount) || 0;
59299
59517
  _this.fileIndexAction.title = _this.getFileIndexCaption();
59300
59518
  }
@@ -59303,6 +59521,7 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59303
59521
  id: "nextPage",
59304
59522
  iconSize: 16,
59305
59523
  action: function () {
59524
+ _this.navigationDirection = "right";
59306
59525
  _this.indexToShow = _this.previewValue.length && ((_this.indexToShow + 1) % _this.pagesCount) || 0;
59307
59526
  _this.fileIndexAction.title = _this.getFileIndexCaption();
59308
59527
  }
@@ -59378,6 +59597,13 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59378
59597
  _this.fileNavigator.actions = [_this.prevFileAction, _this.fileIndexAction, _this.nextFileAction];
59379
59598
  return _this;
59380
59599
  }
59600
+ Object.defineProperty(QuestionFileModel.prototype, "supportFileNavigator", {
59601
+ get: function () {
59602
+ return this.isDefaultV2Theme;
59603
+ },
59604
+ enumerable: false,
59605
+ configurable: true
59606
+ });
59381
59607
  Object.defineProperty(QuestionFileModel.prototype, "isFileLoading", {
59382
59608
  get: function () { return this.isFileLoadingValue; },
59383
59609
  set: function (val) {
@@ -59511,15 +59737,42 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59511
59737
  return this.getLocalizationFormatString("indexText", this.indexToShow + 1, this.pagesCount);
59512
59738
  };
59513
59739
  QuestionFileModel.prototype.updateFileNavigator = function () {
59740
+ this.updatePages();
59741
+ this.navigationDirection = undefined;
59514
59742
  this.indexToShow = this.previewValue.length && ((this.indexToShow + this.pagesCount) % this.pagesCount) || 0;
59515
59743
  this.fileIndexAction.title = this.getFileIndexCaption();
59516
59744
  };
59745
+ QuestionFileModel.prototype.updateRenderedPages = function () {
59746
+ if (this.pages && this.pages[this.indexToShow]) {
59747
+ this.renderedPages = [this.pages[this.indexToShow]];
59748
+ }
59749
+ };
59750
+ QuestionFileModel.prototype.updatePages = function () {
59751
+ var _this = this;
59752
+ this.blockAnimations();
59753
+ var currentPage;
59754
+ this.pages = [];
59755
+ this.renderedPages = [];
59756
+ this.previewValue.forEach(function (val, index) {
59757
+ if (index % _this.pageSize == 0) {
59758
+ currentPage = new question_file_QuestionFilePage(_this, _this.pages.length);
59759
+ _this.pages.push(currentPage);
59760
+ }
59761
+ currentPage.items.push(val);
59762
+ });
59763
+ this.releaseAnimations();
59764
+ this.updateRenderedPages();
59765
+ };
59517
59766
  QuestionFileModel.prototype.previewValueChanged = function () {
59518
59767
  var _this = this;
59768
+ this.navigationDirection = undefined;
59519
59769
  if (this.previewValue.length !== this.prevPreviewLength) {
59520
59770
  if (this.previewValue.length > 0) {
59521
59771
  if (this.prevPreviewLength > this.previewValue.length) {
59522
- this.indexToShow = this.indexToShow >= this.pagesCount && this.indexToShow > 0 ? this.pagesCount - 1 : this.indexToShow;
59772
+ if (this.indexToShow >= this.pagesCount && this.indexToShow > 0) {
59773
+ this.indexToShow = this.pagesCount - 1;
59774
+ this.navigationDirection = "left-delete";
59775
+ }
59523
59776
  }
59524
59777
  else {
59525
59778
  this.indexToShow = Math.floor(this.prevPreviewLength / this.pageSize);
@@ -59529,6 +59782,7 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59529
59782
  this.indexToShow = 0;
59530
59783
  }
59531
59784
  }
59785
+ this.updatePages();
59532
59786
  this.fileIndexAction.title = this.getFileIndexCaption();
59533
59787
  this.containsMultiplyFiles = this.previewValue.length > 1;
59534
59788
  if (this.previewValue.length > 0 && !this.calculatedGapBetweenItems && !this.calculatedItemWidth) {
@@ -59538,11 +59792,6 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59538
59792
  }
59539
59793
  this.prevPreviewLength = this.previewValue.length;
59540
59794
  };
59541
- QuestionFileModel.prototype.isPreviewVisible = function (index) {
59542
- var isFileNavigatorVisible = this.fileNavigatorVisible;
59543
- var isPreviewVisible = (this.indexToShow * this.pageSize <= index && index < (this.indexToShow + 1) * this.pageSize);
59544
- return !isFileNavigatorVisible || isPreviewVisible;
59545
- };
59546
59795
  QuestionFileModel.prototype.getType = function () {
59547
59796
  return "file";
59548
59797
  };
@@ -59988,6 +60237,7 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59988
60237
  content: content,
59989
60238
  });
59990
60239
  });
60240
+ this.previewValueChanged();
59991
60241
  }
59992
60242
  else {
59993
60243
  if (!!this._previewLoader) {
@@ -60007,7 +60257,6 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
60007
60257
  });
60008
60258
  this._previewLoader.load(newValues);
60009
60259
  }
60010
- this.previewValueChanged();
60011
60260
  };
60012
60261
  QuestionFileModel.prototype.getIsQuestionReady = function () {
60013
60262
  return _super.prototype.getIsQuestionReady.call(this) && !this.isFileLoading;
@@ -60151,6 +60400,46 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
60151
60400
  QuestionFileModel.prototype.getFileListSelector = function () {
60152
60401
  return classesToSelector(this.cssClasses.fileList);
60153
60402
  };
60403
+ Object.defineProperty(QuestionFileModel.prototype, "renderedPages", {
60404
+ get: function () {
60405
+ return this._renderedPages;
60406
+ },
60407
+ set: function (val) {
60408
+ this.pagesAnimation.sync(val);
60409
+ },
60410
+ enumerable: false,
60411
+ configurable: true
60412
+ });
60413
+ QuestionFileModel.prototype.getPagesAnimationOptions = function () {
60414
+ var _this = this;
60415
+ return {
60416
+ getEnterOptions: function (page) {
60417
+ var pageClass = _this.cssClasses.page;
60418
+ return { cssClass: pageClass ? new CssClassBuilder()
60419
+ .append(pageClass + "--enter-from-left", _this.navigationDirection == "left" || _this.navigationDirection == "left-delete")
60420
+ .append(pageClass + "--enter-from-right", _this.navigationDirection == "right").toString() : ""
60421
+ };
60422
+ },
60423
+ getLeaveOptions: function (page) {
60424
+ var pageClass = _this.cssClasses.page;
60425
+ return {
60426
+ cssClass: pageClass ? new CssClassBuilder()
60427
+ .append(pageClass + "--leave-to-left", _this.navigationDirection == "right")
60428
+ .append(pageClass + "--leave-to-right", _this.navigationDirection == "left").toString() : ""
60429
+ };
60430
+ },
60431
+ getAnimatedElement: function (page) {
60432
+ var _a;
60433
+ return (_a = _this.rootElement) === null || _a === void 0 ? void 0 : _a.querySelector("#" + page.id);
60434
+ },
60435
+ isAnimationEnabled: function () {
60436
+ return _this.animationAllowed && !!_this.rootElement;
60437
+ },
60438
+ getRerenderEvent: function () {
60439
+ return _this.onElementRerendered;
60440
+ }
60441
+ };
60442
+ };
60154
60443
  QuestionFileModel.prototype.triggerResponsiveness = function (hard) {
60155
60444
  if (hard) {
60156
60445
  this.calculatedGapBetweenItems = undefined;
@@ -60159,17 +60448,19 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
60159
60448
  _super.prototype.triggerResponsiveness.call(this);
60160
60449
  };
60161
60450
  QuestionFileModel.prototype.processResponsiveness = function (_, availableWidth) {
60162
- var _this = this;
60163
60451
  this._width = availableWidth;
60164
60452
  if (this.rootElement) {
60165
60453
  if ((!this.calculatedGapBetweenItems || !this.calculatedItemWidth) && this.allowMultiple) {
60166
60454
  var fileListSelector = this.getFileListSelector();
60167
60455
  var fileListElement = fileListSelector ? this.rootElement.querySelector(this.getFileListSelector()) : undefined;
60168
60456
  if (fileListElement) {
60169
- this.calculatedGapBetweenItems = Math.ceil(Number.parseFloat(DomDocumentHelper.getComputedStyle(fileListElement).gap));
60170
- var firstVisibleItem = Array.from(fileListElement.children).filter(function (_, index) { return _this.isPreviewVisible(index); })[0];
60171
- if (firstVisibleItem) {
60172
- this.calculatedItemWidth = Math.ceil(Number.parseFloat(DomDocumentHelper.getComputedStyle(firstVisibleItem).width));
60457
+ var visiblePage = fileListElement.querySelector(classesToSelector(this.cssClasses.page));
60458
+ if (visiblePage) {
60459
+ var firstVisibleItem = visiblePage.querySelector(classesToSelector(this.cssClasses.previewItem));
60460
+ this.calculatedGapBetweenItems = Math.ceil(Number.parseFloat(DomDocumentHelper.getComputedStyle(visiblePage).gap));
60461
+ if (firstVisibleItem) {
60462
+ this.calculatedItemWidth = Math.ceil(Number.parseFloat(DomDocumentHelper.getComputedStyle(firstVisibleItem).width));
60463
+ }
60173
60464
  }
60174
60465
  }
60175
60466
  }
@@ -60222,7 +60513,12 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
60222
60513
  propertyArray({})
60223
60514
  ], QuestionFileModel.prototype, "previewValue", void 0);
60224
60515
  question_file_decorate([
60225
- jsonobject_property({ defaultValue: 0 })
60516
+ propertyArray({})
60517
+ ], QuestionFileModel.prototype, "pages", void 0);
60518
+ question_file_decorate([
60519
+ jsonobject_property({ defaultValue: 0, onSet: function (val, target) {
60520
+ target.updateRenderedPages();
60521
+ } })
60226
60522
  ], QuestionFileModel.prototype, "indexToShow", void 0);
60227
60523
  question_file_decorate([
60228
60524
  jsonobject_property({
@@ -60286,6 +60582,9 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
60286
60582
  question_file_decorate([
60287
60583
  jsonobject_property()
60288
60584
  ], QuestionFileModel.prototype, "locRenderedPlaceholderValue", void 0);
60585
+ question_file_decorate([
60586
+ propertyArray()
60587
+ ], QuestionFileModel.prototype, "_renderedPages", void 0);
60289
60588
  return QuestionFileModel;
60290
60589
  }(question_file_QuestionFileModelBase));
60291
60590
 
@@ -66269,9 +66568,8 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
66269
66568
  : null;
66270
66569
  };
66271
66570
  QuestionPanelDynamicModel.prototype.addConditionObjectsByContext = function (objects, context) {
66272
- var hasContext = !!context
66273
- ? context === true || this.template.questions.indexOf(context) > -1
66274
- : false;
66571
+ var contextQ = !!(context === null || context === void 0 ? void 0 : context.isValidator) ? context.errorOwner : context;
66572
+ var hasContext = !!context && (context === true || this.template.questions.indexOf(contextQ) > -1);
66275
66573
  var panelObjs = new Array();
66276
66574
  var questions = this.template.questions;
66277
66575
  for (var i = 0; i < questions.length; i++) {
@@ -70272,8 +70570,8 @@ Serializer.addClass("currencymask", [
70272
70570
 
70273
70571
  var Version;
70274
70572
  var ReleaseDate;
70275
- Version = "" + "1.12.4";
70276
- ReleaseDate = "" + "2024-10-01";
70573
+ Version = "" + "1.12.6";
70574
+ ReleaseDate = "" + "2024-10-15";
70277
70575
  function checkLibraryVersion(ver, libraryName) {
70278
70576
  if (Version != ver) {
70279
70577
  var str = "survey-core has version '" + Version + "' and " + libraryName