survey-core 1.12.4 → 1.12.5

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 (244) hide show
  1. package/defaultV2.css +81 -4
  2. package/defaultV2.css.map +1 -1
  3. package/defaultV2.fontless.css +81 -4
  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 +525 -266
  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 +1 -1
  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/page.d.ts +8 -3
  216. package/ts3.4/typings/packages/survey-core/src/panel.d.ts +2 -0
  217. package/ts3.4/typings/packages/survey-core/src/question.d.ts +1 -1
  218. package/ts3.4/typings/packages/survey-core/src/question_baseselect.d.ts +0 -3
  219. package/ts3.4/typings/packages/survey-core/src/question_comment.d.ts +0 -3
  220. package/ts3.4/typings/packages/survey-core/src/question_file.d.ts +20 -2
  221. package/ts3.4/typings/packages/survey-core/src/question_matrixdynamic.d.ts +2 -0
  222. package/ts3.4/typings/packages/survey-core/src/survey-element.d.ts +16 -1
  223. package/ts3.4/typings/packages/survey-core/src/survey.d.ts +76 -30
  224. package/ts3.4/typings/packages/survey-core/src/surveyTimerModel.d.ts +1 -1
  225. package/ts3.4/typings/packages/survey-core/src/surveytimer.d.ts +1 -0
  226. package/ts3.4/typings/packages/survey-core/src/themes.d.ts +19 -13
  227. package/ts3.4/typings/packages/survey-core/src/utils/text-area.d.ts +1 -0
  228. package/typings/packages/survey-core/entries/chunks/model.d.ts +1 -1
  229. package/typings/packages/survey-core/src/base-interfaces.d.ts +1 -1
  230. package/typings/packages/survey-core/src/base.d.ts +4 -15
  231. package/typings/packages/survey-core/src/defaultCss/defaultV2Css.d.ts +1 -0
  232. package/typings/packages/survey-core/src/page.d.ts +9 -3
  233. package/typings/packages/survey-core/src/panel.d.ts +2 -0
  234. package/typings/packages/survey-core/src/question.d.ts +1 -1
  235. package/typings/packages/survey-core/src/question_baseselect.d.ts +0 -3
  236. package/typings/packages/survey-core/src/question_comment.d.ts +0 -3
  237. package/typings/packages/survey-core/src/question_file.d.ts +21 -2
  238. package/typings/packages/survey-core/src/question_matrixdynamic.d.ts +2 -0
  239. package/typings/packages/survey-core/src/survey-element.d.ts +16 -1
  240. package/typings/packages/survey-core/src/survey.d.ts +82 -31
  241. package/typings/packages/survey-core/src/surveyTimerModel.d.ts +1 -1
  242. package/typings/packages/survey-core/src/surveytimer.d.ts +1 -0
  243. package/typings/packages/survey-core/src/themes.d.ts +19 -13
  244. package/typings/packages/survey-core/src/utils/text-area.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.5
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) {
@@ -9142,8 +9146,8 @@ var base_Base = /** @class */ (function () {
9142
9146
  this.isCreating = true;
9143
9147
  this.animationAllowedLock = 0;
9144
9148
  //remove when knockout obsolete
9145
- this.supportOnElementRenderedEvent = true;
9146
- this.onElementRenderedEventEnabled = false;
9149
+ this.supportOnElementRerenderedEvent = true;
9150
+ this.onElementRerenderedEventEnabled = false;
9147
9151
  this._onElementRerendered = new EventBase();
9148
9152
  this.bindingsValue = new base_Bindings(this);
9149
9153
  CustomPropertiesCollection.createProperties(this);
@@ -10080,7 +10084,7 @@ var base_Base = /** @class */ (function () {
10080
10084
  configurable: true
10081
10085
  });
10082
10086
  Base.prototype.getIsAnimationAllowed = function () {
10083
- return settings.animationEnabled && this.animationAllowedLock >= 0 && !this.isLoadingFromJson && !this.isDisposed && (!!this.onElementRerendered || !this.supportOnElementRenderedEvent);
10087
+ return settings.animationEnabled && this.animationAllowedLock >= 0 && !this.isLoadingFromJson && !this.isDisposed && (!!this.onElementRerendered || !this.supportOnElementRerenderedEvent);
10084
10088
  };
10085
10089
  Base.prototype.blockAnimations = function () {
10086
10090
  this.animationAllowedLock--;
@@ -10088,17 +10092,17 @@ var base_Base = /** @class */ (function () {
10088
10092
  Base.prototype.releaseAnimations = function () {
10089
10093
  this.animationAllowedLock++;
10090
10094
  };
10091
- Base.prototype.enableOnElementRenderedEvent = function () {
10092
- this.onElementRenderedEventEnabled = true;
10095
+ Base.prototype.enableOnElementRerenderedEvent = function () {
10096
+ this.onElementRerenderedEventEnabled = true;
10093
10097
  };
10094
- Base.prototype.disableOnElementRenderedEvent = function () {
10098
+ Base.prototype.disableOnElementRerenderedEvent = function () {
10095
10099
  var _a;
10096
10100
  (_a = this.onElementRerendered) === null || _a === void 0 ? void 0 : _a.fire(this, { isCancel: true });
10097
- this.onElementRenderedEventEnabled = false;
10101
+ this.onElementRerenderedEventEnabled = false;
10098
10102
  };
10099
10103
  Object.defineProperty(Base.prototype, "onElementRerendered", {
10100
10104
  get: function () {
10101
- return this.supportOnElementRenderedEvent && this.onElementRenderedEventEnabled ? this._onElementRerendered : undefined;
10105
+ return this.supportOnElementRerenderedEvent && this.onElementRerenderedEventEnabled ? this._onElementRerendered : undefined;
10102
10106
  },
10103
10107
  enumerable: false,
10104
10108
  configurable: true
@@ -10111,66 +10115,6 @@ var base_Base = /** @class */ (function () {
10111
10115
  return Base;
10112
10116
  }());
10113
10117
 
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
10118
  var ArrayChanges = /** @class */ (function () {
10175
10119
  function ArrayChanges(index, deleteCount, itemsToAdd, deletedItems) {
10176
10120
  this.index = index;
@@ -10350,7 +10294,9 @@ var responsivity_manager_ResponsivityManager = /** @class */ (function () {
10350
10294
  var _items = this.container.querySelectorAll(this.itemsSelector);
10351
10295
  (_items || []).forEach(function (item, index) {
10352
10296
  var currentAction = actions[index];
10353
- _this.calcActionDimensions(currentAction, item);
10297
+ if (!!currentAction) {
10298
+ _this.calcActionDimensions(currentAction, item);
10299
+ }
10354
10300
  });
10355
10301
  };
10356
10302
  ResponsivityManager.prototype.calcActionDimensions = function (currentAction, item) {
@@ -12910,6 +12856,7 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
12910
12856
  }
12911
12857
  }
12912
12858
  }, function () { return _this.renderedIsExpanded; });
12859
+ _this.onAfterRenderElement = _this.addEvent();
12913
12860
  _this.name = name;
12914
12861
  _this.createNewArray("errors");
12915
12862
  _this.createNewArray("titleActions");
@@ -12939,16 +12886,7 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
12939
12886
  }
12940
12887
  return info;
12941
12888
  };
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;
12889
+ SurveyElement.IsNeedScrollIntoView = function (el, checkLeft, scrollIfVisible) {
12952
12890
  var elTop = scrollIfVisible ? -1 : el.getBoundingClientRect().top;
12953
12891
  var needScroll = elTop < 0;
12954
12892
  var elLeft = -1;
@@ -12964,20 +12902,55 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
12964
12902
  needScroll = width > 0 && width < elLeft;
12965
12903
  }
12966
12904
  }
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);
12905
+ return needScroll;
12906
+ };
12907
+ SurveyElement.ScrollIntoView = function (el, scrollIntoViewOptions, doneCallback) {
12908
+ el.scrollIntoView(scrollIntoViewOptions);
12909
+ if (typeof doneCallback === "function") {
12910
+ var lastPos_1 = null;
12911
+ var same_1 = 0;
12912
+ var checkPos_1 = function () {
12913
+ var newPos = el.getBoundingClientRect().top;
12914
+ if (newPos === lastPos_1) {
12915
+ if (same_1++ > 2) {
12975
12916
  doneCallback();
12917
+ return;
12976
12918
  }
12977
- currPageXOffset_1 = window.pageXOffset;
12978
- currPageYOffset_1 = window.pageYOffset;
12979
- }, 25);
12980
- }
12919
+ }
12920
+ else {
12921
+ lastPos_1 = newPos;
12922
+ same_1 = 0;
12923
+ }
12924
+ requestAnimationFrame(checkPos_1);
12925
+ };
12926
+ DomWindowHelper.requestAnimationFrame(checkPos_1);
12927
+ // let currPageXOffset = window.pageXOffset;
12928
+ // let currPageYOffset = window.pageYOffset;
12929
+ // var scrollDone = setInterval(() => {
12930
+ // DomWindowHelper.requestAnimationFrame(() => {
12931
+ // if (currPageXOffset == window.pageXOffset && currPageYOffset == window.pageYOffset) {
12932
+ // clearInterval(scrollDone);
12933
+ // doneCallback();
12934
+ // }
12935
+ // currPageXOffset = window.pageXOffset;
12936
+ // currPageYOffset = window.pageYOffset;
12937
+ // });
12938
+ // }, 25);
12939
+ }
12940
+ };
12941
+ SurveyElement.ScrollElementToTop = function (elementId, scrollIfVisible, scrollIntoViewOptions, doneCallback) {
12942
+ var root = settings.environment.root;
12943
+ if (!elementId || typeof root === "undefined")
12944
+ return false;
12945
+ var el = root.getElementById(elementId);
12946
+ return SurveyElement.ScrollElementToViewCore(el, false, scrollIfVisible, scrollIntoViewOptions, doneCallback);
12947
+ };
12948
+ SurveyElement.ScrollElementToViewCore = function (el, checkLeft, scrollIfVisible, scrollIntoViewOptions, doneCallback) {
12949
+ if (!el || !el.scrollIntoView)
12950
+ return false;
12951
+ var needScroll = SurveyElement.IsNeedScrollIntoView(el, checkLeft, scrollIfVisible);
12952
+ if (needScroll) {
12953
+ SurveyElement.ScrollIntoView(el, scrollIntoViewOptions, doneCallback);
12981
12954
  }
12982
12955
  return needScroll;
12983
12956
  };
@@ -13727,7 +13700,7 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
13727
13700
  };
13728
13701
  Object.defineProperty(SurveyElement.prototype, "isDefaultV2Theme", {
13729
13702
  get: function () {
13730
- return this.survey && this.survey.getCss().root == "sd-root-modern";
13703
+ return this.survey && this.survey.getCss().root.indexOf("sd-root-modern") !== -1;
13731
13704
  },
13732
13705
  enumerable: false,
13733
13706
  configurable: true
@@ -14124,12 +14097,16 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
14124
14097
  SurveyElement.prototype.getIsAnimationAllowed = function () {
14125
14098
  return _super.prototype.getIsAnimationAllowed.call(this) && !!this.survey && !this.survey["isEndLoadingFromJson"];
14126
14099
  };
14100
+ SurveyElement.prototype.afterRenderCore = function (element) {
14101
+ this.onAfterRenderElement.fire(this, { htmlElement: element });
14102
+ };
14127
14103
  SurveyElement.prototype.dispose = function () {
14128
14104
  _super.prototype.dispose.call(this);
14129
14105
  if (this.titleToolbarValue) {
14130
14106
  this.titleToolbarValue.dispose();
14131
14107
  }
14132
14108
  };
14109
+ // TODO V2: get rid of this flag
14133
14110
  SurveyElement.CreateDisabledDesignElements = false;
14134
14111
  survey_element_decorate([
14135
14112
  jsonobject_property({ defaultValue: null })
@@ -14162,6 +14139,66 @@ var survey_element_SurveyElement = /** @class */ (function (_super) {
14162
14139
  return SurveyElement;
14163
14140
  }(survey_element_SurveyElementCore));
14164
14141
 
14142
+ var RenderingCompletedAwaiter = /** @class */ (function () {
14143
+ function RenderingCompletedAwaiter(_elements, _renderedHandler, waitingTimeout) {
14144
+ var _this = this;
14145
+ if (waitingTimeout === void 0) { waitingTimeout = 100; }
14146
+ this._elements = _elements;
14147
+ this._renderedHandler = _renderedHandler;
14148
+ this._elementsToRenderCount = 0;
14149
+ this._elementsToRenderTimer = undefined;
14150
+ this._elementRenderedHandler = function (s, o) {
14151
+ var _a;
14152
+ (_a = s.onAfterRenderElement) === null || _a === void 0 ? void 0 : _a.remove(_this._elementRenderedHandler);
14153
+ _this._elementsToRenderCount--;
14154
+ if (_this._elementsToRenderCount <= 0) {
14155
+ _this.visibleElementsRendered();
14156
+ }
14157
+ };
14158
+ this._elements.forEach(function (element) {
14159
+ if (element.onAfterRenderElement) {
14160
+ element.onAfterRenderElement.add(_this._elementRenderedHandler);
14161
+ _this._elementsToRenderCount++;
14162
+ }
14163
+ });
14164
+ if (this._elementsToRenderCount > 0) {
14165
+ this._elementsToRenderTimer = setTimeout(function () {
14166
+ if (_this._elementsToRenderCount > 0) {
14167
+ _this.visibleElementsRendered();
14168
+ }
14169
+ }, waitingTimeout);
14170
+ }
14171
+ else {
14172
+ this.visibleElementsRendered();
14173
+ }
14174
+ }
14175
+ RenderingCompletedAwaiter.prototype.stopWaitingForElementsRendering = function () {
14176
+ var _this = this;
14177
+ if (this._elementsToRenderTimer) {
14178
+ clearTimeout(this._elementsToRenderTimer);
14179
+ this._elementsToRenderTimer = undefined;
14180
+ }
14181
+ this._elements.forEach(function (element) {
14182
+ var _a;
14183
+ (_a = element.onAfterRenderElement) === null || _a === void 0 ? void 0 : _a.remove(_this._elementRenderedHandler);
14184
+ });
14185
+ this._elementsToRenderCount = 0;
14186
+ };
14187
+ RenderingCompletedAwaiter.prototype.visibleElementsRendered = function () {
14188
+ var renderedHandler = this._renderedHandler;
14189
+ this.dispose();
14190
+ if (typeof renderedHandler == "function") {
14191
+ renderedHandler();
14192
+ }
14193
+ };
14194
+ RenderingCompletedAwaiter.prototype.dispose = function () {
14195
+ this.stopWaitingForElementsRendering();
14196
+ this._elements = undefined;
14197
+ this._renderedHandler = undefined;
14198
+ };
14199
+ return RenderingCompletedAwaiter;
14200
+ }());
14201
+
14165
14202
 
14166
14203
  // CONCATENATED MODULE: ./packages/survey-core/src/localizablestring.ts
14167
14204
 
@@ -17496,16 +17533,21 @@ var text_area_TextAreaModel = /** @class */ (function () {
17496
17533
  this.onPropertyChangedCallback = function () {
17497
17534
  if (_this.element) {
17498
17535
  _this.element.value = _this.getTextValue();
17499
- if (_this.autoGrow) {
17500
- increaseHeightByContent(_this.element);
17501
- }
17536
+ _this.updateElement();
17502
17537
  }
17503
17538
  };
17504
17539
  this.question.registerFunctionOnPropertyValueChanged(this.options.propertyName, this.onPropertyChangedCallback, "__textarea");
17505
17540
  }
17541
+ TextAreaModel.prototype.updateElement = function () {
17542
+ var _this = this;
17543
+ if (this.element && this.autoGrow) {
17544
+ setTimeout(function () { return increaseHeightByContent(_this.element); }, 1);
17545
+ }
17546
+ };
17506
17547
  TextAreaModel.prototype.setElement = function (element) {
17507
17548
  if (!!element) {
17508
17549
  this.element = element;
17550
+ this.updateElement();
17509
17551
  }
17510
17552
  };
17511
17553
  TextAreaModel.prototype.getTextValue = function () {
@@ -18775,7 +18817,8 @@ var question_Question = /** @class */ (function (_super) {
18775
18817
  }
18776
18818
  this.checkForResponsiveness(el);
18777
18819
  };
18778
- Question.prototype.afterRenderCore = function (el) {
18820
+ Question.prototype.afterRenderCore = function (element) {
18821
+ _super.prototype.afterRenderCore.call(this, element);
18779
18822
  };
18780
18823
  Question.prototype.getCommentElementsId = function () {
18781
18824
  return [this.commentId];
@@ -30095,7 +30138,14 @@ var question_matrixdropdownbase_QuestionMatrixDropdownModelBase = /** @class */
30095
30138
  });
30096
30139
  Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "hasInvisibleRows", {
30097
30140
  get: function () {
30098
- return !!this.visibleRowsArray && this.visibleRowsArray.length !== this.generatedVisibleRows.length;
30141
+ var rows = this.generatedVisibleRows;
30142
+ if (!Array.isArray(rows))
30143
+ return false;
30144
+ for (var i = 0; i < rows.length; i++) {
30145
+ if (!rows[i].isVisible)
30146
+ return true;
30147
+ }
30148
+ return false;
30099
30149
  },
30100
30150
  enumerable: false,
30101
30151
  configurable: true
@@ -30306,7 +30356,7 @@ var question_matrixdropdownbase_QuestionMatrixDropdownModelBase = /** @class */
30306
30356
  };
30307
30357
  QuestionMatrixDropdownModelBase.prototype.clearInvisibleValuesInRows = function () {
30308
30358
  var _a;
30309
- if (this.isEmpty() || !this.isRowsFiltered)
30359
+ if (this.isEmpty() || !this.isRowsFiltered())
30310
30360
  return;
30311
30361
  var sharedQuestions = ((_a = this.survey) === null || _a === void 0 ? void 0 : _a.questionsByValueName(this.getValueName())) || [];
30312
30362
  if (sharedQuestions.length < 2) {
@@ -31586,10 +31636,10 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
31586
31636
  };
31587
31637
  _this.createLocalizableString("removeRowText", _this, false, "removeRow");
31588
31638
  _this.createLocalizableString("emptyRowsText", _this, false, true);
31589
- _this.registerPropertyChangedHandlers(["hideColumnsIfEmpty", "allowAddRows"], function () {
31590
- _this.updateShowTableAndAddRow();
31591
- });
31639
+ _this.registerPropertyChangedHandlers(["hideColumnsIfEmpty", "allowAddRows"], function () { _this.updateShowTableAndAddRow(); });
31592
31640
  _this.registerPropertyChangedHandlers(["allowRowsDragAndDrop", "isReadOnly", "lockedRowCount"], function () { _this.resetRenderedTable(); });
31641
+ _this.registerPropertyChangedHandlers(["minRowCount"], function () { _this.onMinRowCountChanged(); });
31642
+ _this.registerPropertyChangedHandlers(["maxRowCount"], function () { _this.onMaxRowCountChanged(); });
31593
31643
  _this.dragOrClickHelper = new dragOrClickHelper_DragOrClickHelper(_this.startDragMatrixRow);
31594
31644
  return _this;
31595
31645
  }
@@ -31697,7 +31747,7 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
31697
31747
  return (_super.prototype.isDefaultValueEmpty.call(this) && this.isValueEmpty(this.defaultRowValue));
31698
31748
  };
31699
31749
  QuestionMatrixDynamicModel.prototype.valueFromData = function (val) {
31700
- if (this.minRowCount < 1)
31750
+ if (this.minRowCount < 1 || this.isEmpty())
31701
31751
  return _super.prototype.valueFromData.call(this, val);
31702
31752
  if (!Array.isArray(val))
31703
31753
  val = [];
@@ -31867,14 +31917,19 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
31867
31917
  if (val < 0)
31868
31918
  val = 0;
31869
31919
  this.setPropertyValue("minRowCount", val);
31870
- if (val > this.maxRowCount)
31871
- this.maxRowCount = val;
31872
- if (this.rowCount < val)
31873
- this.rowCount = val;
31874
31920
  },
31875
31921
  enumerable: false,
31876
31922
  configurable: true
31877
31923
  });
31924
+ QuestionMatrixDynamicModel.prototype.onMinRowCountChanged = function () {
31925
+ var val = this.minRowCount;
31926
+ if (val > this.maxRowCount)
31927
+ this.maxRowCount = val;
31928
+ if (this.initialRowCount < val)
31929
+ this.initialRowCount = val;
31930
+ if (this.rowCount < val)
31931
+ this.rowCount = val;
31932
+ };
31878
31933
  Object.defineProperty(QuestionMatrixDynamicModel.prototype, "maxRowCount", {
31879
31934
  /**
31880
31935
  * A maximum number of rows in the matrix. Users cannot add new rows if `rowCount` equals `maxRowCount`.
@@ -31895,14 +31950,17 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
31895
31950
  if (val == this.maxRowCount)
31896
31951
  return;
31897
31952
  this.setPropertyValue("maxRowCount", val);
31898
- if (val < this.minRowCount)
31899
- this.minRowCount = val;
31900
- if (this.rowCount > val)
31901
- this.rowCount = val;
31902
31953
  },
31903
31954
  enumerable: false,
31904
31955
  configurable: true
31905
31956
  });
31957
+ QuestionMatrixDynamicModel.prototype.onMaxRowCountChanged = function () {
31958
+ var val = this.maxRowCount;
31959
+ if (val < this.minRowCount)
31960
+ this.minRowCount = val;
31961
+ if (this.rowCount > val)
31962
+ this.rowCount = val;
31963
+ };
31906
31964
  Object.defineProperty(QuestionMatrixDynamicModel.prototype, "allowAddRows", {
31907
31965
  /**
31908
31966
  * Specifies whether users are allowed to add new rows.
@@ -31997,6 +32055,8 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
31997
32055
  this.addRow(true);
31998
32056
  };
31999
32057
  QuestionMatrixDynamicModel.prototype.getQuestionToFocusOnAddingRow = function () {
32058
+ if (this.visibleRows.length === 0)
32059
+ return null;
32000
32060
  var row = this.visibleRows[this.visibleRows.length - 1];
32001
32061
  for (var i = 0; i < row.cells.length; i++) {
32002
32062
  var q = row.cells[i].question;
@@ -32074,8 +32134,9 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
32074
32134
  }
32075
32135
  if (this.data) {
32076
32136
  this.runCellsCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());
32077
- if (this.isValueEmpty(defaultValue)) {
32078
- var row = this.visibleRows[this.rowCount - 1];
32137
+ var rows = this.visibleRows;
32138
+ if (this.isValueEmpty(defaultValue) && rows.length > 0) {
32139
+ var row = rows[rows.length - 1];
32079
32140
  if (!this.isValueEmpty(row.value)) {
32080
32141
  if (!newValue) {
32081
32142
  newValue = this.createNewValue();
@@ -32089,8 +32150,10 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
32089
32150
  }
32090
32151
  }
32091
32152
  if (this.survey) {
32092
- if (prevRowCount + 1 == this.rowCount) {
32093
- this.survey.matrixRowAdded(this, this.visibleRows[this.visibleRows.length - 1]);
32153
+ var rows = this.visibleRows;
32154
+ if (prevRowCount + 1 == this.rowCount && rows.length > 0) {
32155
+ var row = rows[rows.length - 1];
32156
+ this.survey.matrixRowAdded(this, row);
32094
32157
  this.onRowsChanged();
32095
32158
  }
32096
32159
  }
@@ -32524,6 +32587,8 @@ var question_matrixdynamic_QuestionMatrixDynamicModel = /** @class */ (function
32524
32587
  return result;
32525
32588
  };
32526
32589
  QuestionMatrixDynamicModel.prototype.deleteRowValue = function (newValue, row) {
32590
+ if (!Array.isArray(newValue))
32591
+ return newValue;
32527
32592
  var isEmpty = true;
32528
32593
  for (var i = 0; i < newValue.length; i++) {
32529
32594
  if (this.isObject(newValue[i]) && Object.keys(newValue[i]).length > 0) {
@@ -33365,6 +33430,7 @@ var defaultV2Css = {
33365
33430
  changeCameraButton: "sd-file__change-camera-button",
33366
33431
  takePictureButton: "sd-file__take-picture-button",
33367
33432
  loadingIndicator: "sd-file__loading-indicator",
33433
+ page: "sd-file__page"
33368
33434
  },
33369
33435
  signaturepad: {
33370
33436
  mainRoot: "sd-element sd-question sd-question--signature sd-row__question",
@@ -33695,7 +33761,8 @@ var surveytimer_SurveyTimer = /** @class */ (function () {
33695
33761
  function SurveyTimer() {
33696
33762
  this.listenerCounter = 0;
33697
33763
  this.timerId = -1;
33698
- this.onTimer = new EventBase();
33764
+ this.onTimerTick = new EventBase();
33765
+ this.onTimer = this.onTimerTick;
33699
33766
  }
33700
33767
  Object.defineProperty(SurveyTimer, "instance", {
33701
33768
  get: function () {
@@ -33711,7 +33778,7 @@ var surveytimer_SurveyTimer = /** @class */ (function () {
33711
33778
  var _this = this;
33712
33779
  if (func === void 0) { func = null; }
33713
33780
  if (func) {
33714
- this.onTimer.add(func);
33781
+ this.onTimerTick.add(func);
33715
33782
  }
33716
33783
  this.prevTimeInMs = surveyTimerFunctions.now();
33717
33784
  if (this.timerId < 0) {
@@ -33724,7 +33791,7 @@ var surveytimer_SurveyTimer = /** @class */ (function () {
33724
33791
  SurveyTimer.prototype.stop = function (func) {
33725
33792
  if (func === void 0) { func = null; }
33726
33793
  if (func) {
33727
- this.onTimer.remove(func);
33794
+ this.onTimerTick.remove(func);
33728
33795
  }
33729
33796
  this.listenerCounter--;
33730
33797
  if (this.listenerCounter == 0 && this.timerId > -1) {
@@ -33734,7 +33801,7 @@ var surveytimer_SurveyTimer = /** @class */ (function () {
33734
33801
  };
33735
33802
  SurveyTimer.prototype.doTimer = function () {
33736
33803
  var _this = this;
33737
- if (this.onTimer.isEmpty || this.listenerCounter == 0) {
33804
+ if (this.onTimerTick.isEmpty || this.listenerCounter == 0) {
33738
33805
  this.timerId = -1;
33739
33806
  }
33740
33807
  if (this.timerId < 0)
@@ -33746,7 +33813,7 @@ var surveytimer_SurveyTimer = /** @class */ (function () {
33746
33813
  seconds = 1;
33747
33814
  }
33748
33815
  var prevItem = this.timerId;
33749
- this.onTimer.fire(this, { seconds: seconds });
33816
+ this.onTimerTick.fire(this, { seconds: seconds });
33750
33817
  //We have to check that we have the same timerId
33751
33818
  //It could be changed during events execution and it will lead to double timer events
33752
33819
  if (prevItem !== this.timerId)
@@ -33846,8 +33913,8 @@ var surveyTimerModel_SurveyTimerModel = /** @class */ (function (_super) {
33846
33913
  }
33847
33914
  this.spent = this.spent + seconds;
33848
33915
  this.update();
33849
- if (this.onTimer) {
33850
- this.onTimer(page);
33916
+ if (this.onTimerTick) {
33917
+ this.onTimerTick(page);
33851
33918
  }
33852
33919
  };
33853
33920
  SurveyTimerModel.prototype.updateProgress = function () {
@@ -35598,7 +35665,7 @@ var panel_PanelModelBase = /** @class */ (function (_super) {
35598
35665
  PanelModelBase.prototype.getValue = function () {
35599
35666
  var data = {};
35600
35667
  this.collectValues(data, 0);
35601
- return data;
35668
+ return helpers_Helpers.getUnbindValue(data);
35602
35669
  };
35603
35670
  PanelModelBase.prototype.collectValues = function (data, level) {
35604
35671
  var elements = this.elements;
@@ -36995,6 +37062,9 @@ var panel_PanelModelBase = /** @class */ (function (_super) {
36995
37062
  }
36996
37063
  return this.layoutColumns.slice(0, tailIndex + 1);
36997
37064
  };
37065
+ PanelModelBase.prototype.afterRender = function (el) {
37066
+ this.afterRenderCore(el);
37067
+ };
36998
37068
  PanelModelBase.prototype.dispose = function () {
36999
37069
  _super.prototype.dispose.call(this);
37000
37070
  if (this.rows) {
@@ -37467,6 +37537,11 @@ var panel_PanelModel = /** @class */ (function (_super) {
37467
37537
  PanelModel.prototype.getContainerCss = function () {
37468
37538
  return this.getCssRoot(this.cssClasses.panel);
37469
37539
  };
37540
+ PanelModel.prototype.afterRenderCore = function (element) {
37541
+ var _a;
37542
+ _super.prototype.afterRenderCore.call(this, element);
37543
+ (_a = this.survey) === null || _a === void 0 ? void 0 : _a.afterRenderPanel(this, element);
37544
+ };
37470
37545
  return PanelModel;
37471
37546
  }(panel_PanelModelBase));
37472
37547
 
@@ -37820,7 +37895,7 @@ var page_PageModel = /** @class */ (function (_super) {
37820
37895
  _this.hasShownValue = false;
37821
37896
  /**
37822
37897
  * 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
37898
+ * @see timeLimit
37824
37899
  */
37825
37900
  _this.timeSpent = 0;
37826
37901
  _this.createLocalizableString("navigationDescription", _this, true);
@@ -38107,12 +38182,6 @@ var page_PageModel = /** @class */ (function (_super) {
38107
38182
  this.survey.scrollElementToTop(this, null, this, this.id);
38108
38183
  }
38109
38184
  };
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
38185
  /**
38117
38186
  * Returns a list of all panels on this page.
38118
38187
  * @param visibleOnly A Boolean value that specifies whether to include only visible panels.
@@ -38130,28 +38199,42 @@ var page_PageModel = /** @class */ (function (_super) {
38130
38199
  if (includingDesignTime === void 0) { includingDesignTime = false; }
38131
38200
  return this.getAllPanels(visibleOnly, includingDesignTime);
38132
38201
  };
38133
- Object.defineProperty(PageModel.prototype, "maxTimeToFinish", {
38202
+ Object.defineProperty(PageModel.prototype, "timeLimit", {
38134
38203
  /**
38135
38204
  * 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
38205
  *
38137
- * A negative value or 0 sets an unlimited time period.
38206
+ * Default value: 0 (time is unlimited)
38138
38207
  *
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.
38208
+ * 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
38209
  * @see timeSpent
38141
38210
  */
38142
38211
  get: function () {
38143
- return this.getPropertyValue("maxTimeToFinish", 0);
38212
+ return this.getPropertyValue("timeLimit", 0);
38144
38213
  },
38145
38214
  set: function (val) {
38146
- this.setPropertyValue("maxTimeToFinish", val);
38215
+ this.setPropertyValue("timeLimit", val);
38216
+ },
38217
+ enumerable: false,
38218
+ configurable: true
38219
+ });
38220
+ Object.defineProperty(PageModel.prototype, "maxTimeToFinish", {
38221
+ /**
38222
+ * Obsolete. Use the [`timeLimit`](https://surveyjs.io/form-library/documentation/api-reference/page-model#timeLimit) property instead.
38223
+ * @deprecated
38224
+ */
38225
+ get: function () {
38226
+ return this.timeLimit;
38227
+ },
38228
+ set: function (val) {
38229
+ this.timeLimit = val;
38147
38230
  },
38148
38231
  enumerable: false,
38149
38232
  configurable: true
38150
38233
  });
38151
38234
  PageModel.prototype.getMaxTimeToFinish = function () {
38152
- if (this.maxTimeToFinish !== 0)
38153
- return this.maxTimeToFinish;
38154
- var res = !!this.survey ? this.survey.maxTimeToFinishPage : 0;
38235
+ if (this.timeLimit !== 0)
38236
+ return this.timeLimit;
38237
+ var res = !!this.survey ? this.survey.timeLimitPerPage : 0;
38155
38238
  return res > 0 ? res : 0;
38156
38239
  };
38157
38240
  PageModel.prototype.onNumChanged = function (value) { };
@@ -38193,7 +38276,7 @@ Serializer.addClass("page", [
38193
38276
  default: "inherit",
38194
38277
  choices: ["inherit", "show", "hide"],
38195
38278
  },
38196
- { name: "maxTimeToFinish:number", default: 0, minValue: 0 },
38279
+ { name: "timeLimit:number", alternativeName: "maxTimeToFinish", default: 0, minValue: 0 },
38197
38280
  {
38198
38281
  name: "navigationTitle",
38199
38282
  visibleIf: function (obj) {
@@ -39219,12 +39302,18 @@ var survey_SurveyModel = /** @class */ (function (_super) {
39219
39302
  * An event that is raised every second while the timer is running.
39220
39303
  *
39221
39304
  * 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
39305
+ * @see timeLimit
39306
+ * @see timeLimitPerPage
39307
+ * @see showTimer
39308
+ * @see timerLocation
39225
39309
  * @see startTimer
39226
39310
  */
39227
- _this.onTimer = _this.addEvent();
39311
+ _this.onTimerTick = _this.addEvent();
39312
+ /**
39313
+ * Obsolete. Use the [`onTimerTick`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onTimerTick) event instead.
39314
+ * @deprecated
39315
+ */
39316
+ _this.onTimer = _this.onTimerTick;
39228
39317
  _this.onTimerPanelInfoText = _this.addEvent();
39229
39318
  /**
39230
39319
  * 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 +39410,18 @@ var survey_SurveyModel = /** @class */ (function (_super) {
39321
39410
  */
39322
39411
  _this.jsonErrors = null;
39323
39412
  _this.cssValue = null;
39413
+ /**
39414
+ * 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/).
39415
+ *
39416
+ * Possible values:
39417
+ *
39418
+ * - `true` - Displays the survey header on the Complete page.
39419
+ * - `false` - Hides the header when users reach the Complete page.
39420
+ * - `"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).
39421
+ *
39422
+ * > This property cannot be specified in the survey JSON schema. Use dot notation to specify it.
39423
+ */
39424
+ _this.showHeaderOnCompletePage = "auto";
39324
39425
  _this._isLazyRenderingSuspended = false;
39325
39426
  /**
39326
39427
  * Specifies whether to hide validation errors thrown by the Required validation in the UI.
@@ -39397,7 +39498,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
39397
39498
  _this.createLocalizableString("editText", _this, false, true);
39398
39499
  _this.createLocalizableString("questionTitleTemplate", _this, true);
39399
39500
  _this.timerModelValue = new surveyTimerModel_SurveyTimerModel(_this);
39400
- _this.timerModelValue.onTimer = function (page) {
39501
+ _this.timerModelValue.onTimerTick = function (page) {
39401
39502
  _this.doTimer(page);
39402
39503
  };
39403
39504
  _this.createNewArray("pages", function (value) {
@@ -39774,7 +39875,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
39774
39875
  Object.defineProperty(SurveyModel.prototype, "bodyCss", {
39775
39876
  get: function () {
39776
39877
  return new CssClassBuilder().append(this.css.body)
39777
- .append(this.css.bodyWithTimer, this.showTimerPanel != "none" && this.state === "running")
39878
+ .append(this.css.bodyWithTimer, this.showTimer && this.state === "running")
39778
39879
  .append(this.css.body + "--" + this.calculatedWidthMode).toString();
39779
39880
  },
39780
39881
  enumerable: false,
@@ -44413,7 +44514,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
44413
44514
  this.onScrollingElementToTop.fire(this, options);
44414
44515
  if (!options.cancel) {
44415
44516
  var elementPage_1 = this.getPageByElement(element);
44416
- if (this.isLazyRendering) {
44517
+ if (this.isLazyRendering && !!elementPage_1) {
44417
44518
  var elementsToRenderBefore = 1;
44418
44519
  var rootElement = settings.environment.rootElement;
44419
44520
  var surveyRootElement = this.rootElement || passedRootElement || rootElement;
@@ -46177,64 +46278,117 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46177
46278
  };
46178
46279
  Object.defineProperty(SurveyModel.prototype, "showTimerPanel", {
46179
46280
  /**
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).
46281
+ * 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.
46282
+ * @deprecated
46283
+ */
46284
+ get: function () {
46285
+ if (!this.showTimer)
46286
+ return "none";
46287
+ return this.timerLocation;
46288
+ },
46289
+ set: function (val) {
46290
+ this.showTimer = val !== "none";
46291
+ if (this.showTimer) {
46292
+ this.timerLocation = val;
46293
+ }
46294
+ },
46295
+ enumerable: false,
46296
+ configurable: true
46297
+ });
46298
+ Object.defineProperty(SurveyModel.prototype, "showTimer", {
46299
+ /**
46300
+ * Specifies the timer's visibility. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).
46181
46301
  *
46182
- * Possible values:
46302
+ * Default value: `false`
46183
46303
  *
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.
46304
+ * 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
46305
  *
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.
46306
+ * 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
46307
  *
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
46308
+ * 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.
46309
+ * @see timerLocation
46193
46310
  * @see timeSpent
46194
- * @see onTimer
46311
+ * @see onTimerTick
46312
+ */
46313
+ get: function () {
46314
+ return this.getPropertyValue("showTimer");
46315
+ },
46316
+ set: function (val) {
46317
+ this.setPropertyValue("showTimer", val);
46318
+ },
46319
+ enumerable: false,
46320
+ configurable: true
46321
+ });
46322
+ Object.defineProperty(SurveyModel.prototype, "timerLocation", {
46323
+ /**
46324
+ * 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`.
46325
+ *
46326
+ * Possible values:
46327
+ *
46328
+ * - `"top"` (default) - Displays the timer at the top of the survey.
46329
+ * - `"bottom"` - Displays the timer at the bottom of the survey.
46330
+ * @see onTimerTick
46195
46331
  */
46196
46332
  get: function () {
46197
- return this.getPropertyValue("showTimerPanel");
46333
+ return this.getPropertyValue("timerLocation");
46198
46334
  },
46199
46335
  set: function (val) {
46200
- this.setPropertyValue("showTimerPanel", val);
46336
+ this.setPropertyValue("timerLocation", val);
46201
46337
  },
46202
46338
  enumerable: false,
46203
46339
  configurable: true
46204
46340
  });
46205
46341
  Object.defineProperty(SurveyModel.prototype, "isTimerPanelShowingOnTop", {
46206
46342
  get: function () {
46207
- return this.showTimerPanel == "top";
46343
+ return this.showTimer && this.timerLocation === "top";
46208
46344
  },
46209
46345
  enumerable: false,
46210
46346
  configurable: true
46211
46347
  });
46212
46348
  Object.defineProperty(SurveyModel.prototype, "isTimerPanelShowingOnBottom", {
46213
46349
  get: function () {
46214
- return this.showTimerPanel == "bottom";
46350
+ return this.showTimer && this.timerLocation === "bottom";
46215
46351
  },
46216
46352
  enumerable: false,
46217
46353
  configurable: true
46218
46354
  });
46219
- Object.defineProperty(SurveyModel.prototype, "showTimerPanelMode", {
46355
+ Object.defineProperty(SurveyModel.prototype, "timerInfoMode", {
46220
46356
  /**
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).
46357
+ * 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
46358
  *
46223
46359
  * Possible values:
46224
46360
  *
46225
46361
  * - `"survey"` - Displays only the survey timer.
46226
46362
  * - `"page"` - Displays only the page timer.
46227
- * - `"all"` (default) - Displays both the survey and page timers.
46363
+ * - `"combined"` (default) - Displays both the survey and page timers.
46228
46364
  * @see timeSpent
46229
- * @see onTimer
46365
+ * @see onTimerTick
46230
46366
  * @see startTimer
46231
46367
  * @see stopTimer
46232
46368
  */
46233
46369
  get: function () {
46234
- return this.getPropertyValue("showTimerPanelMode");
46370
+ return this.getTimerInfoVal(this.getPropertyValue("timerInfoMode"));
46371
+ },
46372
+ set: function (val) {
46373
+ this.setPropertyValue("timerInfoMode", val);
46374
+ },
46375
+ enumerable: false,
46376
+ configurable: true
46377
+ });
46378
+ SurveyModel.prototype.getTimerInfoVal = function (val) {
46379
+ return val === "all" ? "combined" : val;
46380
+ };
46381
+ Object.defineProperty(SurveyModel.prototype, "showTimerPanelMode", {
46382
+ /**
46383
+ * Obsolete. Use the [`timerInfoMode`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#timerInfoMode) property instead.
46384
+ * @deprecated
46385
+ */
46386
+ get: function () {
46387
+ var res = this.timerInfoMode;
46388
+ return res === "combined" ? "all" : res;
46235
46389
  },
46236
46390
  set: function (val) {
46237
- this.setPropertyValue("showTimerPanelMode", val);
46391
+ this.timerInfoMode = this.getTimerInfoVal(val);
46238
46392
  },
46239
46393
  enumerable: false,
46240
46394
  configurable: true
@@ -46353,11 +46507,11 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46353
46507
  var pageSpent = page.timeSpent;
46354
46508
  var surveySpent = this.timeSpent;
46355
46509
  var pageLimitSec = page.getMaxTimeToFinish();
46356
- var surveyLimit = this.maxTimeToFinish;
46357
- if (this.showTimerPanelMode == "page") {
46510
+ var surveyLimit = this.timeLimit;
46511
+ if (this.timerInfoMode == "page") {
46358
46512
  return { spent: pageSpent, limit: pageLimitSec };
46359
46513
  }
46360
- if (this.showTimerPanelMode == "survey") {
46514
+ if (this.timerInfoMode == "survey") {
46361
46515
  return { spent: surveySpent, limit: surveyLimit };
46362
46516
  }
46363
46517
  else {
@@ -46383,16 +46537,16 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46383
46537
  var surveySpent = this.getDisplayTime(this.timeSpent);
46384
46538
  var pageLimitSec = page.getMaxTimeToFinish();
46385
46539
  var pageLimit = this.getDisplayTime(pageLimitSec);
46386
- var surveyLimit = this.getDisplayTime(this.maxTimeToFinish);
46387
- if (this.showTimerPanelMode == "page")
46540
+ var surveyLimit = this.getDisplayTime(this.timeLimit);
46541
+ if (this.timerInfoMode == "page")
46388
46542
  return this.getTimerInfoPageText(page, pageSpent, pageLimit);
46389
- if (this.showTimerPanelMode == "survey")
46543
+ if (this.timerInfoMode == "survey")
46390
46544
  return this.getTimerInfoSurveyText(surveySpent, surveyLimit);
46391
- if (this.showTimerPanelMode == "all") {
46392
- if (pageLimitSec <= 0 && this.maxTimeToFinish <= 0) {
46545
+ if (this.timerInfoMode == "combined") {
46546
+ if (pageLimitSec <= 0 && this.timeLimit <= 0) {
46393
46547
  return this.getLocalizationFormatString("timerSpentAll", pageSpent, surveySpent);
46394
46548
  }
46395
- if (pageLimitSec > 0 && this.maxTimeToFinish > 0) {
46549
+ if (pageLimitSec > 0 && this.timeLimit > 0) {
46396
46550
  return this.getLocalizationFormatString("timerLimitAll", pageSpent, pageLimit, surveySpent, surveyLimit);
46397
46551
  }
46398
46552
  var pageText = this.getTimerInfoPageText(page, pageSpent, pageLimit);
@@ -46407,7 +46561,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46407
46561
  : this.getLocalizationFormatString("timerSpentPage", pageSpent, pageLimit);
46408
46562
  };
46409
46563
  SurveyModel.prototype.getTimerInfoSurveyText = function (surveySpent, surveyLimit) {
46410
- var strName = this.maxTimeToFinish > 0 ? "timerLimitSurvey" : "timerSpentSurvey";
46564
+ var strName = this.timeLimit > 0 ? "timerLimitSurvey" : "timerSpentSurvey";
46411
46565
  return this.getLocalizationFormatString(strName, surveySpent, surveyLimit);
46412
46566
  };
46413
46567
  SurveyModel.prototype.getDisplayClockTime = function (val) {
@@ -46443,10 +46597,10 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46443
46597
  /**
46444
46598
  * 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
46599
  * @see stopTimer
46446
- * @see maxTimeToFinish
46447
- * @see maxTimeToFinishPage
46600
+ * @see timeLimit
46601
+ * @see timeLimitPerPage
46448
46602
  * @see timeSpent
46449
- * @see onTimer
46603
+ * @see onTimerTick
46450
46604
  */
46451
46605
  SurveyModel.prototype.startTimer = function () {
46452
46606
  if (this.isEditMode) {
@@ -46454,17 +46608,17 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46454
46608
  }
46455
46609
  };
46456
46610
  SurveyModel.prototype.startTimerFromUI = function () {
46457
- if (this.showTimerPanel != "none" && this.state === "running") {
46611
+ if (this.showTimer && this.state === "running") {
46458
46612
  this.startTimer();
46459
46613
  }
46460
46614
  };
46461
46615
  /**
46462
46616
  * Stops the timer. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).
46463
46617
  * @see startTimer
46464
- * @see maxTimeToFinish
46465
- * @see maxTimeToFinishPage
46618
+ * @see timeLimit
46619
+ * @see timeLimitPerPage
46466
46620
  * @see timeSpent
46467
- * @see onTimer
46621
+ * @see onTimerTick
46468
46622
  */
46469
46623
  SurveyModel.prototype.stopTimer = function () {
46470
46624
  this.timerModel.stop();
@@ -46476,8 +46630,8 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46476
46630
  * 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
46631
  *
46478
46632
  * 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
46633
+ * @see timeLimit
46634
+ * @see timeLimitPerPage
46481
46635
  * @see startTimer
46482
46636
  */
46483
46637
  get: function () { return this.timerModel.spent; },
@@ -46485,52 +46639,80 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46485
46639
  enumerable: false,
46486
46640
  configurable: true
46487
46641
  });
46488
- Object.defineProperty(SurveyModel.prototype, "maxTimeToFinish", {
46642
+ Object.defineProperty(SurveyModel.prototype, "timeLimit", {
46489
46643
  /**
46490
46644
  * 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
46645
  *
46492
- * A negative value or 0 sets an unlimited time period.
46646
+ * Default value: 0 (time is unlimited)
46493
46647
  *
46494
46648
  * [View Demo](https://surveyjs.io/form-library/examples/make-quiz-javascript/ (linkStyle))
46495
- * @see maxTimeToFinishPage
46649
+ * @see timeLimitPerPage
46496
46650
  * @see startTimer
46497
46651
  * @see timeSpent
46498
46652
  */
46499
46653
  get: function () {
46500
- return this.getPropertyValue("maxTimeToFinish", 0);
46654
+ return this.getPropertyValue("timeLimit", 0);
46501
46655
  },
46502
46656
  set: function (val) {
46503
- this.setPropertyValue("maxTimeToFinish", val);
46657
+ this.setPropertyValue("timeLimit", val);
46504
46658
  },
46505
46659
  enumerable: false,
46506
46660
  configurable: true
46507
46661
  });
46508
- Object.defineProperty(SurveyModel.prototype, "maxTimeToFinishPage", {
46662
+ Object.defineProperty(SurveyModel.prototype, "maxTimeToFinish", {
46663
+ /**
46664
+ * Obsolete. Use the [`timeLimit`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#timeLimit) property instead.
46665
+ * @deprecated
46666
+ */
46667
+ get: function () {
46668
+ return this.timeLimit;
46669
+ },
46670
+ set: function (val) {
46671
+ this.timeLimit = val;
46672
+ },
46673
+ enumerable: false,
46674
+ configurable: true
46675
+ });
46676
+ Object.defineProperty(SurveyModel.prototype, "timeLimitPerPage", {
46509
46677
  /**
46510
46678
  * 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
46679
  *
46512
- * A negative value or 0 sets an unlimited time period.
46680
+ * Default value: 0 (time is unlimited)
46513
46681
  *
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.
46682
+ * 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
46683
  *
46516
46684
  * [View Demo](https://surveyjs.io/form-library/examples/make-quiz-javascript/ (linkStyle))
46517
- * @see maxTimeToFinish
46685
+ * @see timeLimit
46518
46686
  * @see startTimer
46519
46687
  * @see timeSpent
46520
46688
  */
46521
46689
  get: function () {
46522
- return this.getPropertyValue("maxTimeToFinishPage", 0);
46690
+ return this.getPropertyValue("timeLimitPerPage", 0);
46691
+ },
46692
+ set: function (val) {
46693
+ this.setPropertyValue("timeLimitPerPage", val);
46694
+ },
46695
+ enumerable: false,
46696
+ configurable: true
46697
+ });
46698
+ Object.defineProperty(SurveyModel.prototype, "maxTimeToFinishPage", {
46699
+ /**
46700
+ * Obsolete. Use the [`timeLimitPerPage`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#timeLimitPerPage) property instead.
46701
+ * @deprecated
46702
+ */
46703
+ get: function () {
46704
+ return this.timeLimitPerPage;
46523
46705
  },
46524
46706
  set: function (val) {
46525
- this.setPropertyValue("maxTimeToFinishPage", val);
46707
+ this.timeLimitPerPage = val;
46526
46708
  },
46527
46709
  enumerable: false,
46528
46710
  configurable: true
46529
46711
  });
46530
46712
  SurveyModel.prototype.doTimer = function (page) {
46531
- this.onTimer.fire(this, {});
46532
- if (this.maxTimeToFinish > 0 && this.maxTimeToFinish <= this.timeSpent) {
46533
- this.timeSpent = this.maxTimeToFinish;
46713
+ this.onTimerTick.fire(this, {});
46714
+ if (this.timeLimit > 0 && this.timeLimit <= this.timeSpent) {
46715
+ this.timeSpent = this.timeLimit;
46534
46716
  this.completeLastPage();
46535
46717
  }
46536
46718
  if (page) {
@@ -46838,7 +47020,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
46838
47020
  }
46839
47021
  }
46840
47022
  else if (isStrCiEqual(layoutElement.id, "advanced-header")) {
46841
- if ((this.state === "running" || this.state === "starting") && layoutElement.container === container) {
47023
+ if ((this.state === "running" || this.state === "starting" || (this.showHeaderOnCompletePage === true && this.state === "completed")) && layoutElement.container === container) {
46842
47024
  containerLayoutElements.push(layoutElement);
46843
47025
  }
46844
47026
  }
@@ -47362,18 +47544,13 @@ Serializer.addClass("survey", [
47362
47544
  default: "noPreview",
47363
47545
  choices: ["noPreview", "showAllQuestions", "showAnsweredQuestions"],
47364
47546
  },
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
- },
47547
+ { name: "showTimer:boolean" },
47548
+ { name: "timeLimit:number", alternativeName: "maxTimeToFinish", default: 0, minValue: 0, enableIf: function (obj) { return obj.showTimer; } },
47549
+ { name: "timeLimitPerPage:number", alternativeName: "maxTimeToFinishPage", default: 0, minValue: 0, enableIf: function (obj) { return obj.showTimer; } },
47550
+ { name: "timerLocation", default: "top", choices: ["top", "bottom"], enableIf: function (obj) { return obj.showTimer; } },
47551
+ { name: "timerInfoMode", alternativeName: "showTimerPanelMode",
47552
+ default: "combined", choices: ["page", "survey", "combined"], enableIf: function (obj) { return obj.showTimer; } },
47553
+ { name: "showTimerPanel", visible: false, isSerializable: false },
47377
47554
  {
47378
47555
  name: "widthMode",
47379
47556
  default: "auto",
@@ -47426,6 +47603,7 @@ var question_baseselect_decorate = (undefined && undefined.__decorate) || functi
47426
47603
 
47427
47604
 
47428
47605
 
47606
+
47429
47607
  /**
47430
47608
  * 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
47609
  */
@@ -48064,6 +48242,9 @@ var question_baseselect_QuestionSelectBase = /** @class */ (function (_super) {
48064
48242
  return this.otherValueCore;
48065
48243
  };
48066
48244
  QuestionSelectBase.prototype.selectOtherValueFromComment = function (val) {
48245
+ if (val) {
48246
+ this.prevIsOtherSelected = true;
48247
+ }
48067
48248
  this.value = val ? this.otherItem.value : undefined;
48068
48249
  };
48069
48250
  QuestionSelectBase.prototype.setQuestionComment = function (newValue) {
@@ -49656,24 +49837,8 @@ var question_baseselect_QuestionSelectBase = /** @class */ (function (_super) {
49656
49837
  QuestionSelectBase.prototype.getItemEnabled = function (item) {
49657
49838
  return !this.isDisabledAttr && item.isEnabled;
49658
49839
  };
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
49840
  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
- }
49841
+ survey_element_SurveyElement.FocusElement(this.otherId);
49677
49842
  };
49678
49843
  QuestionSelectBase.prototype.onValueChanged = function () {
49679
49844
  _super.prototype.onValueChanged.call(this);
@@ -58598,7 +58763,6 @@ var question_comment_extends = (undefined && undefined.__extends) || (function (
58598
58763
 
58599
58764
 
58600
58765
 
58601
-
58602
58766
  /**
58603
58767
  * A class that describes the Long Text question type.
58604
58768
  *
@@ -58747,15 +58911,8 @@ var question_comment_QuestionCommentModel = /** @class */ (function (_super) {
58747
58911
  QuestionCommentModel.prototype.afterRenderQuestionElement = function (el) {
58748
58912
  var root = settings.environment.root;
58749
58913
  this.element = root.getElementById(this.inputId) || el;
58750
- this.updateElement();
58751
58914
  _super.prototype.afterRenderQuestionElement.call(this, el);
58752
58915
  };
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
58916
  QuestionCommentModel.prototype.beforeDestroyQuestionElement = function (el) {
58760
58917
  _super.prototype.beforeDestroyQuestionElement.call(this, el);
58761
58918
  this.element = undefined;
@@ -58763,8 +58920,6 @@ var question_comment_QuestionCommentModel = /** @class */ (function (_super) {
58763
58920
  QuestionCommentModel.prototype.onInput = function (event) {
58764
58921
  if (this.isInputTextUpdate)
58765
58922
  this.value = event.target.value;
58766
- else
58767
- this.updateElement();
58768
58923
  this.updateRemainingCharacterCounter(event.target.value);
58769
58924
  };
58770
58925
  QuestionCommentModel.prototype.onBlurCore = function (event) {
@@ -58777,15 +58932,6 @@ var question_comment_QuestionCommentModel = /** @class */ (function (_super) {
58777
58932
  event.stopPropagation();
58778
58933
  }
58779
58934
  };
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
58935
  QuestionCommentModel.prototype.setNewValue = function (newValue) {
58790
58936
  if (!this.acceptCarriageReturn && !!newValue) {
58791
58937
  // eslint-disable-next-line no-control-regex
@@ -59063,6 +59209,7 @@ var question_file_decorate = (undefined && undefined.__decorate) || function (de
59063
59209
 
59064
59210
 
59065
59211
 
59212
+
59066
59213
  function dataUrl2File(dataUrl, fileName, type) {
59067
59214
  var str = atob(dataUrl.split(",")[1]);
59068
59215
  var buffer = new Uint8Array(str.split("").map(function (c) { return c.charCodeAt(0); })).buffer;
@@ -59209,6 +59356,32 @@ var question_file_QuestionFileModelBase = /** @class */ (function (_super) {
59209
59356
  *
59210
59357
  * [View Demo](https://surveyjs.io/form-library/examples/file-upload/ (linkStyle))
59211
59358
  */
59359
+ var question_file_QuestionFilePage = /** @class */ (function (_super) {
59360
+ question_file_extends(QuestionFilePage, _super);
59361
+ function QuestionFilePage(question, index) {
59362
+ var _this = _super.call(this) || this;
59363
+ _this.question = question;
59364
+ _this.index = index;
59365
+ _this.id = QuestionFilePage.getId();
59366
+ return _this;
59367
+ }
59368
+ QuestionFilePage.getId = function () {
59369
+ return "sv_sfp_" + QuestionFilePage.pageCounter++;
59370
+ };
59371
+ Object.defineProperty(QuestionFilePage.prototype, "css", {
59372
+ get: function () {
59373
+ return this.question.cssClasses.page;
59374
+ },
59375
+ enumerable: false,
59376
+ configurable: true
59377
+ });
59378
+ QuestionFilePage.pageCounter = 0;
59379
+ question_file_decorate([
59380
+ propertyArray({})
59381
+ ], QuestionFilePage.prototype, "items", void 0);
59382
+ return QuestionFilePage;
59383
+ }(base_Base));
59384
+
59212
59385
  var question_file_QuestionFileModel = /** @class */ (function (_super) {
59213
59386
  question_file_extends(QuestionFileModel, _super);
59214
59387
  function QuestionFileModel(name) {
@@ -59217,6 +59390,10 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59217
59390
  _this.fileNavigator = new container_ActionContainer();
59218
59391
  _this.canFlipCameraValue = undefined;
59219
59392
  _this.prevPreviewLength = 0;
59393
+ _this._renderedPages = [];
59394
+ _this.pagesAnimation = new AnimationTab(_this.getPagesAnimationOptions(), function (val) {
59395
+ _this._renderedPages = val;
59396
+ }, function () { return _this.renderedPages; });
59220
59397
  _this.calcAvailableItemsCount = function (availableWidth, itemWidth, gap) {
59221
59398
  var itemsCount = Math.floor(availableWidth / (itemWidth + gap));
59222
59399
  if ((itemsCount + 1) * (itemWidth + gap) - gap <= availableWidth)
@@ -59295,6 +59472,7 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59295
59472
  id: "prevPage",
59296
59473
  iconSize: 16,
59297
59474
  action: function () {
59475
+ _this.navigationDirection = "left";
59298
59476
  _this.indexToShow = _this.previewValue.length && ((_this.indexToShow - 1 + _this.pagesCount) % _this.pagesCount) || 0;
59299
59477
  _this.fileIndexAction.title = _this.getFileIndexCaption();
59300
59478
  }
@@ -59303,6 +59481,7 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59303
59481
  id: "nextPage",
59304
59482
  iconSize: 16,
59305
59483
  action: function () {
59484
+ _this.navigationDirection = "right";
59306
59485
  _this.indexToShow = _this.previewValue.length && ((_this.indexToShow + 1) % _this.pagesCount) || 0;
59307
59486
  _this.fileIndexAction.title = _this.getFileIndexCaption();
59308
59487
  }
@@ -59378,6 +59557,13 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59378
59557
  _this.fileNavigator.actions = [_this.prevFileAction, _this.fileIndexAction, _this.nextFileAction];
59379
59558
  return _this;
59380
59559
  }
59560
+ Object.defineProperty(QuestionFileModel.prototype, "supportFileNavigator", {
59561
+ get: function () {
59562
+ return this.isDefaultV2Theme;
59563
+ },
59564
+ enumerable: false,
59565
+ configurable: true
59566
+ });
59381
59567
  Object.defineProperty(QuestionFileModel.prototype, "isFileLoading", {
59382
59568
  get: function () { return this.isFileLoadingValue; },
59383
59569
  set: function (val) {
@@ -59511,15 +59697,42 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59511
59697
  return this.getLocalizationFormatString("indexText", this.indexToShow + 1, this.pagesCount);
59512
59698
  };
59513
59699
  QuestionFileModel.prototype.updateFileNavigator = function () {
59700
+ this.updatePages();
59701
+ this.navigationDirection = undefined;
59514
59702
  this.indexToShow = this.previewValue.length && ((this.indexToShow + this.pagesCount) % this.pagesCount) || 0;
59515
59703
  this.fileIndexAction.title = this.getFileIndexCaption();
59516
59704
  };
59705
+ QuestionFileModel.prototype.updateRenderedPages = function () {
59706
+ if (this.pages && this.pages[this.indexToShow]) {
59707
+ this.renderedPages = [this.pages[this.indexToShow]];
59708
+ }
59709
+ };
59710
+ QuestionFileModel.prototype.updatePages = function () {
59711
+ var _this = this;
59712
+ this.blockAnimations();
59713
+ var currentPage;
59714
+ this.pages = [];
59715
+ this.renderedPages = [];
59716
+ this.previewValue.forEach(function (val, index) {
59717
+ if (index % _this.pageSize == 0) {
59718
+ currentPage = new question_file_QuestionFilePage(_this, _this.pages.length);
59719
+ _this.pages.push(currentPage);
59720
+ }
59721
+ currentPage.items.push(val);
59722
+ });
59723
+ this.releaseAnimations();
59724
+ this.updateRenderedPages();
59725
+ };
59517
59726
  QuestionFileModel.prototype.previewValueChanged = function () {
59518
59727
  var _this = this;
59728
+ this.navigationDirection = undefined;
59519
59729
  if (this.previewValue.length !== this.prevPreviewLength) {
59520
59730
  if (this.previewValue.length > 0) {
59521
59731
  if (this.prevPreviewLength > this.previewValue.length) {
59522
- this.indexToShow = this.indexToShow >= this.pagesCount && this.indexToShow > 0 ? this.pagesCount - 1 : this.indexToShow;
59732
+ if (this.indexToShow >= this.pagesCount && this.indexToShow > 0) {
59733
+ this.indexToShow = this.pagesCount - 1;
59734
+ this.navigationDirection = "left-delete";
59735
+ }
59523
59736
  }
59524
59737
  else {
59525
59738
  this.indexToShow = Math.floor(this.prevPreviewLength / this.pageSize);
@@ -59529,6 +59742,7 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59529
59742
  this.indexToShow = 0;
59530
59743
  }
59531
59744
  }
59745
+ this.updatePages();
59532
59746
  this.fileIndexAction.title = this.getFileIndexCaption();
59533
59747
  this.containsMultiplyFiles = this.previewValue.length > 1;
59534
59748
  if (this.previewValue.length > 0 && !this.calculatedGapBetweenItems && !this.calculatedItemWidth) {
@@ -59538,11 +59752,6 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59538
59752
  }
59539
59753
  this.prevPreviewLength = this.previewValue.length;
59540
59754
  };
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
59755
  QuestionFileModel.prototype.getType = function () {
59547
59756
  return "file";
59548
59757
  };
@@ -59988,6 +60197,7 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
59988
60197
  content: content,
59989
60198
  });
59990
60199
  });
60200
+ this.previewValueChanged();
59991
60201
  }
59992
60202
  else {
59993
60203
  if (!!this._previewLoader) {
@@ -60007,7 +60217,6 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
60007
60217
  });
60008
60218
  this._previewLoader.load(newValues);
60009
60219
  }
60010
- this.previewValueChanged();
60011
60220
  };
60012
60221
  QuestionFileModel.prototype.getIsQuestionReady = function () {
60013
60222
  return _super.prototype.getIsQuestionReady.call(this) && !this.isFileLoading;
@@ -60151,6 +60360,46 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
60151
60360
  QuestionFileModel.prototype.getFileListSelector = function () {
60152
60361
  return classesToSelector(this.cssClasses.fileList);
60153
60362
  };
60363
+ Object.defineProperty(QuestionFileModel.prototype, "renderedPages", {
60364
+ get: function () {
60365
+ return this._renderedPages;
60366
+ },
60367
+ set: function (val) {
60368
+ this.pagesAnimation.sync(val);
60369
+ },
60370
+ enumerable: false,
60371
+ configurable: true
60372
+ });
60373
+ QuestionFileModel.prototype.getPagesAnimationOptions = function () {
60374
+ var _this = this;
60375
+ return {
60376
+ getEnterOptions: function (page) {
60377
+ var pageClass = _this.cssClasses.page;
60378
+ return { cssClass: pageClass ? new CssClassBuilder()
60379
+ .append(pageClass + "--enter-from-left", _this.navigationDirection == "left" || _this.navigationDirection == "left-delete")
60380
+ .append(pageClass + "--enter-from-right", _this.navigationDirection == "right").toString() : ""
60381
+ };
60382
+ },
60383
+ getLeaveOptions: function (page) {
60384
+ var pageClass = _this.cssClasses.page;
60385
+ return {
60386
+ cssClass: pageClass ? new CssClassBuilder()
60387
+ .append(pageClass + "--leave-to-left", _this.navigationDirection == "right")
60388
+ .append(pageClass + "--leave-to-right", _this.navigationDirection == "left").toString() : ""
60389
+ };
60390
+ },
60391
+ getAnimatedElement: function (page) {
60392
+ var _a;
60393
+ return (_a = _this.rootElement) === null || _a === void 0 ? void 0 : _a.querySelector("#" + page.id);
60394
+ },
60395
+ isAnimationEnabled: function () {
60396
+ return _this.animationAllowed && !!_this.rootElement;
60397
+ },
60398
+ getRerenderEvent: function () {
60399
+ return _this.onElementRerendered;
60400
+ }
60401
+ };
60402
+ };
60154
60403
  QuestionFileModel.prototype.triggerResponsiveness = function (hard) {
60155
60404
  if (hard) {
60156
60405
  this.calculatedGapBetweenItems = undefined;
@@ -60159,17 +60408,19 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
60159
60408
  _super.prototype.triggerResponsiveness.call(this);
60160
60409
  };
60161
60410
  QuestionFileModel.prototype.processResponsiveness = function (_, availableWidth) {
60162
- var _this = this;
60163
60411
  this._width = availableWidth;
60164
60412
  if (this.rootElement) {
60165
60413
  if ((!this.calculatedGapBetweenItems || !this.calculatedItemWidth) && this.allowMultiple) {
60166
60414
  var fileListSelector = this.getFileListSelector();
60167
60415
  var fileListElement = fileListSelector ? this.rootElement.querySelector(this.getFileListSelector()) : undefined;
60168
60416
  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));
60417
+ var visiblePage = fileListElement.querySelector(classesToSelector(this.cssClasses.page));
60418
+ if (visiblePage) {
60419
+ var firstVisibleItem = visiblePage.querySelector(classesToSelector(this.cssClasses.previewItem));
60420
+ this.calculatedGapBetweenItems = Math.ceil(Number.parseFloat(DomDocumentHelper.getComputedStyle(visiblePage).gap));
60421
+ if (firstVisibleItem) {
60422
+ this.calculatedItemWidth = Math.ceil(Number.parseFloat(DomDocumentHelper.getComputedStyle(firstVisibleItem).width));
60423
+ }
60173
60424
  }
60174
60425
  }
60175
60426
  }
@@ -60222,7 +60473,12 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
60222
60473
  propertyArray({})
60223
60474
  ], QuestionFileModel.prototype, "previewValue", void 0);
60224
60475
  question_file_decorate([
60225
- jsonobject_property({ defaultValue: 0 })
60476
+ propertyArray({})
60477
+ ], QuestionFileModel.prototype, "pages", void 0);
60478
+ question_file_decorate([
60479
+ jsonobject_property({ defaultValue: 0, onSet: function (val, target) {
60480
+ target.updateRenderedPages();
60481
+ } })
60226
60482
  ], QuestionFileModel.prototype, "indexToShow", void 0);
60227
60483
  question_file_decorate([
60228
60484
  jsonobject_property({
@@ -60286,6 +60542,9 @@ var question_file_QuestionFileModel = /** @class */ (function (_super) {
60286
60542
  question_file_decorate([
60287
60543
  jsonobject_property()
60288
60544
  ], QuestionFileModel.prototype, "locRenderedPlaceholderValue", void 0);
60545
+ question_file_decorate([
60546
+ propertyArray()
60547
+ ], QuestionFileModel.prototype, "_renderedPages", void 0);
60289
60548
  return QuestionFileModel;
60290
60549
  }(question_file_QuestionFileModelBase));
60291
60550
 
@@ -70272,8 +70531,8 @@ Serializer.addClass("currencymask", [
70272
70531
 
70273
70532
  var Version;
70274
70533
  var ReleaseDate;
70275
- Version = "" + "1.12.4";
70276
- ReleaseDate = "" + "2024-10-01";
70534
+ Version = "" + "1.12.5";
70535
+ ReleaseDate = "" + "2024-10-07";
70277
70536
  function checkLibraryVersion(ver, libraryName) {
70278
70537
  if (Version != ver) {
70279
70538
  var str = "survey-core has version '" + Version + "' and " + libraryName