@formio/js 5.0.0-dev.5610.c46fab6 → 5.0.0-dev.5613.3476921

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 (448) hide show
  1. package/dist/formio.embed.js +1 -1
  2. package/dist/formio.embed.min.js +1 -1
  3. package/dist/formio.embed.min.js.LICENSE.txt +1 -1
  4. package/dist/formio.form.js +1199 -651
  5. package/dist/formio.form.min.js +1 -1
  6. package/dist/formio.form.min.js.LICENSE.txt +11 -3
  7. package/dist/formio.full.js +919 -691
  8. package/dist/formio.full.min.js +1 -1
  9. package/dist/formio.full.min.js.LICENSE.txt +11 -3
  10. package/dist/formio.js +16 -16
  11. package/dist/formio.min.js +1 -1
  12. package/dist/formio.min.js.LICENSE.txt +1 -1
  13. package/dist/formio.utils.js +493 -1861
  14. package/dist/formio.utils.min.js +1 -1
  15. package/dist/formio.utils.min.js.LICENSE.txt +2 -12
  16. package/lib/cjs/Element.d.ts +96 -86
  17. package/lib/cjs/Element.js +78 -68
  18. package/lib/cjs/Form.d.ts +36 -365
  19. package/lib/cjs/Form.js +64 -50
  20. package/lib/cjs/FormBuilder.d.ts +2 -187
  21. package/lib/cjs/FormBuilder.js +8 -30
  22. package/lib/cjs/PDF.d.ts +13 -11
  23. package/lib/cjs/PDF.js +8 -6
  24. package/lib/cjs/Webform.d.ts +139 -180
  25. package/lib/cjs/Webform.js +298 -313
  26. package/lib/cjs/WebformBuilder.d.ts +14 -16
  27. package/lib/cjs/WebformBuilder.js +11 -17
  28. package/lib/cjs/Wizard.d.ts +21 -31
  29. package/lib/cjs/Wizard.js +19 -42
  30. package/lib/cjs/WizardBuilder.d.ts +1 -1
  31. package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.d.ts +5 -8
  32. package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.js +3 -6
  33. package/lib/cjs/components/Components.d.ts +4 -4
  34. package/lib/cjs/components/Components.js +3 -3
  35. package/lib/cjs/components/_classes/component/Component.d.ts +269 -502
  36. package/lib/cjs/components/_classes/component/Component.form.d.ts +3 -6
  37. package/lib/cjs/components/_classes/component/Component.form.js +0 -5
  38. package/lib/cjs/components/_classes/component/Component.js +189 -433
  39. package/lib/cjs/components/_classes/component/editForm/Component.edit.display.js +8 -0
  40. package/lib/cjs/components/_classes/component/editForm/Component.edit.validation.js +2 -2
  41. package/lib/cjs/components/_classes/component/editForm/utils.js +2 -2
  42. package/lib/cjs/components/_classes/field/Field.d.ts +2 -11
  43. package/lib/cjs/components/_classes/field/Field.js +1 -13
  44. package/lib/cjs/components/_classes/input/Input.d.ts +3 -4
  45. package/lib/cjs/components/_classes/input/Input.js +2 -2
  46. package/lib/cjs/components/_classes/list/ListComponent.d.ts +2 -2
  47. package/lib/cjs/components/_classes/list/ListComponent.form.d.ts +3 -6
  48. package/lib/cjs/components/_classes/list/ListComponent.form.js +0 -5
  49. package/lib/cjs/components/_classes/multivalue/Multivalue.d.ts +12 -43
  50. package/lib/cjs/components/_classes/multivalue/Multivalue.js +3 -37
  51. package/lib/cjs/components/_classes/nested/NestedComponent.d.ts +67 -163
  52. package/lib/cjs/components/_classes/nested/NestedComponent.form.d.ts +3 -6
  53. package/lib/cjs/components/_classes/nested/NestedComponent.form.js +0 -5
  54. package/lib/cjs/components/_classes/nested/NestedComponent.js +54 -175
  55. package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.d.ts +2 -2
  56. package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.js +1 -1
  57. package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.d.ts +1 -7
  58. package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.js +3 -2
  59. package/lib/cjs/components/address/Address.d.ts +2 -4
  60. package/lib/cjs/components/address/Address.form.d.ts +3 -6
  61. package/lib/cjs/components/address/Address.form.js +0 -5
  62. package/lib/cjs/components/button/Button.d.ts +12 -3
  63. package/lib/cjs/components/button/Button.form.d.ts +3 -6
  64. package/lib/cjs/components/button/Button.form.js +0 -5
  65. package/lib/cjs/components/button/Button.js +0 -5
  66. package/lib/cjs/components/checkbox/Checkbox.d.ts +27 -4
  67. package/lib/cjs/components/checkbox/Checkbox.form.d.ts +3 -6
  68. package/lib/cjs/components/checkbox/Checkbox.form.js +0 -5
  69. package/lib/cjs/components/columns/Columns.d.ts +2 -3
  70. package/lib/cjs/components/columns/Columns.form.d.ts +3 -6
  71. package/lib/cjs/components/columns/Columns.form.js +0 -5
  72. package/lib/cjs/components/columns/Columns.js +1 -1
  73. package/lib/cjs/components/container/Container.form.d.ts +3 -6
  74. package/lib/cjs/components/container/Container.form.js +0 -5
  75. package/lib/cjs/components/content/Content.d.ts +1 -2
  76. package/lib/cjs/components/content/Content.form.d.ts +3 -6
  77. package/lib/cjs/components/content/Content.form.js +0 -5
  78. package/lib/cjs/components/currency/Currency.form.d.ts +3 -6
  79. package/lib/cjs/components/currency/Currency.form.js +0 -5
  80. package/lib/cjs/components/currency/Currency.js +2 -1
  81. package/lib/cjs/components/datagrid/DataGrid.d.ts +7 -8
  82. package/lib/cjs/components/datagrid/DataGrid.form.d.ts +3 -6
  83. package/lib/cjs/components/datagrid/DataGrid.form.js +0 -5
  84. package/lib/cjs/components/datagrid/DataGrid.js +5 -5
  85. package/lib/cjs/components/datamap/DataMap.d.ts +0 -1
  86. package/lib/cjs/components/datamap/DataMap.form.d.ts +3 -6
  87. package/lib/cjs/components/datamap/DataMap.form.js +0 -5
  88. package/lib/cjs/components/datetime/DateTime.d.ts +14 -0
  89. package/lib/cjs/components/datetime/DateTime.form.d.ts +3 -6
  90. package/lib/cjs/components/datetime/DateTime.form.js +0 -5
  91. package/lib/cjs/components/datetime/editForm/DateTime.edit.date.js +2 -2
  92. package/lib/cjs/components/day/Day.d.ts +48 -22
  93. package/lib/cjs/components/day/Day.form.d.ts +3 -6
  94. package/lib/cjs/components/day/Day.form.js +0 -5
  95. package/lib/cjs/components/day/Day.js +20 -15
  96. package/lib/cjs/components/editgrid/EditGrid.d.ts +3 -7
  97. package/lib/cjs/components/editgrid/EditGrid.form.d.ts +3 -6
  98. package/lib/cjs/components/editgrid/EditGrid.form.js +0 -5
  99. package/lib/cjs/components/editgrid/EditGrid.js +3 -3
  100. package/lib/cjs/components/editgrid/editForm/EditGrid.edit.display.js +5 -2
  101. package/lib/cjs/components/editgrid/editForm/EditGrid.edit.templates.js +9 -6
  102. package/lib/cjs/components/email/Email.form.d.ts +3 -6
  103. package/lib/cjs/components/email/Email.form.js +0 -5
  104. package/lib/cjs/components/fieldset/Fieldset.form.d.ts +3 -6
  105. package/lib/cjs/components/fieldset/Fieldset.form.js +0 -5
  106. package/lib/cjs/components/file/File.d.ts +22 -9
  107. package/lib/cjs/components/file/File.form.d.ts +3 -6
  108. package/lib/cjs/components/file/File.form.js +0 -5
  109. package/lib/cjs/components/form/Form.d.ts +20 -31
  110. package/lib/cjs/components/form/Form.form.d.ts +3 -6
  111. package/lib/cjs/components/form/Form.form.js +0 -5
  112. package/lib/cjs/components/form/Form.js +10 -13
  113. package/lib/cjs/components/hidden/Hidden.d.ts +11 -1
  114. package/lib/cjs/components/hidden/Hidden.form.d.ts +3 -6
  115. package/lib/cjs/components/hidden/Hidden.form.js +0 -5
  116. package/lib/cjs/components/hidden/Hidden.js +2 -1
  117. package/lib/cjs/components/html/HTML.d.ts +1 -2
  118. package/lib/cjs/components/html/HTML.form.d.ts +3 -6
  119. package/lib/cjs/components/html/HTML.form.js +0 -5
  120. package/lib/cjs/components/number/Number.d.ts +17 -3
  121. package/lib/cjs/components/number/Number.form.d.ts +3 -6
  122. package/lib/cjs/components/number/Number.form.js +0 -5
  123. package/lib/cjs/components/number/Number.js +2 -1
  124. package/lib/cjs/components/panel/Panel.form.d.ts +3 -6
  125. package/lib/cjs/components/panel/Panel.form.js +0 -5
  126. package/lib/cjs/components/panel/Panel.js +1 -0
  127. package/lib/cjs/components/password/Password.form.d.ts +3 -6
  128. package/lib/cjs/components/password/Password.form.js +0 -5
  129. package/lib/cjs/components/phonenumber/PhoneNumber.form.d.ts +3 -6
  130. package/lib/cjs/components/phonenumber/PhoneNumber.form.js +0 -5
  131. package/lib/cjs/components/radio/Radio.d.ts +26 -3
  132. package/lib/cjs/components/radio/Radio.form.d.ts +3 -6
  133. package/lib/cjs/components/radio/Radio.form.js +0 -5
  134. package/lib/cjs/components/radio/Radio.js +4 -3
  135. package/lib/cjs/components/recaptcha/ReCaptcha.d.ts +1 -1
  136. package/lib/cjs/components/recaptcha/ReCaptcha.form.d.ts +3 -5
  137. package/lib/cjs/components/recaptcha/ReCaptcha.form.js +0 -4
  138. package/lib/cjs/components/select/Select.d.ts +39 -16
  139. package/lib/cjs/components/select/Select.form.d.ts +3 -6
  140. package/lib/cjs/components/select/Select.form.js +0 -5
  141. package/lib/cjs/components/select/Select.js +16 -13
  142. package/lib/cjs/components/selectboxes/SelectBoxes.d.ts +17 -2
  143. package/lib/cjs/components/selectboxes/SelectBoxes.form.d.ts +3 -6
  144. package/lib/cjs/components/selectboxes/SelectBoxes.form.js +0 -5
  145. package/lib/cjs/components/selectboxes/SelectBoxes.js +9 -7
  146. package/lib/cjs/components/signature/Signature.d.ts +14 -1
  147. package/lib/cjs/components/signature/Signature.form.d.ts +3 -6
  148. package/lib/cjs/components/signature/Signature.form.js +0 -5
  149. package/lib/cjs/components/survey/Survey.d.ts +15 -3
  150. package/lib/cjs/components/survey/Survey.form.d.ts +3 -6
  151. package/lib/cjs/components/survey/Survey.form.js +0 -5
  152. package/lib/cjs/components/table/Table.d.ts +1 -2
  153. package/lib/cjs/components/table/Table.form.d.ts +3 -6
  154. package/lib/cjs/components/table/Table.form.js +0 -5
  155. package/lib/cjs/components/tabs/Tabs.d.ts +4 -4
  156. package/lib/cjs/components/tabs/Tabs.form.d.ts +3 -6
  157. package/lib/cjs/components/tabs/Tabs.form.js +0 -5
  158. package/lib/cjs/components/tabs/Tabs.js +2 -1
  159. package/lib/cjs/components/tags/Tags.d.ts +14 -0
  160. package/lib/cjs/components/tags/Tags.form.d.ts +3 -6
  161. package/lib/cjs/components/tags/Tags.form.js +0 -5
  162. package/lib/cjs/components/textarea/TextArea.d.ts +9 -4
  163. package/lib/cjs/components/textarea/TextArea.form.d.ts +3 -6
  164. package/lib/cjs/components/textarea/TextArea.form.js +0 -5
  165. package/lib/cjs/components/textarea/TextArea.js +2 -2
  166. package/lib/cjs/components/textfield/TextField.d.ts +30 -14
  167. package/lib/cjs/components/textfield/TextField.form.d.ts +3 -6
  168. package/lib/cjs/components/textfield/TextField.form.js +0 -5
  169. package/lib/cjs/components/textfield/TextField.js +16 -13
  170. package/lib/cjs/components/time/Time.form.d.ts +3 -6
  171. package/lib/cjs/components/time/Time.form.js +0 -5
  172. package/lib/cjs/components/unknown/Unknown.form.d.ts +34 -5
  173. package/lib/cjs/components/unknown/Unknown.form.js +0 -4
  174. package/lib/cjs/components/url/Url.form.d.ts +3 -6
  175. package/lib/cjs/components/url/Url.form.js +0 -5
  176. package/lib/cjs/components/well/Well.form.d.ts +3 -6
  177. package/lib/cjs/components/well/Well.form.js +0 -5
  178. package/lib/cjs/formio.embed.d.ts +2 -1
  179. package/lib/cjs/formio.embed.js +100 -2
  180. package/lib/cjs/formio.form.d.ts +4 -11
  181. package/lib/cjs/formio.form.js +5 -13
  182. package/lib/cjs/providers/Providers.d.ts +5 -36
  183. package/lib/cjs/providers/Providers.js +0 -29
  184. package/lib/cjs/providers/address/AddressProvider.d.ts +12 -131
  185. package/lib/cjs/providers/address/AddressProvider.js +2 -88
  186. package/lib/cjs/providers/address/AzureAddressProvider.d.ts +1 -48
  187. package/lib/cjs/providers/address/AzureAddressProvider.js +0 -37
  188. package/lib/cjs/providers/address/CustomAddressProvider.d.ts +4 -27
  189. package/lib/cjs/providers/address/CustomAddressProvider.js +0 -34
  190. package/lib/cjs/providers/address/GoogleAddressProvider.d.ts +6 -130
  191. package/lib/cjs/providers/address/GoogleAddressProvider.js +0 -72
  192. package/lib/cjs/providers/address/NominatimAddressProvider.d.ts +7 -32
  193. package/lib/cjs/providers/address/NominatimAddressProvider.js +0 -33
  194. package/lib/cjs/providers/address/index.d.ts +1 -3
  195. package/lib/cjs/providers/processor/fileProcessor.d.ts +1 -7
  196. package/lib/cjs/providers/processor/fileProcessor.js +0 -6
  197. package/lib/cjs/providers/storage/azure.d.ts +13 -6
  198. package/lib/cjs/providers/storage/azure.js +0 -5
  199. package/lib/cjs/providers/storage/base64.d.ts +6 -5
  200. package/lib/cjs/providers/storage/base64.js +0 -4
  201. package/lib/cjs/providers/storage/dropbox.d.ts +4 -6
  202. package/lib/cjs/providers/storage/dropbox.js +0 -5
  203. package/lib/cjs/providers/storage/googleDrive.d.ts +5 -7
  204. package/lib/cjs/providers/storage/googleDrive.js +0 -6
  205. package/lib/cjs/providers/storage/indexeddb.d.ts +7 -5
  206. package/lib/cjs/providers/storage/indexeddb.js +0 -4
  207. package/lib/cjs/providers/storage/s3.d.ts +20 -6
  208. package/lib/cjs/providers/storage/s3.js +0 -5
  209. package/lib/cjs/providers/storage/url.d.ts +7 -6
  210. package/lib/cjs/providers/storage/url.js +0 -10
  211. package/lib/cjs/providers/storage/util.d.ts +1 -24
  212. package/lib/cjs/providers/storage/util.js +0 -18
  213. package/lib/cjs/templates/Templates.d.ts +0 -1
  214. package/lib/cjs/translations/en.d.ts +1 -0
  215. package/lib/cjs/translations/en.js +1 -0
  216. package/lib/cjs/utils/Evaluator.d.ts +3 -6
  217. package/lib/cjs/utils/Evaluator.js +20 -11
  218. package/lib/cjs/utils/builder.d.ts +7 -9
  219. package/lib/cjs/utils/builder.js +5 -10
  220. package/lib/cjs/utils/calendarUtils.d.ts +13 -7
  221. package/lib/cjs/utils/calendarUtils.js +17 -10
  222. package/lib/cjs/utils/formUtils.d.ts +171 -43
  223. package/lib/cjs/utils/formUtils.js +569 -38
  224. package/lib/cjs/utils/utils.d.ts +216 -362
  225. package/lib/cjs/utils/utils.js +224 -331
  226. package/lib/cjs/widgets/CalendarWidget.d.ts +10 -9
  227. package/lib/cjs/widgets/CalendarWidget.js +11 -9
  228. package/lib/mjs/Element.d.ts +96 -86
  229. package/lib/mjs/Element.js +78 -68
  230. package/lib/mjs/Form.d.ts +36 -365
  231. package/lib/mjs/Form.js +57 -140
  232. package/lib/mjs/FormBuilder.d.ts +2 -187
  233. package/lib/mjs/FormBuilder.js +8 -32
  234. package/lib/mjs/PDF.d.ts +13 -11
  235. package/lib/mjs/PDF.js +8 -6
  236. package/lib/mjs/Webform.d.ts +139 -180
  237. package/lib/mjs/Webform.js +310 -325
  238. package/lib/mjs/WebformBuilder.d.ts +14 -16
  239. package/lib/mjs/WebformBuilder.js +11 -16
  240. package/lib/mjs/Wizard.d.ts +21 -31
  241. package/lib/mjs/Wizard.js +18 -41
  242. package/lib/mjs/WizardBuilder.d.ts +1 -1
  243. package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.d.ts +5 -8
  244. package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.js +3 -6
  245. package/lib/mjs/components/Components.d.ts +4 -4
  246. package/lib/mjs/components/Components.js +3 -3
  247. package/lib/mjs/components/_classes/component/Component.d.ts +269 -502
  248. package/lib/mjs/components/_classes/component/Component.form.d.ts +3 -6
  249. package/lib/mjs/components/_classes/component/Component.form.js +0 -5
  250. package/lib/mjs/components/_classes/component/Component.js +189 -433
  251. package/lib/mjs/components/_classes/component/editForm/Component.edit.display.js +8 -0
  252. package/lib/mjs/components/_classes/component/editForm/Component.edit.validation.js +1 -1
  253. package/lib/mjs/components/_classes/component/editForm/utils.js +1 -1
  254. package/lib/mjs/components/_classes/field/Field.d.ts +2 -11
  255. package/lib/mjs/components/_classes/field/Field.js +1 -13
  256. package/lib/mjs/components/_classes/input/Input.d.ts +3 -4
  257. package/lib/mjs/components/_classes/input/Input.js +2 -2
  258. package/lib/mjs/components/_classes/list/ListComponent.d.ts +2 -2
  259. package/lib/mjs/components/_classes/list/ListComponent.form.d.ts +3 -6
  260. package/lib/mjs/components/_classes/list/ListComponent.form.js +0 -5
  261. package/lib/mjs/components/_classes/multivalue/Multivalue.d.ts +12 -43
  262. package/lib/mjs/components/_classes/multivalue/Multivalue.js +3 -37
  263. package/lib/mjs/components/_classes/nested/NestedComponent.d.ts +67 -163
  264. package/lib/mjs/components/_classes/nested/NestedComponent.form.d.ts +3 -6
  265. package/lib/mjs/components/_classes/nested/NestedComponent.form.js +0 -5
  266. package/lib/mjs/components/_classes/nested/NestedComponent.js +54 -175
  267. package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.d.ts +2 -2
  268. package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.js +1 -1
  269. package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.d.ts +1 -7
  270. package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.js +3 -2
  271. package/lib/mjs/components/address/Address.d.ts +2 -4
  272. package/lib/mjs/components/address/Address.form.d.ts +3 -6
  273. package/lib/mjs/components/address/Address.form.js +0 -5
  274. package/lib/mjs/components/button/Button.d.ts +12 -3
  275. package/lib/mjs/components/button/Button.form.d.ts +3 -6
  276. package/lib/mjs/components/button/Button.form.js +0 -5
  277. package/lib/mjs/components/button/Button.js +0 -5
  278. package/lib/mjs/components/checkbox/Checkbox.d.ts +27 -4
  279. package/lib/mjs/components/checkbox/Checkbox.form.d.ts +3 -6
  280. package/lib/mjs/components/checkbox/Checkbox.form.js +0 -5
  281. package/lib/mjs/components/columns/Columns.d.ts +2 -3
  282. package/lib/mjs/components/columns/Columns.form.d.ts +3 -6
  283. package/lib/mjs/components/columns/Columns.form.js +0 -5
  284. package/lib/mjs/components/columns/Columns.js +1 -1
  285. package/lib/mjs/components/container/Container.form.d.ts +3 -6
  286. package/lib/mjs/components/container/Container.form.js +0 -5
  287. package/lib/mjs/components/content/Content.d.ts +1 -2
  288. package/lib/mjs/components/content/Content.form.d.ts +3 -6
  289. package/lib/mjs/components/content/Content.form.js +0 -5
  290. package/lib/mjs/components/currency/Currency.form.d.ts +3 -6
  291. package/lib/mjs/components/currency/Currency.form.js +0 -5
  292. package/lib/mjs/components/currency/Currency.js +2 -1
  293. package/lib/mjs/components/datagrid/DataGrid.d.ts +7 -8
  294. package/lib/mjs/components/datagrid/DataGrid.form.d.ts +3 -6
  295. package/lib/mjs/components/datagrid/DataGrid.form.js +0 -5
  296. package/lib/mjs/components/datagrid/DataGrid.js +5 -5
  297. package/lib/mjs/components/datamap/DataMap.d.ts +0 -1
  298. package/lib/mjs/components/datamap/DataMap.form.d.ts +3 -6
  299. package/lib/mjs/components/datamap/DataMap.form.js +0 -5
  300. package/lib/mjs/components/datetime/DateTime.d.ts +14 -0
  301. package/lib/mjs/components/datetime/DateTime.form.d.ts +3 -6
  302. package/lib/mjs/components/datetime/DateTime.form.js +0 -5
  303. package/lib/mjs/components/datetime/editForm/DateTime.edit.date.js +1 -1
  304. package/lib/mjs/components/day/Day.d.ts +48 -22
  305. package/lib/mjs/components/day/Day.form.d.ts +3 -6
  306. package/lib/mjs/components/day/Day.form.js +0 -5
  307. package/lib/mjs/components/day/Day.js +20 -15
  308. package/lib/mjs/components/editgrid/EditGrid.d.ts +3 -7
  309. package/lib/mjs/components/editgrid/EditGrid.form.d.ts +3 -6
  310. package/lib/mjs/components/editgrid/EditGrid.form.js +0 -5
  311. package/lib/mjs/components/editgrid/EditGrid.js +3 -3
  312. package/lib/mjs/components/editgrid/editForm/EditGrid.edit.display.js +1 -1
  313. package/lib/mjs/components/editgrid/editForm/EditGrid.edit.templates.js +1 -1
  314. package/lib/mjs/components/email/Email.form.d.ts +3 -6
  315. package/lib/mjs/components/email/Email.form.js +0 -5
  316. package/lib/mjs/components/fieldset/Fieldset.form.d.ts +3 -6
  317. package/lib/mjs/components/fieldset/Fieldset.form.js +0 -5
  318. package/lib/mjs/components/file/File.d.ts +22 -9
  319. package/lib/mjs/components/file/File.form.d.ts +3 -6
  320. package/lib/mjs/components/file/File.form.js +0 -5
  321. package/lib/mjs/components/form/Form.d.ts +20 -31
  322. package/lib/mjs/components/form/Form.form.d.ts +3 -6
  323. package/lib/mjs/components/form/Form.form.js +0 -5
  324. package/lib/mjs/components/form/Form.js +10 -13
  325. package/lib/mjs/components/hidden/Hidden.d.ts +11 -1
  326. package/lib/mjs/components/hidden/Hidden.form.d.ts +3 -6
  327. package/lib/mjs/components/hidden/Hidden.form.js +0 -5
  328. package/lib/mjs/components/hidden/Hidden.js +2 -1
  329. package/lib/mjs/components/html/HTML.d.ts +1 -2
  330. package/lib/mjs/components/html/HTML.form.d.ts +3 -6
  331. package/lib/mjs/components/html/HTML.form.js +0 -5
  332. package/lib/mjs/components/number/Number.d.ts +17 -3
  333. package/lib/mjs/components/number/Number.form.d.ts +3 -6
  334. package/lib/mjs/components/number/Number.form.js +0 -5
  335. package/lib/mjs/components/number/Number.js +2 -1
  336. package/lib/mjs/components/panel/Panel.form.d.ts +3 -6
  337. package/lib/mjs/components/panel/Panel.form.js +0 -5
  338. package/lib/mjs/components/panel/Panel.js +1 -0
  339. package/lib/mjs/components/password/Password.form.d.ts +3 -6
  340. package/lib/mjs/components/password/Password.form.js +0 -5
  341. package/lib/mjs/components/phonenumber/PhoneNumber.form.d.ts +3 -6
  342. package/lib/mjs/components/phonenumber/PhoneNumber.form.js +0 -5
  343. package/lib/mjs/components/radio/Radio.d.ts +26 -3
  344. package/lib/mjs/components/radio/Radio.form.d.ts +3 -6
  345. package/lib/mjs/components/radio/Radio.form.js +0 -5
  346. package/lib/mjs/components/radio/Radio.js +4 -3
  347. package/lib/mjs/components/recaptcha/ReCaptcha.d.ts +1 -1
  348. package/lib/mjs/components/recaptcha/ReCaptcha.form.d.ts +3 -5
  349. package/lib/mjs/components/recaptcha/ReCaptcha.form.js +0 -4
  350. package/lib/mjs/components/select/Select.d.ts +39 -16
  351. package/lib/mjs/components/select/Select.form.d.ts +3 -6
  352. package/lib/mjs/components/select/Select.form.js +0 -5
  353. package/lib/mjs/components/select/Select.js +16 -13
  354. package/lib/mjs/components/selectboxes/SelectBoxes.d.ts +17 -2
  355. package/lib/mjs/components/selectboxes/SelectBoxes.form.d.ts +3 -6
  356. package/lib/mjs/components/selectboxes/SelectBoxes.form.js +0 -5
  357. package/lib/mjs/components/selectboxes/SelectBoxes.js +9 -7
  358. package/lib/mjs/components/signature/Signature.d.ts +14 -1
  359. package/lib/mjs/components/signature/Signature.form.d.ts +3 -6
  360. package/lib/mjs/components/signature/Signature.form.js +0 -5
  361. package/lib/mjs/components/survey/Survey.d.ts +15 -3
  362. package/lib/mjs/components/survey/Survey.form.d.ts +3 -6
  363. package/lib/mjs/components/survey/Survey.form.js +0 -5
  364. package/lib/mjs/components/table/Table.d.ts +1 -2
  365. package/lib/mjs/components/table/Table.form.d.ts +3 -6
  366. package/lib/mjs/components/table/Table.form.js +0 -5
  367. package/lib/mjs/components/tabs/Tabs.d.ts +4 -4
  368. package/lib/mjs/components/tabs/Tabs.form.d.ts +3 -6
  369. package/lib/mjs/components/tabs/Tabs.form.js +0 -5
  370. package/lib/mjs/components/tabs/Tabs.js +2 -1
  371. package/lib/mjs/components/tags/Tags.d.ts +14 -0
  372. package/lib/mjs/components/tags/Tags.form.d.ts +3 -6
  373. package/lib/mjs/components/tags/Tags.form.js +0 -5
  374. package/lib/mjs/components/textarea/TextArea.d.ts +9 -4
  375. package/lib/mjs/components/textarea/TextArea.form.d.ts +3 -6
  376. package/lib/mjs/components/textarea/TextArea.form.js +0 -5
  377. package/lib/mjs/components/textarea/TextArea.js +2 -2
  378. package/lib/mjs/components/textfield/TextField.d.ts +30 -14
  379. package/lib/mjs/components/textfield/TextField.form.d.ts +3 -6
  380. package/lib/mjs/components/textfield/TextField.form.js +0 -5
  381. package/lib/mjs/components/textfield/TextField.js +16 -13
  382. package/lib/mjs/components/time/Time.form.d.ts +3 -6
  383. package/lib/mjs/components/time/Time.form.js +0 -5
  384. package/lib/mjs/components/unknown/Unknown.form.d.ts +34 -5
  385. package/lib/mjs/components/unknown/Unknown.form.js +0 -4
  386. package/lib/mjs/components/url/Url.form.d.ts +3 -6
  387. package/lib/mjs/components/url/Url.form.js +0 -5
  388. package/lib/mjs/components/well/Well.form.d.ts +3 -6
  389. package/lib/mjs/components/well/Well.form.js +0 -5
  390. package/lib/mjs/formio.embed.d.ts +2 -1
  391. package/lib/mjs/formio.embed.js +99 -2
  392. package/lib/mjs/formio.form.d.ts +4 -11
  393. package/lib/mjs/formio.form.js +3 -10
  394. package/lib/mjs/providers/Providers.d.ts +5 -36
  395. package/lib/mjs/providers/Providers.js +0 -29
  396. package/lib/mjs/providers/address/AddressProvider.d.ts +12 -131
  397. package/lib/mjs/providers/address/AddressProvider.js +2 -88
  398. package/lib/mjs/providers/address/AzureAddressProvider.d.ts +1 -48
  399. package/lib/mjs/providers/address/AzureAddressProvider.js +0 -37
  400. package/lib/mjs/providers/address/CustomAddressProvider.d.ts +4 -27
  401. package/lib/mjs/providers/address/CustomAddressProvider.js +0 -34
  402. package/lib/mjs/providers/address/GoogleAddressProvider.d.ts +6 -130
  403. package/lib/mjs/providers/address/GoogleAddressProvider.js +0 -72
  404. package/lib/mjs/providers/address/NominatimAddressProvider.d.ts +7 -32
  405. package/lib/mjs/providers/address/NominatimAddressProvider.js +0 -33
  406. package/lib/mjs/providers/address/index.d.ts +1 -3
  407. package/lib/mjs/providers/processor/fileProcessor.d.ts +1 -7
  408. package/lib/mjs/providers/processor/fileProcessor.js +0 -6
  409. package/lib/mjs/providers/storage/azure.d.ts +13 -6
  410. package/lib/mjs/providers/storage/azure.js +0 -5
  411. package/lib/mjs/providers/storage/base64.d.ts +6 -5
  412. package/lib/mjs/providers/storage/base64.js +0 -4
  413. package/lib/mjs/providers/storage/dropbox.d.ts +4 -6
  414. package/lib/mjs/providers/storage/dropbox.js +0 -5
  415. package/lib/mjs/providers/storage/googleDrive.d.ts +5 -7
  416. package/lib/mjs/providers/storage/googleDrive.js +0 -6
  417. package/lib/mjs/providers/storage/indexeddb.d.ts +7 -5
  418. package/lib/mjs/providers/storage/indexeddb.js +0 -4
  419. package/lib/mjs/providers/storage/s3.d.ts +20 -6
  420. package/lib/mjs/providers/storage/s3.js +0 -5
  421. package/lib/mjs/providers/storage/url.d.ts +7 -6
  422. package/lib/mjs/providers/storage/url.js +0 -10
  423. package/lib/mjs/providers/storage/util.d.ts +1 -24
  424. package/lib/mjs/providers/storage/util.js +0 -18
  425. package/lib/mjs/templates/Templates.d.ts +0 -1
  426. package/lib/mjs/translations/en.d.ts +1 -0
  427. package/lib/mjs/translations/en.js +1 -0
  428. package/lib/mjs/utils/Evaluator.d.ts +3 -6
  429. package/lib/mjs/utils/Evaluator.js +20 -9
  430. package/lib/mjs/utils/builder.d.ts +7 -9
  431. package/lib/mjs/utils/builder.js +5 -10
  432. package/lib/mjs/utils/calendarUtils.d.ts +13 -7
  433. package/lib/mjs/utils/calendarUtils.js +17 -10
  434. package/lib/mjs/utils/formUtils.d.ts +171 -43
  435. package/lib/mjs/utils/formUtils.js +554 -6
  436. package/lib/mjs/utils/utils.d.ts +216 -362
  437. package/lib/mjs/utils/utils.js +218 -325
  438. package/lib/mjs/widgets/CalendarWidget.d.ts +10 -9
  439. package/lib/mjs/widgets/CalendarWidget.js +11 -9
  440. package/package.json +22 -22
  441. package/embed.d.ts +0 -1
  442. package/form.d.ts +0 -1
  443. package/lib/cjs/InlineEmbed.d.ts +0 -7
  444. package/lib/cjs/InlineEmbed.js +0 -109
  445. package/lib/mjs/InlineEmbed.d.ts +0 -7
  446. package/lib/mjs/InlineEmbed.js +0 -105
  447. package/sdk.d.ts +0 -1
  448. package/utils.d.ts +0 -1
@@ -1,43 +1,34 @@
1
- import _ from "lodash";
2
- import moment from "moment";
3
- import { compareVersions } from "compare-versions";
4
- import EventEmitter from "./EventEmitter";
5
- import i18nDefaults from "./i18n";
6
- import { Formio } from "./Formio";
7
- import Components from "./components/Components";
8
- import NestedDataComponent from "./components/_classes/nesteddata/NestedDataComponent";
9
- import { fastCloneDeep, currentTimezone, unescapeHTML, getStringFromComponentPath, searchComponents, convertStringToHTMLElement, getArrayFromComponentPath, } from "./utils/utils";
10
- import { eachComponent } from "./utils/formUtils";
1
+ import _ from 'lodash';
2
+ import moment from 'moment';
3
+ import { compareVersions } from 'compare-versions';
4
+ import { Component } from '@formio/core';
5
+ import EventEmitter from './EventEmitter';
6
+ import i18nDefaults from './i18n';
7
+ import { Formio } from './Formio';
8
+ import Components from './components/Components';
9
+ import NestedDataComponent from './components/_classes/nesteddata/NestedDataComponent';
10
+ import { fastCloneDeep, currentTimezone, unescapeHTML, getStringFromComponentPath, searchComponents, convertStringToHTMLElement, getArrayFromComponentPath, } from './utils/utils';
11
+ import { eachComponent } from './utils/formUtils';
11
12
  // Initialize the available forms.
12
13
  Formio.forms = {};
13
14
  // Allow people to register components.
14
15
  Formio.registerComponent = Components.setComponent;
15
- /**
16
- *
17
- * @param {any} icons - The icons to use.
18
- * @returns {any} - The icon set.
19
- */
20
16
  function getIconSet(icons) {
21
- if (icons === "fontawesome") {
22
- return "fa";
17
+ if (icons === 'fontawesome') {
18
+ return 'fa';
23
19
  }
24
- return icons || "";
20
+ return icons || '';
25
21
  }
26
- /**
27
- *
28
- * @param {any} options - The options to get.
29
- * @returns {any} - The options.
30
- */
31
22
  function getOptions(options) {
32
23
  options = _.defaults(options, {
33
24
  submitOnEnter: false,
34
- iconset: getIconSet(options && options.icons ? options.icons : Formio.icons),
25
+ iconset: getIconSet((options && options.icons) ? options.icons : Formio.icons),
35
26
  i18next: null,
36
27
  saveDraft: false,
37
28
  alwaysDirty: false,
38
29
  saveDraftThrottle: 5000,
39
- display: "form",
40
- cdnUrl: Formio.cdn.baseUrl,
30
+ display: 'form',
31
+ cdnUrl: Formio.cdn.baseUrl
41
32
  });
42
33
  if (!options.events) {
43
34
  options.events = new EventEmitter();
@@ -57,36 +48,36 @@ function getOptions(options) {
57
48
  * @typedef {{[key: string]: JSON}} JSONObject
58
49
  */
59
50
  /**
60
- * @typedef {object} FormioHooks
61
- * @property {Function} [beforeSubmit] - A function that is called before the form is submitted.
62
- * @property {Function} [beforeCancel] - A function that is called before the form is canceled.
63
- * @property {Function} [beforeNext] - A function that is called before moving to the next page in a multi-page form.
64
- * @property {Function} [beforePrev] - A function that is called before moving to the previous page in a multi-page form.
65
- * @property {Function} [attachComponent] - A function that is called when a component is attached to the form.
66
- * @property {Function} [setDataValue] - A function that is called when setting the value of a data component.
67
- * @property {Function} [addComponents] - A function that is called when adding multiple components to the form.
68
- * @property {Function} [addComponent] - A function that is called when adding a single component to the form.
69
- * @property {Function} [customValidation] - A function that is called for custom validation of the form.
70
- * @property {Function} [attachWebform] - A function that is called when attaching a webform to the form.
51
+ * @typedef {Object} FormioHooks
52
+ * @property {function} [beforeSubmit]
53
+ * @property {function} [beforeCancel]
54
+ * @property {function} [beforeNext]
55
+ * @property {function} [beforePrev]
56
+ * @property {function} [attachComponent]
57
+ * @property {function} [setDataValue]
58
+ * @property {function} [addComponents]
59
+ * @property {function} [addComponent]
60
+ * @property {function} [customValidation]
61
+ * @property {function} [attachWebform]
71
62
  */
72
63
  /**
73
- * @typedef {object} SanitizeConfig
74
- * @property {string[]} [addAttr] - The attributes to add.
75
- * @property {string[]} [addTags] - The tags to add.
76
- * @property {string[]} [allowedAttrs] - The allowed attributes.
77
- * @property {string[]} [allowedTags] - The allowed tags.
78
- * @property {string[]} [allowedUriRegex] - The allowed URI regex.
79
- * @property {string[]} [addUriSafeAttr] - The URI safe attributes.
64
+ * @typedef {Object} SanitizeConfig
65
+ * @property {string[]} [addAttr]
66
+ * @property {string[]} [addTags]
67
+ * @property {string[]} [allowedAttrs]
68
+ * @property {string[]} [allowedTags]
69
+ * @property {string[]} [allowedUriRegex]
70
+ * @property {string[]} [addUriSafeAttr]
80
71
  */
81
72
  /**
82
- * @typedef {object} ButtonSettings
83
- * @property {boolean} [showPrevious] - Show the "Previous" button.
84
- * @property {boolean} [showNext] - Show the "Next" button.
85
- * @property {boolean} [showCancel] - Show the "Cancel" button.
86
- * @property {boolean} [showSubmit] - Show the "Submit" button.
73
+ * @typedef {Object} ButtonSettings
74
+ * @property {boolean} [showPrevious]
75
+ * @property {boolean} [showNext]
76
+ * @property {boolean} [showCancel]
77
+ * @property {boolean} [showSubmit]
87
78
  */
88
79
  /**
89
- * @typedef {object} FormOptions
80
+ * @typedef {Object} FormOptions
90
81
  * @property {boolean} [saveDraft] - Enable the save draft feature.
91
82
  * @property {number} [saveDraftThrottle] - The throttle for the save draft feature.
92
83
  * @property {boolean} [readOnly] - Set this form to readOnly.
@@ -104,7 +95,7 @@ function getOptions(options) {
104
95
  * @property {string} [componentErrorClass] - The error class for components.
105
96
  * @property {any} [templates] - The templates for this form.
106
97
  * @property {string} [iconset] - The iconset for this form.
107
- * @property {import('@formio/core').Component[]} [components] - The components for this form.
98
+ * @property {Component[]} [components] - The components for this form.
108
99
  * @property {{[key: string]: boolean}} [disabled] - Disabled components for this form.
109
100
  * @property {boolean} [showHiddenFields] - Show hidden fields.
110
101
  * @property {{[key: string]: boolean}} [hide] - Hidden components for this form.
@@ -121,32 +112,34 @@ function getOptions(options) {
121
112
  * @property {boolean} [sanitize] - Sanitize the form.
122
113
  * @property {SanitizeConfig} [sanitizeConfig] - The sanitize configuration for this form.
123
114
  * @property {ButtonSettings} [buttonSettings] - The button settings for this form.
124
- * @property {object} [breadcrumbSettings] - The breadcrumb settings for this form.
115
+ * @property {Object} [breadCrumbSettings] - The breadcrumb settings for this form.
125
116
  * @property {boolean} [allowPrevious] - Allow the previous button (for Wizard forms).
126
117
  * @property {string[]} [wizardButtonOrder] - The order of the buttons (for Wizard forms).
127
118
  * @property {boolean} [showCheckboxBackground] - Show the checkbox background.
128
- * @property {boolean} [inputsOnly] - Only show inputs in the form and no labels.
129
- * @property {boolean} [building] - If we are in the process of building the form.
130
119
  * @property {number} [zoom] - The zoom for PDF forms.
131
120
  */
121
+ /**
122
+ * Renders a Form.io form within the webpage.
123
+ */
132
124
  export default class Webform extends NestedDataComponent {
133
125
  /**
134
- * @type {import('Form').FormOptions} - the options for this Webform.
126
+ * @type {FormOptions} - the options for this Webform.
135
127
  */
136
128
  options;
137
129
  /**
138
130
  * Creates a new Form instance.
139
- * @param {HTMLElement | object | import('Form').FormOptions} [elementOrOptions] - The DOM element to render this form within or the options to create this form instance.
140
- * @param {import('Form').FormOptions} [options] - The options to create a new form instance.
131
+ *
132
+ * @param {HTMLElement | Object | FormOptions} [elementOrOptions] - The DOM element to render this form within or the options to create this form instance.
133
+ * @param {FormOptions} [options] - The options to create a new form instance.
141
134
  */
142
- constructor(elementOrOptions, options = undefined) {
135
+ constructor(elementOrOptions, options) {
143
136
  let element, formOptions;
144
137
  if (elementOrOptions instanceof HTMLElement || options) {
145
138
  element = elementOrOptions;
146
- formOptions = options || {};
139
+ formOptions = options;
147
140
  }
148
141
  else {
149
- formOptions = elementOrOptions || {};
142
+ formOptions = elementOrOptions;
150
143
  }
151
144
  super(null, getOptions(formOptions));
152
145
  this.setElement(element);
@@ -160,12 +153,12 @@ export default class Webform extends NestedDataComponent {
160
153
  * The type of this element.
161
154
  * @type {string}
162
155
  */
163
- this.type = "form";
164
- this._src = "";
156
+ this.type = 'form';
157
+ this._src = '';
165
158
  this._loading = false;
166
159
  this._form = {};
167
160
  this.draftEnabled = false;
168
- this.savingDraft = false;
161
+ this.savingDraft = true;
169
162
  if (this.options.saveDraftThrottle) {
170
163
  this.triggerSaveDraft = _.throttle(this.saveDraft.bind(this), this.options.saveDraftThrottle);
171
164
  }
@@ -179,11 +172,13 @@ export default class Webform extends NestedDataComponent {
179
172
  this.nosubmit = false;
180
173
  /**
181
174
  * Determines if the form has tried to be submitted, error or not.
175
+ *
182
176
  * @type {boolean}
183
177
  */
184
178
  this.submitted = false;
185
179
  /**
186
180
  * Determines if the form is being submitted at the moment.
181
+ *
187
182
  * @type {boolean}
188
183
  */
189
184
  this.submitting = false;
@@ -215,6 +210,7 @@ export default class Webform extends NestedDataComponent {
215
210
  /**
216
211
  * Promise that executes when the form is ready and rendered.
217
212
  * @type {Promise}
213
+ *
218
214
  * @example
219
215
  * import Webform from '@formio/js/Webform';
220
216
  * let form = new Webform(document.getElementById('formio'));
@@ -226,18 +222,21 @@ export default class Webform extends NestedDataComponent {
226
222
  this.formReady = new Promise((resolve, reject) => {
227
223
  /**
228
224
  * Called when the formReady state of this form has been resolved.
229
- * @type {Function}
225
+ *
226
+ * @type {function}
230
227
  */
231
228
  this.formReadyResolve = resolve;
232
229
  /**
233
230
  * Called when this form could not load and is rejected.
234
- * @type {Function}
231
+ *
232
+ * @type {function}
235
233
  */
236
234
  this.formReadyReject = reject;
237
235
  });
238
236
  /**
239
237
  * Promise that executes when the submission is ready and rendered.
240
238
  * @type {Promise}
239
+ *
241
240
  * @example
242
241
  * import Webform from '@formio/js/Webform';
243
242
  * let form = new Webform(document.getElementById('formio'));
@@ -249,12 +248,14 @@ export default class Webform extends NestedDataComponent {
249
248
  this.submissionReady = new Promise((resolve, reject) => {
250
249
  /**
251
250
  * Called when the formReady state of this form has been resolved.
252
- * @type {Function}
251
+ *
252
+ * @type {function}
253
253
  */
254
254
  this.submissionReadyResolve = resolve;
255
255
  /**
256
256
  * Called when this form could not load and is rejected.
257
- * @type {Function}
257
+ *
258
+ * @type {function}
258
259
  */
259
260
  this.submissionReadyReject = reject;
260
261
  });
@@ -263,19 +264,20 @@ export default class Webform extends NestedDataComponent {
263
264
  this.language = this.i18next.language;
264
265
  // See if we need to restore the draft from a user.
265
266
  if (this.options.saveDraft) {
266
- if (this.options.skipDraftRestore) {
267
- this.draftEnabled = true;
268
- this.savingDraft = false;
269
- }
270
- else {
271
- this.formReady.then(() => {
267
+ this.formReady.then(() => {
268
+ if (!this.options.skipDraftRestore) {
272
269
  const user = Formio.getUser();
273
270
  // Only restore a draft if the submission isn't explicitly set.
274
271
  if (user && !this.submissionSet) {
275
272
  this.restoreDraft(user._id);
276
273
  }
277
- });
278
- }
274
+ }
275
+ else {
276
+ // Enable drafts
277
+ this.draftEnabled = true;
278
+ this.savingDraft = false;
279
+ }
280
+ });
279
281
  }
280
282
  this.component.clearOnHide = false;
281
283
  // Ensure the root is set to this component.
@@ -294,7 +296,9 @@ export default class Webform extends NestedDataComponent {
294
296
  }
295
297
  /**
296
298
  * Sets the language for this form.
297
- * @param {string} lang - The language to use (e.g. 'en', 'sp', etc.)
299
+ *
300
+ * @param lang
301
+ * @return {Promise}
298
302
  */
299
303
  set language(lang) {
300
304
  if (!this.i18next) {
@@ -309,7 +313,7 @@ export default class Webform extends NestedDataComponent {
309
313
  return;
310
314
  }
311
315
  this.rebuild();
312
- this.emit("languageChanged");
316
+ this.emit('languageChanged');
313
317
  });
314
318
  }
315
319
  get componentComponents() {
@@ -320,25 +324,31 @@ export default class Webform extends NestedDataComponent {
320
324
  }
321
325
  /**
322
326
  * Add a language for translations
323
- * @param {string} code - The language code for the language being added.
324
- * @param {object} lang - The language translations.
325
- * @param {boolean} [active] - If this language should be set as the active language.
327
+ *
328
+ * @param code
329
+ * @param lang
330
+ * @param active
331
+ * @return {*}
326
332
  */
327
333
  addLanguage(code, lang, active = false) {
328
334
  if (this.i18next) {
329
335
  var translations = _.assign(fastCloneDeep(i18nDefaults.resources.en.translation), lang);
330
- this.i18next.addResourceBundle(code, "translation", translations, true, true);
336
+ this.i18next.addResourceBundle(code, 'translation', translations, true, true);
331
337
  if (active) {
332
338
  this.language = code;
333
339
  }
334
340
  }
335
341
  }
336
342
  keyboardCatchableElement(element) {
337
- if (element.nodeName === "TEXTAREA") {
343
+ if (element.nodeName === 'TEXTAREA') {
338
344
  return false;
339
345
  }
340
- if (element.nodeName === "INPUT") {
341
- return ["text", "email", "password"].indexOf(element.type) === -1;
346
+ if (element.nodeName === 'INPUT') {
347
+ return [
348
+ 'text',
349
+ 'email',
350
+ 'password'
351
+ ].indexOf(element.type) === -1;
342
352
  }
343
353
  return true;
344
354
  }
@@ -349,15 +359,15 @@ export default class Webform extends NestedDataComponent {
349
359
  }
350
360
  const ctrl = event.ctrlKey || event.metaKey;
351
361
  const keyCode = event.keyCode;
352
- let char = "";
362
+ let char = '';
353
363
  if (65 <= keyCode && keyCode <= 90) {
354
364
  char = String.fromCharCode(keyCode);
355
365
  }
356
366
  else if (keyCode === 13) {
357
- char = "Enter";
367
+ char = 'Enter';
358
368
  }
359
369
  else if (keyCode === 27) {
360
- char = "Esc";
370
+ char = 'Esc';
361
371
  }
362
372
  _.each(this.shortcuts, (shortcut) => {
363
373
  if (shortcut.ctrl && !ctrl) {
@@ -374,21 +384,21 @@ export default class Webform extends NestedDataComponent {
374
384
  return;
375
385
  }
376
386
  shortcut = _.capitalize(shortcut);
377
- if (shortcut === "Enter" || shortcut === "Esc") {
387
+ if (shortcut === 'Enter' || shortcut === 'Esc') {
378
388
  // Restrict Enter and Esc only for buttons
379
- if (element.tagName !== "BUTTON") {
389
+ if (element.tagName !== 'BUTTON') {
380
390
  return;
381
391
  }
382
392
  this.shortcuts.push({
383
393
  shortcut,
384
- element,
394
+ element
385
395
  });
386
396
  }
387
397
  else {
388
398
  this.shortcuts.push({
389
399
  ctrl: true,
390
400
  shortcut,
391
- element,
401
+ element
392
402
  });
393
403
  }
394
404
  }
@@ -398,27 +408,24 @@ export default class Webform extends NestedDataComponent {
398
408
  }
399
409
  _.remove(this.shortcuts, {
400
410
  shortcut,
401
- element,
411
+ element
402
412
  });
403
413
  }
404
414
  /**
405
415
  * Get the embed source of the form.
406
- * @returns {string} - The source of the form.
416
+ *
417
+ * @returns {string}
407
418
  */
408
419
  get src() {
409
420
  return this._src;
410
421
  }
411
422
  /**
412
423
  * Loads the submission if applicable.
413
- * @returns {Promise} - The promise that is triggered when the submission is loaded.
414
424
  */
415
425
  loadSubmission() {
416
426
  this.loadingSubmission = true;
417
427
  if (this.formio.submissionId) {
418
- this.onSubmission = this.formio
419
- .loadSubmission()
420
- .then((submission) => this.setSubmission(submission), (err) => this.submissionReadyReject(err))
421
- .catch((err) => this.submissionReadyReject(err));
428
+ this.onSubmission = this.formio.loadSubmission().then((submission) => this.setSubmission(submission), (err) => this.submissionReadyReject(err)).catch((err) => this.submissionReadyReject(err));
422
429
  }
423
430
  else {
424
431
  this.submissionReadyResolve();
@@ -427,21 +434,18 @@ export default class Webform extends NestedDataComponent {
427
434
  }
428
435
  /**
429
436
  * Set the src of the form renderer.
430
- * @param {string} value - The source value to set.
431
- * @param {any} options - The options to set.
432
- * @returns {Promise} - The promise that is triggered when the form is set.
437
+ *
438
+ * @param value
439
+ * @param options
433
440
  */
434
441
  setSrc(value, options) {
435
442
  if (this.setUrl(value, options)) {
436
443
  this.nosubmit = false;
437
- return this.formio
438
- .loadForm({ params: { live: 1 } })
439
- .then((form) => {
444
+ return this.formio.loadForm({ params: { live: 1 } }).then((form) => {
440
445
  const setForm = this.setForm(form);
441
446
  this.loadSubmission();
442
447
  return setForm;
443
- })
444
- .catch((err) => {
448
+ }).catch((err) => {
445
449
  console.warn(err);
446
450
  this.formReadyReject(err);
447
451
  });
@@ -450,7 +454,9 @@ export default class Webform extends NestedDataComponent {
450
454
  }
451
455
  /**
452
456
  * Set the Form source, which is typically the Form.io embed URL.
457
+ *
453
458
  * @param {string} value - The value of the form embed url.
459
+ *
454
460
  * @example
455
461
  * import Webform from '@formio/js/Webform';
456
462
  * let form = new Webform(document.getElementById('formio'));
@@ -464,25 +470,28 @@ export default class Webform extends NestedDataComponent {
464
470
  }
465
471
  /**
466
472
  * Get the embed source of the form.
467
- * @returns {string} - returns the source of the form.
473
+ *
474
+ * @returns {string}
468
475
  */
469
476
  get url() {
470
477
  return this._src;
471
478
  }
472
479
  /**
473
480
  * Sets the url of the form renderer.
474
- * @param {string} value - The value to set the url to.
475
- * @param {any} options - The options to set.
476
- * @returns {boolean} - TRUE means the url was set, FALSE otherwise.
481
+ *
482
+ * @param value
483
+ * @param options
477
484
  */
478
485
  setUrl(value, options) {
479
- if (!value || typeof value !== "string" || value === this._src) {
486
+ if (!value ||
487
+ (typeof value !== 'string') ||
488
+ (value === this._src)) {
480
489
  return false;
481
490
  }
482
491
  this._src = value;
483
492
  this.nosubmit = true;
484
493
  this.formio = this.options.formio = new Formio(value, options);
485
- if (this.type === "form") {
494
+ if (this.type === 'form') {
486
495
  // Set the options source so this can be passed to other components.
487
496
  this.options.src = value;
488
497
  }
@@ -490,6 +499,7 @@ export default class Webform extends NestedDataComponent {
490
499
  }
491
500
  /**
492
501
  * Set the form source but don't initialize the form and submission from the url.
502
+ *
493
503
  * @param {string} value - The value of the form embed url.
494
504
  */
495
505
  set url(value) {
@@ -497,6 +507,7 @@ export default class Webform extends NestedDataComponent {
497
507
  }
498
508
  /**
499
509
  * Called when both the form and submission have been loaded.
510
+ *
500
511
  * @returns {Promise} - The promise to trigger when both form and submission have loaded.
501
512
  */
502
513
  get ready() {
@@ -508,6 +519,7 @@ export default class Webform extends NestedDataComponent {
508
519
  }
509
520
  /**
510
521
  * Returns if this form is loading.
522
+ *
511
523
  * @returns {boolean} - TRUE means the form is loading, FALSE otherwise.
512
524
  */
513
525
  get loading() {
@@ -515,17 +527,18 @@ export default class Webform extends NestedDataComponent {
515
527
  }
516
528
  /**
517
529
  * Set the loading state for this form, and also show the loader spinner.
530
+ *
518
531
  * @param {boolean} loading - If this form should be "loading" or not.
519
532
  */
520
533
  set loading(loading) {
521
534
  if (this._loading !== loading) {
522
535
  this._loading = loading;
523
536
  if (!this.loader && loading) {
524
- this.loader = this.ce("div", {
525
- class: "loader-wrapper",
537
+ this.loader = this.ce('div', {
538
+ class: 'loader-wrapper'
526
539
  });
527
- const spinner = this.ce("div", {
528
- class: "loader text-center",
540
+ const spinner = this.ce('div', {
541
+ class: 'loader text-center'
529
542
  });
530
543
  this.loader.appendChild(spinner);
531
544
  }
@@ -548,6 +561,7 @@ export default class Webform extends NestedDataComponent {
548
561
  }
549
562
  /**
550
563
  * Sets the JSON schema for the form to be rendered.
564
+ *
551
565
  * @example
552
566
  * import Webform from '@formio/js/Webform';
553
567
  * let form = new Webform(document.getElementById('formio'));
@@ -575,9 +589,10 @@ export default class Webform extends NestedDataComponent {
575
589
  * }
576
590
  * ]
577
591
  * });
578
- * @param {object} form - The JSON schema of the form @see https://examples.form.io/example for an example JSON schema.
579
- * @param {any} flags - Any flags to apply when setting the form.
580
- * @returns {Promise} - The promise that is triggered when the form is set.
592
+ *
593
+ * @param {Object} form - The JSON schema of the form @see https://examples.form.io/example for an example JSON schema.
594
+ * @param flags
595
+ * @returns {*}
581
596
  */
582
597
  setForm(form, flags) {
583
598
  const isFormAlreadySet = this._form && this._form.components?.length;
@@ -609,19 +624,17 @@ export default class Webform extends NestedDataComponent {
609
624
  }
610
625
  // Use the sanitize config from the form settings or the global sanitize config if it is not provided in the options
611
626
  if (!this.options.sanitizeConfig && !this.builderMode) {
612
- this.options.sanitizeConfig =
613
- _.get(form, "settings.sanitizeConfig") ||
614
- _.get(form, "globalSettings.sanitizeConfig");
627
+ this.options.sanitizeConfig = _.get(form, 'settings.sanitizeConfig') || _.get(form, 'globalSettings.sanitizeConfig');
615
628
  }
616
- if ("schema" in form && compareVersions(form.schema, "1.x") > 0) {
629
+ if ('schema' in form && compareVersions(form.schema, '1.x') > 0) {
617
630
  this.ready.then(() => {
618
- this.setAlert("alert alert-danger", "Form schema is for a newer version, please upgrade your renderer. Some functionality may not work.");
631
+ this.setAlert('alert alert-danger', 'Form schema is for a newer version, please upgrade your renderer. Some functionality may not work.');
619
632
  });
620
633
  }
621
634
  // See if they pass a module, and evaluate it if so.
622
635
  if (form && form.module) {
623
636
  let formModule = null;
624
- if (typeof form.module === "string") {
637
+ if (typeof form.module === 'string') {
625
638
  try {
626
639
  formModule = this.evaluate(`return ${form.module}`);
627
640
  }
@@ -643,7 +656,7 @@ export default class Webform extends NestedDataComponent {
643
656
  this.initialized = false;
644
657
  const rebuild = this.rebuild() || Promise.resolve();
645
658
  return rebuild.then(() => {
646
- this.emit("formLoad", form);
659
+ this.emit('formLoad', form);
647
660
  this.triggerRecaptcha();
648
661
  // Make sure to trigger onChange after a render event occurs to speed up form rendering.
649
662
  setTimeout(() => {
@@ -655,33 +668,37 @@ export default class Webform extends NestedDataComponent {
655
668
  }
656
669
  /**
657
670
  * Gets the form object.
658
- * @returns {object} - The form JSON schema.
671
+ *
672
+ * @returns {Object} - The form JSON schema.
659
673
  */
660
674
  get form() {
661
675
  if (!this._form) {
662
676
  this._form = {
663
- components: [],
677
+ components: []
664
678
  };
665
679
  }
666
680
  return this._form;
667
681
  }
668
682
  /**
669
683
  * Sets the form value.
684
+ *
670
685
  * @alias setForm
671
- * @param {object} form - The form schema object.
686
+ * @param {Object} form - The form schema object.
672
687
  */
673
688
  set form(form) {
674
689
  this.setForm(form);
675
690
  }
676
691
  /**
677
692
  * Returns the submission object that was set within this form.
678
- * @returns {object} - The submission object.
693
+ *
694
+ * @returns {Object}
679
695
  */
680
696
  get submission() {
681
697
  return this.getValue();
682
698
  }
683
699
  /**
684
700
  * Sets the submission of a form.
701
+ *
685
702
  * @example
686
703
  * import Webform from '@formio/js/Webform';
687
704
  * let form = new Webform(document.getElementById('formio'));
@@ -691,123 +708,120 @@ export default class Webform extends NestedDataComponent {
691
708
  * lastName: 'Smith',
692
709
  * email: 'joe@example.com'
693
710
  * }};
694
- * @param {object} submission - The Form.io submission object.
711
+ *
712
+ * @param {Object} submission - The Form.io submission object.
695
713
  */
696
714
  set submission(submission) {
697
715
  this.setSubmission(submission);
698
716
  }
699
717
  /**
700
718
  * Sets a submission and returns the promise when it is ready.
701
- * @param {any} submission - The submission to set.
702
- * @param {any} flags - Any flags to apply when setting the submission.
703
- * @returns {Promise} - The promise that is triggered when the submission is set.
719
+ * @param submission
720
+ * @param flags
721
+ * @return {Promise.<TResult>}
704
722
  */
705
723
  setSubmission(submission, flags = {}) {
706
724
  flags = {
707
725
  ...flags,
708
- fromSubmission: _.has(flags, "fromSubmission") ? flags.fromSubmission : true,
726
+ fromSubmission: _.has(flags, 'fromSubmission') ? flags.fromSubmission : true,
709
727
  };
710
- return (this.onSubmission = this.formReady
711
- .then((resolveFlags) => {
728
+ return this.onSubmission = this.formReady.then((resolveFlags) => {
712
729
  if (resolveFlags) {
713
730
  flags = {
714
731
  ...flags,
715
- ...resolveFlags,
732
+ ...resolveFlags
716
733
  };
717
734
  }
718
735
  this.submissionSet = true;
719
736
  this.triggerChange(flags);
720
- this.emit("beforeSetSubmission", submission);
737
+ this.emit('beforeSetSubmission', submission);
721
738
  this.setValue(submission, flags);
722
739
  return this.submissionReadyResolve(submission);
723
- }, (err) => this.submissionReadyReject(err))
724
- .catch((err) => this.submissionReadyReject(err)));
740
+ }, (err) => this.submissionReadyReject(err)).catch((err) => this.submissionReadyReject(err));
725
741
  }
726
742
  handleDraftError(errName, errDetails, restoreDraft) {
727
- const errorMessage = _.trim(`${this.t(errName)} ${errDetails || ""}`);
743
+ const errorMessage = _.trim(`${this.t(errName)} ${errDetails || ''}`);
728
744
  console.warn(errorMessage);
729
- this.emit(restoreDraft ? "restoreDraftError" : "saveDraftError", errDetails || errorMessage);
745
+ this.emit(restoreDraft ? 'restoreDraftError' : 'saveDraftError', errDetails || errorMessage);
730
746
  }
747
+ /**
748
+ * Saves a submission draft.
749
+ */
731
750
  saveDraft() {
732
751
  if (!this.draftEnabled) {
733
752
  return;
734
753
  }
735
754
  if (!this.formio) {
736
- this.handleDraftError("saveDraftInstanceError");
755
+ this.handleDraftError('saveDraftInstanceError');
737
756
  return;
738
757
  }
739
758
  if (!Formio.getUser()) {
740
- this.handleDraftError("saveDraftAuthError");
759
+ this.handleDraftError('saveDraftAuthError');
741
760
  return;
742
761
  }
743
762
  const draft = fastCloneDeep(this.submission);
744
- draft.state = "draft";
745
- if (!this.savingDraft) {
746
- this.emit("saveDraftBegin");
763
+ draft.state = 'draft';
764
+ if (!this.savingDraft && !this.submitting) {
765
+ this.emit('saveDraftBegin');
747
766
  this.savingDraft = true;
748
- this.formio
749
- .saveSubmission(draft)
750
- .then((sub) => {
767
+ this.formio.saveSubmission(draft).then((sub) => {
751
768
  // Set id to submission to avoid creating new draft submission
752
769
  this.submission._id = sub._id;
753
770
  this.savingDraft = false;
754
- this.emit("saveDraft", sub);
771
+ this.emit('saveDraft', sub);
755
772
  })
756
- .catch((err) => {
773
+ .catch(err => {
757
774
  this.savingDraft = false;
758
- this.handleDraftError("saveDraftError", err);
775
+ this.handleDraftError('saveDraftError', err);
759
776
  });
760
777
  }
761
778
  }
762
779
  /**
763
780
  * Restores a draft submission based on the user who is authenticated.
764
- * @param {string} userId - The user id where we need to restore the draft from.
781
+ *
782
+ * @param {userId} - The user id where we need to restore the draft from.
765
783
  */
766
784
  restoreDraft(userId) {
767
785
  const formio = this.formio || this.options.formio;
768
786
  if (!formio) {
769
- this.handleDraftError("restoreDraftInstanceError", null, true);
787
+ this.handleDraftError('restoreDraftInstanceError', null, true);
770
788
  return;
771
789
  }
772
790
  this.savingDraft = true;
773
- formio
774
- .loadSubmissions({
791
+ formio.loadSubmissions({
775
792
  params: {
776
- state: "draft",
777
- owner: userId,
778
- },
779
- })
780
- .then((submissions) => {
793
+ state: 'draft',
794
+ owner: userId
795
+ }
796
+ }).then(submissions => {
781
797
  if (submissions.length > 0 && !this.options.skipDraftRestore) {
782
798
  const draft = fastCloneDeep(submissions[0]);
783
799
  return this.setSubmission(draft).then(() => {
784
800
  this.draftEnabled = true;
785
801
  this.savingDraft = false;
786
- this.emit("restoreDraft", draft);
802
+ this.emit('restoreDraft', draft);
787
803
  });
788
804
  }
789
805
  // Enable drafts so that we can keep track of changes.
790
806
  this.draftEnabled = true;
791
807
  this.savingDraft = false;
792
- this.emit("restoreDraft", null);
808
+ this.emit('restoreDraft', null);
793
809
  })
794
- .catch((err) => {
810
+ .catch(err => {
795
811
  this.draftEnabled = true;
796
812
  this.savingDraft = false;
797
- this.handleDraftError("restoreDraftError", err, true);
813
+ this.handleDraftError('restoreDraftError', err, true);
798
814
  });
799
815
  }
800
816
  get schema() {
801
- const schema = fastCloneDeep(_.omit(this._form, ["components"]));
817
+ const schema = fastCloneDeep(_.omit(this._form, ['components']));
802
818
  schema.components = [];
803
819
  this.eachComponent((component) => schema.components.push(component.schema));
804
820
  return schema;
805
821
  }
806
822
  mergeData(_this, _that) {
807
823
  _.mergeWith(_this, _that, (thisValue, thatValue) => {
808
- if (Array.isArray(thisValue) &&
809
- Array.isArray(thatValue) &&
810
- thisValue.length !== thatValue.length) {
824
+ if (Array.isArray(thisValue) && Array.isArray(thatValue) && thisValue.length !== thatValue.length) {
811
825
  return thatValue;
812
826
  }
813
827
  });
@@ -849,7 +863,6 @@ export default class Webform extends NestedDataComponent {
849
863
  }
850
864
  /**
851
865
  * Build the form.
852
- * @returns {Promise} - The promise that is triggered when the form is built.
853
866
  */
854
867
  init() {
855
868
  if (this.options.submission) {
@@ -871,31 +884,28 @@ export default class Webform extends NestedDataComponent {
871
884
  else {
872
885
  this.component = this.form;
873
886
  }
874
- this.component.type = "form";
887
+ this.component.type = 'form';
875
888
  this.component.input = false;
876
889
  this.addComponents();
877
- this.on("submitButton", (options) => {
878
- this.submit(false, options).catch((e) => {
890
+ this.on('submitButton', options => {
891
+ this.submit(false, options).catch(e => {
879
892
  options.instance.loading = false;
880
893
  return e !== false && e !== undefined && console.log(e);
881
894
  });
882
895
  }, true);
883
- this.on("checkValidity", (data) => this.validate(data, { dirty: true, process: "change" }), true);
884
- this.on("requestUrl", (args) => this.submitUrl(args.url, args.headers), true);
885
- this.on("resetForm", () => this.resetValue(), true);
886
- this.on("deleteSubmission", () => this.deleteSubmission(), true);
887
- this.on("refreshData", () => this.updateValue(), true);
896
+ this.on('checkValidity', (data) => this.validate(data, { dirty: true, process: 'change' }), true);
897
+ this.on('requestUrl', (args) => (this.submitUrl(args.url, args.headers)), true);
898
+ this.on('resetForm', () => this.resetValue(), true);
899
+ this.on('deleteSubmission', () => this.deleteSubmission(), true);
900
+ this.on('refreshData', () => this.updateValue(), true);
888
901
  this.executeFormController();
889
902
  return this.formReady;
890
903
  }
891
904
  executeFormController() {
892
905
  // If no controller value or
893
906
  // hidden and set to clearOnHide (Don't calculate a value for a hidden field set to clear when hidden)
894
- if (!this.form ||
895
- !this.form.controller ||
896
- ((!this.visible || this.component.hidden) &&
897
- this.component.clearOnHide &&
898
- !this.rootPristine)) {
907
+ if (!this.form || !this.form.controller
908
+ || ((!this.visible || this.component.hidden) && this.component.clearOnHide && !this.rootPristine)) {
899
909
  return false;
900
910
  }
901
911
  this.formReady.then(() => {
@@ -905,23 +915,20 @@ export default class Webform extends NestedDataComponent {
905
915
  });
906
916
  });
907
917
  }
908
- /**
909
- *
910
- */
911
918
  teardown() {
912
- this.emit("formDelete", this.id);
919
+ this.emit('formDelete', this.id);
913
920
  delete Formio.forms[this.id];
914
921
  delete this.executeShortcuts;
915
922
  delete this.triggerSaveDraft;
916
923
  super.teardown();
917
924
  }
918
925
  destroy(all = false) {
919
- this.off("submitButton");
920
- this.off("checkValidity");
921
- this.off("requestUrl");
922
- this.off("resetForm");
923
- this.off("deleteSubmission");
924
- this.off("refreshData");
926
+ this.off('submitButton');
927
+ this.off('checkValidity');
928
+ this.off('requestUrl');
929
+ this.off('resetForm');
930
+ this.off('deleteSubmission');
931
+ this.off('refreshData');
925
932
  return super.destroy(all);
926
933
  }
927
934
  build(element) {
@@ -934,17 +941,17 @@ export default class Webform extends NestedDataComponent {
934
941
  return this.ready;
935
942
  }
936
943
  getClassName() {
937
- let classes = "formio-form";
944
+ let classes = 'formio-form';
938
945
  if (this.options.readOnly) {
939
- classes += " formio-read-only";
946
+ classes += ' formio-read-only';
940
947
  }
941
948
  return classes;
942
949
  }
943
950
  render() {
944
- return super.render(this.renderTemplate("webform", {
951
+ return super.render(this.renderTemplate('webform', {
945
952
  classes: this.getClassName(),
946
953
  children: this.renderComponents(),
947
- }), this.builderMode ? "builder" : "form", true);
954
+ }), this.builderMode ? 'builder' : 'form', true);
948
955
  }
949
956
  redraw() {
950
957
  // Don't bother if we have not built yet.
@@ -957,13 +964,13 @@ export default class Webform extends NestedDataComponent {
957
964
  }
958
965
  attach(element) {
959
966
  this.setElement(element);
960
- this.loadRefs(element, { webform: "single" });
967
+ this.loadRefs(element, { webform: 'single' });
961
968
  const childPromise = this.attachComponents(this.refs.webform);
962
- this.addEventListener(document, "keydown", this.executeShortcuts);
969
+ this.addEventListener(document, 'keydown', this.executeShortcuts);
963
970
  this.currentForm = this;
964
- this.hook("attachWebform", element, this);
971
+ this.hook('attachWebform', element, this);
965
972
  return childPromise.then(() => {
966
- this.emit("render", this.element);
973
+ this.emit('render', this.element);
967
974
  return this.setValue(this._submission, {
968
975
  noUpdateEvent: true,
969
976
  });
@@ -980,23 +987,24 @@ export default class Webform extends NestedDataComponent {
980
987
  return result;
981
988
  }
982
989
  resetValue() {
983
- _.each(this.getComponents(), (comp) => comp.resetValue());
990
+ _.each(this.getComponents(), (comp) => (comp.resetValue()));
984
991
  this.setPristine(true);
985
992
  this.onChange({ resetValue: true });
986
993
  }
987
994
  /**
988
995
  * Sets a new alert to display in the error dialog of the form.
996
+ *
989
997
  * @param {string} type - The type of alert to display. "danger", "success", "warning", etc.
990
998
  * @param {string} message - The message to show in the alert.
991
- * @param {object} options - The options for the alert.
999
+ * @param {Object} options
992
1000
  */
993
1001
  setAlert(type, message, options) {
994
1002
  if (!type && this.submitted) {
995
1003
  if (this.alert) {
996
1004
  if (this.refs.errorRef && this.refs.errorRef.length) {
997
- this.refs.errorRef.forEach((el) => {
998
- this.removeEventListener(el, "click");
999
- this.removeEventListener(el, "keypress");
1005
+ this.refs.errorRef.forEach(el => {
1006
+ this.removeEventListener(el, 'click');
1007
+ this.removeEventListener(el, 'keypress');
1000
1008
  });
1001
1009
  }
1002
1010
  this.removeChild(this.alert);
@@ -1006,16 +1014,16 @@ export default class Webform extends NestedDataComponent {
1006
1014
  }
1007
1015
  if (this.options.noAlerts) {
1008
1016
  if (!message) {
1009
- this.emit("error", false);
1017
+ this.emit('error', false);
1010
1018
  }
1011
1019
  return;
1012
1020
  }
1013
1021
  if (this.alert) {
1014
1022
  try {
1015
1023
  if (this.refs.errorRef && this.refs.errorRef.length) {
1016
- this.refs.errorRef.forEach((el) => {
1017
- this.removeEventListener(el, "click");
1018
- this.removeEventListener(el, "keypress");
1024
+ this.refs.errorRef.forEach(el => {
1025
+ this.removeEventListener(el, 'click');
1026
+ this.removeEventListener(el, 'keypress');
1019
1027
  });
1020
1028
  }
1021
1029
  this.removeChild(this.alert);
@@ -1033,21 +1041,21 @@ export default class Webform extends NestedDataComponent {
1033
1041
  const templateOptions = {
1034
1042
  message: message instanceof HTMLElement ? message.outerHTML : message,
1035
1043
  attrs: attrs,
1036
- type,
1044
+ type
1037
1045
  };
1038
- this.alert = convertStringToHTMLElement(this.renderTemplate("alert", templateOptions), `#${attrs.id}`);
1046
+ this.alert = convertStringToHTMLElement(this.renderTemplate('alert', templateOptions), `#${attrs.id}`);
1039
1047
  }
1040
1048
  if (!this.alert) {
1041
1049
  return;
1042
1050
  }
1043
- this.loadRefs(this.alert, { errorRef: "multiple" });
1051
+ this.loadRefs(this.alert, { errorRef: 'multiple' });
1044
1052
  if (this.refs.errorRef && this.refs.errorRef.length) {
1045
- this.refs.errorRef.forEach((el) => {
1046
- this.addEventListener(el, "click", (e) => {
1053
+ this.refs.errorRef.forEach(el => {
1054
+ this.addEventListener(el, 'click', (e) => {
1047
1055
  const key = e.currentTarget.dataset.componentKey;
1048
1056
  this.focusOnComponent(key);
1049
1057
  });
1050
- this.addEventListener(el, "keydown", (e) => {
1058
+ this.addEventListener(el, 'keydown', (e) => {
1051
1059
  if (e.keyCode === 13) {
1052
1060
  e.preventDefault();
1053
1061
  const key = e.currentTarget.dataset.componentKey;
@@ -1060,7 +1068,9 @@ export default class Webform extends NestedDataComponent {
1060
1068
  }
1061
1069
  /**
1062
1070
  * Focus on selected component.
1071
+ *
1063
1072
  * @param {string} key - The key of selected component.
1073
+ * @returns {*}
1064
1074
  */
1065
1075
  focusOnComponent(key) {
1066
1076
  if (key) {
@@ -1072,16 +1082,11 @@ export default class Webform extends NestedDataComponent {
1072
1082
  }
1073
1083
  /**
1074
1084
  * Show the errors of this form within the alert dialog.
1075
- * @param {object} error - An optional additional error to display along with the component errors.
1085
+ *
1086
+ * @param {Object} error - An optional additional error to display along with the component errors.
1076
1087
  * @returns {*}
1077
1088
  */
1078
1089
  /* eslint-disable no-unused-vars */
1079
- /**
1080
- *
1081
- * @param {Array} errors - An array of errors to display.
1082
- * @param {boolean} triggerEvent - Whether or not to trigger the error event.
1083
- * @returns {void|Array} - The errors that were set.
1084
- */
1085
1090
  showErrors(errors, triggerEvent) {
1086
1091
  this.loading = false;
1087
1092
  if (!Array.isArray(errors)) {
@@ -1118,46 +1123,42 @@ export default class Webform extends NestedDataComponent {
1118
1123
  });
1119
1124
  const displayedErrors = [];
1120
1125
  if (errors.length) {
1121
- errors = _.uniqBy(errors, (error) => error.message);
1126
+ errors = _.uniqBy(errors, error => error.message);
1122
1127
  const createListItem = (message, index) => {
1123
1128
  const err = errors[index];
1124
1129
  const messageFromIndex = !_.isUndefined(index) && errors && errors[index];
1125
- const keyOrPath = messageFromIndex?.formattedKeyOrPath ||
1126
- messageFromIndex?.path ||
1127
- messageFromIndex?.context?.path ||
1128
- (err.context?.component && err.context?.component.key) ||
1129
- (err.component && err.component.key) ||
1130
- (err.fromServer && err.path);
1131
- const formattedKeyOrPath = keyOrPath ? getStringFromComponentPath(keyOrPath) : "";
1132
- if (typeof err !== "string" && !err.formattedKeyOrPath) {
1130
+ const keyOrPath = (messageFromIndex?.formattedKeyOrPath || messageFromIndex?.path || messageFromIndex?.context?.path) || (err.context?.component && err.context?.component.key) || (err.component && err.component.key) || err.fromServer && err.path;
1131
+ const formattedKeyOrPath = keyOrPath ? getStringFromComponentPath(keyOrPath) : '';
1132
+ if (typeof err !== 'string' && !err.formattedKeyOrPath) {
1133
1133
  err.formattedKeyOrPath = formattedKeyOrPath;
1134
1134
  }
1135
1135
  return {
1136
1136
  message: unescapeHTML(message),
1137
- keyOrPath: formattedKeyOrPath,
1137
+ keyOrPath: formattedKeyOrPath
1138
1138
  };
1139
1139
  };
1140
1140
  errors.forEach(({ message, context, fromServer, component }, index) => {
1141
1141
  const text = !component?.label || context?.hasLabel || fromServer
1142
- ? this.t("alertMessage", { message: this.t(message) })
1143
- : this.t("alertMessageWithLabel", {
1142
+ ? this.t('alertMessage', { message: this.t(message) })
1143
+ : this.t('alertMessageWithLabel', {
1144
1144
  label: this.t(component?.label),
1145
1145
  message: this.t(message),
1146
1146
  });
1147
1147
  displayedErrors.push(createListItem(text, index));
1148
1148
  });
1149
1149
  }
1150
- const errorsList = this.renderTemplate("errorsList", { errors: displayedErrors });
1151
- this.root.setAlert("danger", errorsList);
1150
+ const errorsList = this.renderTemplate('errorsList', { errors: displayedErrors });
1151
+ this.root.setAlert('danger', errorsList);
1152
1152
  if (triggerEvent) {
1153
- this.emit("error", errors);
1153
+ this.emit('error', errors);
1154
1154
  }
1155
1155
  return errors;
1156
1156
  }
1157
1157
  /* eslint-enable no-unused-vars */
1158
1158
  /**
1159
1159
  * Called when the submission has completed, or if the submission needs to be sent to an external library.
1160
- * @param {object} submission - The submission object.
1160
+ *
1161
+ * @param {Object} submission - The submission object.
1161
1162
  * @param {boolean} saved - Whether or not this submission was saved to the server.
1162
1163
  * @returns {object} - The submission object.
1163
1164
  */
@@ -1168,25 +1169,25 @@ export default class Webform extends NestedDataComponent {
1168
1169
  // We want to return the submitted submission and setValue will mutate the submission so cloneDeep it here.
1169
1170
  this.setValue(fastCloneDeep(submission), {
1170
1171
  noValidate: true,
1171
- noCheck: true,
1172
+ noCheck: true
1172
1173
  });
1173
- this.setAlert("success", `<p>${this.t("complete")}</p>`);
1174
+ this.setAlert('success', `<p>${this.t('complete')}</p>`);
1174
1175
  // Cancel triggered saveDraft to prevent overriding the submitted state
1175
1176
  if (this.draftEnabled && this.triggerSaveDraft?.cancel) {
1176
1177
  this.triggerSaveDraft.cancel();
1177
1178
  }
1178
- this.emit("submit", submission, saved);
1179
+ this.emit('submit', submission, saved);
1179
1180
  if (saved) {
1180
- this.emit("submitDone", submission);
1181
+ this.emit('submitDone', submission);
1181
1182
  }
1182
1183
  return submission;
1183
1184
  }
1184
1185
  normalizeError(error) {
1185
1186
  if (error) {
1186
- if (typeof error === "object" && "details" in error) {
1187
+ if (typeof error === 'object' && 'details' in error) {
1187
1188
  error = error.details;
1188
1189
  }
1189
- if (typeof error === "string") {
1190
+ if (typeof error === 'string') {
1190
1191
  error = { message: error };
1191
1192
  }
1192
1193
  }
@@ -1194,17 +1195,17 @@ export default class Webform extends NestedDataComponent {
1194
1195
  }
1195
1196
  /**
1196
1197
  * Called when an error occurs during the submission.
1197
- * @param {object} error - The error that occured.
1198
- * @returns {Array} errors - All errors.
1198
+ *
1199
+ * @param {Object} error - The error that occured.
1199
1200
  */
1200
1201
  onSubmissionError(error) {
1201
1202
  error = this.normalizeError(error);
1202
1203
  this.submitting = false;
1203
1204
  this.setPristine(false);
1204
- this.emit("submitError", error || this.errors);
1205
+ this.emit('submitError', error || this.errors);
1205
1206
  // Allow for silent cancellations (no error message, no submit button error state)
1206
1207
  if (error && error.silent) {
1207
- this.emit("change", { isValid: true }, { silent: true });
1208
+ this.emit('change', { isValid: true }, { silent: true });
1208
1209
  return false;
1209
1210
  }
1210
1211
  const errors = this.showErrors(error, true);
@@ -1215,10 +1216,9 @@ export default class Webform extends NestedDataComponent {
1215
1216
  }
1216
1217
  /**
1217
1218
  * Trigger the change event for this form.
1218
- * @param {any} flags - The flags to set on this change event.
1219
- * @param {any} changed - The changed object which reflects the changes in the form.
1220
- * @param {boolean} modified - Whether or not the form has been modified.
1221
- * @param {any} changes - The changes that have occured in the form.
1219
+ *
1220
+ * @param changed
1221
+ * @param flags
1222
1222
  */
1223
1223
  onChange(flags, changed, modified, changes) {
1224
1224
  flags = flags || {};
@@ -1231,17 +1231,13 @@ export default class Webform extends NestedDataComponent {
1231
1231
  this.pristine = false;
1232
1232
  }
1233
1233
  this.checkData(value.data, flags);
1234
- const shouldValidate = !flags.noValidate ||
1235
- flags.fromIFrame ||
1236
- (flags.fromSubmission && this.rootPristine && this.pristine && flags.changed);
1237
- const errors = shouldValidate
1238
- ? this.validate(value.data, { ...flags, process: "change" })
1239
- : [];
1234
+ const shouldValidate = !flags.noValidate || flags.fromIFrame || (flags.fromSubmission && this.rootPristine && this.pristine && flags.changed);
1235
+ const errors = shouldValidate ? this.validate(value.data, { ...flags, process: 'change' }) : [];
1240
1236
  value.isValid = errors.length === 0;
1241
1237
  this.loading = false;
1242
1238
  if (this.submitted) {
1243
1239
  // show server errors while they are not cleaned/fixed
1244
- const nonComponentServerErrors = _.filter(this.serverErrors || [], (err) => !err.component && !err.path);
1240
+ const nonComponentServerErrors = _.filter(this.serverErrors || [], err => !err.component && !err.path);
1245
1241
  this.showErrors(nonComponentServerErrors.length ? nonComponentServerErrors : errors);
1246
1242
  }
1247
1243
  // See if we need to save the draft of the form.
@@ -1249,39 +1245,38 @@ export default class Webform extends NestedDataComponent {
1249
1245
  this.triggerSaveDraft();
1250
1246
  }
1251
1247
  if (!flags || !flags.noEmit) {
1252
- this.emit("change", value, flags, modified);
1248
+ this.emit('change', value, flags, modified);
1253
1249
  isChangeEventEmitted = true;
1254
1250
  }
1255
1251
  // The form is initialized after the first change event occurs.
1256
1252
  if (isChangeEventEmitted && !this.initialized) {
1257
- this.emit("initialized");
1253
+ this.emit('initialized');
1258
1254
  this.initialized = true;
1259
1255
  }
1260
1256
  }
1261
1257
  /**
1262
1258
  * Send a delete request to the server.
1263
- * @returns {Promise} - The promise that is triggered when the delete is complete.
1264
1259
  */
1265
1260
  deleteSubmission() {
1266
- return this.formio.deleteSubmission().then(() => {
1267
- this.emit("submissionDeleted", this.submission);
1261
+ return this.formio.deleteSubmission()
1262
+ .then(() => {
1263
+ this.emit('submissionDeleted', this.submission);
1268
1264
  this.resetValue();
1269
1265
  });
1270
1266
  }
1271
1267
  /**
1272
1268
  * Cancels the submission.
1273
- * @param {boolean} noconfirm - Whether or not to confirm the cancellation.
1269
+ *
1274
1270
  * @alias reset
1275
- * @returns {boolean} - TRUE means the submission was cancelled, FALSE otherwise.
1276
1271
  */
1277
1272
  cancel(noconfirm) {
1278
- const shouldReset = this.hook("beforeCancel", true);
1279
- if (shouldReset && (noconfirm || confirm(this.t("confirmCancel")))) {
1273
+ const shouldReset = this.hook('beforeCancel', true);
1274
+ if (shouldReset && (noconfirm || confirm(this.t('confirmCancel')))) {
1280
1275
  this.resetValue();
1281
1276
  return true;
1282
1277
  }
1283
1278
  else {
1284
- this.emit("cancelSubmit");
1279
+ this.emit('cancelSubmit');
1285
1280
  return false;
1286
1281
  }
1287
1282
  }
@@ -1289,14 +1284,14 @@ export default class Webform extends NestedDataComponent {
1289
1284
  // Add in metadata about client submitting the form
1290
1285
  submission.metadata = submission.metadata || {};
1291
1286
  _.defaults(submission.metadata, {
1292
- timezone: _.get(this, "_submission.metadata.timezone", currentTimezone()),
1293
- offset: parseInt(_.get(this, "_submission.metadata.offset", moment().utcOffset()), 10),
1287
+ timezone: _.get(this, '_submission.metadata.timezone', currentTimezone()),
1288
+ offset: parseInt(_.get(this, '_submission.metadata.offset', moment().utcOffset()), 10),
1294
1289
  origin: document.location.origin,
1295
1290
  referrer: document.referrer,
1296
1291
  browserName: navigator.appName,
1297
1292
  userAgent: navigator.userAgent,
1298
1293
  pathName: window.location.pathname,
1299
- onLine: navigator.onLine,
1294
+ onLine: navigator.onLine
1300
1295
  });
1301
1296
  }
1302
1297
  submitForm(options = {}) {
@@ -1306,30 +1301,29 @@ export default class Webform extends NestedDataComponent {
1306
1301
  if (this.options.readOnly) {
1307
1302
  return resolve({
1308
1303
  submission: this.submission,
1309
- saved: false,
1304
+ saved: false
1310
1305
  });
1311
1306
  }
1312
1307
  const submission = fastCloneDeep(this.submission || {});
1313
1308
  this.setMetadata(submission);
1314
- submission.state = options.state || submission.state || "submitted";
1315
- const isDraft = submission.state === "draft";
1316
- this.hook("beforeSubmit", { ...submission, component: options.component }, (err, data) => {
1309
+ submission.state = options.state || submission.state || 'submitted';
1310
+ const isDraft = (submission.state === 'draft');
1311
+ this.hook('beforeSubmit', { ...submission, component: options.component }, (err, data) => {
1317
1312
  if (err) {
1318
1313
  return reject(err);
1319
1314
  }
1320
- submission._vnote = data && data._vnote ? data._vnote : "";
1315
+ submission._vnote = data && data._vnote ? data._vnote : '';
1321
1316
  try {
1322
1317
  if (!isDraft && !options.noValidate) {
1323
1318
  if (!submission.data) {
1324
- return reject("Invalid Submission");
1319
+ return reject('Invalid Submission');
1325
1320
  }
1326
1321
  const errors = this.validate(submission.data, {
1327
1322
  dirty: true,
1328
1323
  silentCheck: false,
1329
- process: "submit",
1324
+ process: 'submit'
1330
1325
  });
1331
- if (errors.length ||
1332
- options.beforeSubmitResults?.some((result) => result.status === "rejected")) {
1326
+ if (errors.length || options.beforeSubmitResults?.some((result) => result.status === 'rejected')) {
1333
1327
  return reject(errors);
1334
1328
  }
1335
1329
  }
@@ -1338,20 +1332,20 @@ export default class Webform extends NestedDataComponent {
1338
1332
  console.error(err);
1339
1333
  }
1340
1334
  this.everyComponent((comp) => {
1341
- if (submission._vnote && comp.type === "form" && comp.component.reference) {
1335
+ if (submission._vnote && comp.type === 'form' && comp.component.reference) {
1342
1336
  _.get(submission.data, comp.path, {})._vnote = submission._vnote;
1343
1337
  }
1344
1338
  const { persistent } = comp.component;
1345
- if (persistent === "client-only") {
1339
+ if (persistent === 'client-only') {
1346
1340
  _.unset(submission.data, comp.path);
1347
1341
  }
1348
1342
  });
1349
- this.hook("customValidation", { ...submission, component: options.component }, (err) => {
1343
+ this.hook('customValidation', { ...submission, component: options.component }, (err) => {
1350
1344
  if (err) {
1351
1345
  // If string is returned, cast to object.
1352
- if (typeof err === "string") {
1346
+ if (typeof err === 'string') {
1353
1347
  err = {
1354
- message: err,
1348
+ message: err
1355
1349
  };
1356
1350
  }
1357
1351
  // Ensure err is an array.
@@ -1361,10 +1355,7 @@ export default class Webform extends NestedDataComponent {
1361
1355
  this.loading = true;
1362
1356
  // Use the form action to submit the form if available.
1363
1357
  if (this._form && this._form.action) {
1364
- const method = submission.data._id &&
1365
- this._form.action.includes(submission.data._id)
1366
- ? "PUT"
1367
- : "POST";
1358
+ const method = (submission.data._id && this._form.action.includes(submission.data._id)) ? 'PUT' : 'POST';
1368
1359
  return Formio.makeStaticRequest(this._form.action, method, submission, this.formio ? this.formio.options : {})
1369
1360
  .then((result) => resolve({
1370
1361
  submission: result,
@@ -1383,9 +1374,7 @@ export default class Webform extends NestedDataComponent {
1383
1374
  });
1384
1375
  }
1385
1376
  // If this is an actionUrl, then make sure to save the action and not the submission.
1386
- const submitMethod = submitFormio.actionUrl
1387
- ? "saveAction"
1388
- : "saveSubmission";
1377
+ const submitMethod = submitFormio.actionUrl ? 'saveAction' : 'saveSubmission';
1389
1378
  submitFormio[submitMethod](submission)
1390
1379
  .then((result) => resolve({
1391
1380
  submission: result,
@@ -1401,15 +1390,13 @@ export default class Webform extends NestedDataComponent {
1401
1390
  }
1402
1391
  setServerErrors(error) {
1403
1392
  if (error.details) {
1404
- this.serverErrors = error.details
1405
- .filter((err) => (err.level ? err.level === "error" : err))
1406
- .map((err) => {
1393
+ this.serverErrors = error.details.filter((err) => err.level ? err.level === 'error' : err).map((err) => {
1407
1394
  err.fromServer = true;
1408
1395
  return err;
1409
1396
  });
1410
1397
  }
1411
- else if (typeof error === "string") {
1412
- this.serverErrors = [{ fromServer: true, level: "error", message: error }];
1398
+ else if (typeof error === 'string') {
1399
+ this.serverErrors = [{ fromServer: true, level: 'error', message: error }];
1413
1400
  }
1414
1401
  }
1415
1402
  executeSubmit(options) {
@@ -1440,6 +1427,7 @@ export default class Webform extends NestedDataComponent {
1440
1427
  }
1441
1428
  /**
1442
1429
  * Submits the form.
1430
+ *
1443
1431
  * @example
1444
1432
  * import Webform from '@formio/js/Webform';
1445
1433
  * let form = new Webform(document.getElementById('formio'));
@@ -1452,11 +1440,12 @@ export default class Webform extends NestedDataComponent {
1452
1440
  * form.submit().then((submission) => {
1453
1441
  * console.log(submission);
1454
1442
  * });
1443
+ *
1455
1444
  * @param {boolean} before - If this submission occured from the before handlers.
1456
- * @param {any} options - The options to use when submitting this form.
1445
+ *
1457
1446
  * @returns {Promise} - A promise when the form is done submitting.
1458
1447
  */
1459
- submit(before = false, options = {}) {
1448
+ submit(before, options = {}) {
1460
1449
  this.submissionInProcess = true;
1461
1450
  if (!before) {
1462
1451
  return this.beforeSubmit(options).then(() => this.executeSubmit(options));
@@ -1467,41 +1456,37 @@ export default class Webform extends NestedDataComponent {
1467
1456
  }
1468
1457
  submitUrl(URL, headers) {
1469
1458
  if (!URL) {
1470
- return console.warn("Missing URL argument");
1459
+ return console.warn('Missing URL argument');
1471
1460
  }
1472
1461
  const submission = this.submission || {};
1473
1462
  const API_URL = URL;
1474
1463
  const settings = {
1475
- method: "POST",
1476
- headers: {},
1464
+ method: 'POST',
1465
+ headers: {}
1477
1466
  };
1478
1467
  if (headers && headers.length > 0) {
1479
1468
  headers.map((e) => {
1480
- if (e.header !== "" && e.value !== "") {
1469
+ if (e.header !== '' && e.value !== '') {
1481
1470
  settings.headers[e.header] = this.interpolate(e.value, submission);
1482
1471
  }
1483
1472
  });
1484
1473
  }
1485
1474
  if (API_URL && settings) {
1486
- Formio.makeStaticRequest(API_URL, settings.method, submission, {
1487
- headers: settings.headers,
1488
- })
1489
- .then(() => {
1490
- this.emit("requestDone");
1491
- this.setAlert("success", "<p> Success </p>");
1492
- })
1493
- .catch((e) => {
1494
- const message = `${e.statusText ? e.statusText : ""} ${e.status ? e.status : e}`;
1495
- this.emit("error", message);
1475
+ Formio.makeStaticRequest(API_URL, settings.method, submission, { headers: settings.headers }).then(() => {
1476
+ this.emit('requestDone');
1477
+ this.setAlert('success', '<p> Success </p>');
1478
+ }).catch((e) => {
1479
+ const message = `${e.statusText ? e.statusText : ''} ${e.status ? e.status : e}`;
1480
+ this.emit('error', message);
1496
1481
  console.error(message);
1497
- this.setAlert("danger", `<p> ${message} </p>`);
1482
+ this.setAlert('danger', `<p> ${message} </p>`);
1498
1483
  return Promise.reject(this.onSubmissionError(e));
1499
1484
  });
1500
1485
  }
1501
1486
  else {
1502
- this.emit("error", "You should add a URL to this button.");
1503
- this.setAlert("warning", "You should add a URL to this button.");
1504
- return console.warn("You should add a URL to this button.");
1487
+ this.emit('error', 'You should add a URL to this button.');
1488
+ this.setAlert('warning', 'You should add a URL to this button.');
1489
+ return console.warn('You should add a URL to this button.');
1505
1490
  }
1506
1491
  }
1507
1492
  triggerRecaptcha() {
@@ -1509,16 +1494,16 @@ export default class Webform extends NestedDataComponent {
1509
1494
  return;
1510
1495
  }
1511
1496
  const recaptchaComponent = searchComponents(this.components, {
1512
- "component.type": "recaptcha",
1513
- "component.eventType": "formLoad",
1497
+ 'component.type': 'recaptcha',
1498
+ 'component.eventType': 'formLoad'
1514
1499
  });
1515
1500
  if (recaptchaComponent.length > 0) {
1516
- recaptchaComponent[0].verify(`${this.form.name ? this.form.name : "form"}Load`);
1501
+ recaptchaComponent[0].verify(`${this.form.name ? this.form.name : 'form'}Load`);
1517
1502
  }
1518
1503
  }
1519
1504
  set nosubmit(value) {
1520
1505
  this._nosubmit = !!value;
1521
- this.emit("nosubmit", this._nosubmit);
1506
+ this.emit('nosubmit', this._nosubmit);
1522
1507
  }
1523
1508
  get nosubmit() {
1524
1509
  return this._nosubmit || false;