@formio/js 5.1.0-dev.6040.debc859 → 5.1.0-dev.6042.603237d

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 (236) hide show
  1. package/Changelog.md +99 -310
  2. package/README.md +7 -0
  3. package/dist/formio.builder.css +1 -0
  4. package/dist/formio.builder.min.css +1 -1
  5. package/dist/formio.form.css +1 -0
  6. package/dist/formio.form.js +661 -672
  7. package/dist/formio.form.min.css +1 -1
  8. package/dist/formio.form.min.js +1 -1
  9. package/dist/formio.form.min.js.LICENSE.txt +3 -1
  10. package/dist/formio.full.css +1 -0
  11. package/dist/formio.full.js +688 -699
  12. package/dist/formio.full.min.css +1 -1
  13. package/dist/formio.full.min.js +1 -1
  14. package/dist/formio.full.min.js.LICENSE.txt +3 -1
  15. package/dist/formio.js +90 -68
  16. package/dist/formio.min.js +1 -1
  17. package/dist/formio.utils.js +103 -81
  18. package/dist/formio.utils.min.js +1 -1
  19. package/dist/formio.utils.min.js.LICENSE.txt +3 -1
  20. package/lib/cjs/Element.d.ts +2 -1
  21. package/lib/cjs/Element.js +18 -39
  22. package/lib/cjs/EventEmitter.js +2 -25
  23. package/lib/cjs/Form.js +2 -25
  24. package/lib/cjs/PDF.js +1 -1
  25. package/lib/cjs/PDFBuilder.js +4 -5
  26. package/lib/cjs/Webform.d.ts +2 -2
  27. package/lib/cjs/Webform.js +14 -15
  28. package/lib/cjs/WebformBuilder.d.ts +1 -0
  29. package/lib/cjs/WebformBuilder.js +44 -14
  30. package/lib/cjs/Wizard.d.ts +2 -2
  31. package/lib/cjs/Wizard.js +41 -27
  32. package/lib/cjs/WizardBuilder.js +1 -1
  33. package/lib/cjs/components/_classes/component/Component.d.ts +49 -15
  34. package/lib/cjs/components/_classes/component/Component.js +188 -125
  35. package/lib/cjs/components/_classes/component/editForm/Component.edit.conditional.js +1 -1
  36. package/lib/cjs/components/_classes/component/editForm/Component.edit.data.js +19 -0
  37. package/lib/cjs/components/_classes/component/editForm/Component.edit.logic.js +1 -1
  38. package/lib/cjs/components/_classes/component/editForm/utils.js +1 -1
  39. package/lib/cjs/components/_classes/componentModal/ComponentModal.js +1 -1
  40. package/lib/cjs/components/_classes/input/Input.js +1 -1
  41. package/lib/cjs/components/_classes/list/ListComponent.js +3 -3
  42. package/lib/cjs/components/_classes/nested/NestedComponent.d.ts +0 -1
  43. package/lib/cjs/components/_classes/nested/NestedComponent.form.js +13 -0
  44. package/lib/cjs/components/_classes/nested/NestedComponent.js +17 -25
  45. package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.js +1 -1
  46. package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.d.ts +0 -2
  47. package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.js +1 -12
  48. package/lib/cjs/components/address/Address.d.ts +9 -0
  49. package/lib/cjs/components/address/Address.js +32 -9
  50. package/lib/cjs/components/address/editForm/Address.edit.display.d.ts +4 -0
  51. package/lib/cjs/components/address/editForm/Address.edit.display.js +1 -0
  52. package/lib/cjs/components/address/editForm/Address.edit.provider.js +8 -8
  53. package/lib/cjs/components/alert/Alert.js +1 -1
  54. package/lib/cjs/components/button/Button.d.ts +1 -1
  55. package/lib/cjs/components/button/Button.js +7 -11
  56. package/lib/cjs/components/checkbox/Checkbox.js +1 -1
  57. package/lib/cjs/components/container/Container.js +1 -1
  58. package/lib/cjs/components/content/editForm/Content.edit.display.js +8 -0
  59. package/lib/cjs/components/currency/Currency.js +1 -1
  60. package/lib/cjs/components/currency/editForm/Currency.edit.display.js +12 -0
  61. package/lib/cjs/components/datagrid/DataGrid.js +5 -4
  62. package/lib/cjs/components/datamap/DataMap.js +2 -6
  63. package/lib/cjs/components/datetime/DateTime.d.ts +1 -1
  64. package/lib/cjs/components/datetime/DateTime.js +15 -13
  65. package/lib/cjs/components/datetime/editForm/DateTime.edit.validation.d.ts +66 -15
  66. package/lib/cjs/components/datetime/editForm/DateTime.edit.validation.js +68 -47
  67. package/lib/cjs/components/day/Day.js +2 -2
  68. package/lib/cjs/components/day/editForm/Day.edit.display.js +8 -0
  69. package/lib/cjs/components/editgrid/EditGrid.js +4 -14
  70. package/lib/cjs/components/editgrid/editForm/EditGrid.edit.display.js +1 -1
  71. package/lib/cjs/components/email/editForm/Email.edit.display.js +12 -0
  72. package/lib/cjs/components/fieldset/editForm/Fieldset.edit.display.js +8 -0
  73. package/lib/cjs/components/file/File.js +6 -2
  74. package/lib/cjs/components/file/editForm/File.edit.file.d.ts +13 -0
  75. package/lib/cjs/components/file/editForm/File.edit.file.js +1 -0
  76. package/lib/cjs/components/form/Form.d.ts +0 -1
  77. package/lib/cjs/components/form/Form.js +32 -24
  78. package/lib/cjs/components/form/editForm/Form.edit.form.js +4 -3
  79. package/lib/cjs/components/hidden/editForm/Hidden.edit.display.js +8 -0
  80. package/lib/cjs/components/html/HTML.js +1 -2
  81. package/lib/cjs/components/html/editForm/HTML.edit.display.js +8 -0
  82. package/lib/cjs/components/number/Number.js +1 -1
  83. package/lib/cjs/components/number/editForm/Number.edit.display.js +12 -0
  84. package/lib/cjs/components/panel/Panel.js +1 -1
  85. package/lib/cjs/components/password/editForm/Password.edit.display.js +13 -1
  86. package/lib/cjs/components/phonenumber/PhoneNumber.form.js +9 -1
  87. package/lib/cjs/components/radio/Radio.d.ts +8 -0
  88. package/lib/cjs/components/radio/Radio.js +17 -7
  89. package/lib/cjs/components/recaptcha/editForm/ReCaptcha.edit.display.js +1 -1
  90. package/lib/cjs/components/select/Select.d.ts +1 -0
  91. package/lib/cjs/components/select/Select.js +21 -5
  92. package/lib/cjs/components/select/editForm/Select.edit.data.d.ts +68 -110
  93. package/lib/cjs/components/select/editForm/Select.edit.data.js +3 -38
  94. package/lib/cjs/components/selectboxes/SelectBoxes.d.ts +6 -0
  95. package/lib/cjs/components/selectboxes/SelectBoxes.js +7 -1
  96. package/lib/cjs/components/signature/Signature.js +1 -1
  97. package/lib/cjs/components/survey/Survey.js +2 -2
  98. package/lib/cjs/components/tabs/Tabs.js +1 -0
  99. package/lib/cjs/components/tabs/editForm/Tabs.edit.display.js +8 -0
  100. package/lib/cjs/components/tags/Tags.js +1 -1
  101. package/lib/cjs/components/textarea/TextArea.js +10 -2
  102. package/lib/cjs/components/textarea/editForm/TextArea.edit.display.js +12 -0
  103. package/lib/cjs/components/textfield/TextField.js +9 -32
  104. package/lib/cjs/components/time/Time.js +1 -1
  105. package/lib/cjs/components/unknown/Unknown.form.d.ts +2 -1
  106. package/lib/cjs/components/unknown/Unknown.form.js +13 -9
  107. package/lib/cjs/components/url/editForm/Url.edit.display.js +12 -0
  108. package/lib/cjs/components/well/editForm/Well.edit.display.js +8 -0
  109. package/lib/cjs/formio.form.js +5 -5
  110. package/lib/cjs/providers/storage/uploadAdapter.js +8 -6
  111. package/lib/cjs/translations/en.d.ts +1 -234
  112. package/lib/cjs/translations/en.js +4 -2
  113. package/lib/cjs/utils/Evaluator.d.ts +20 -6
  114. package/lib/cjs/utils/Evaluator.js +38 -15
  115. package/lib/cjs/utils/builder.js +5 -5
  116. package/lib/cjs/utils/conditionOperators/IsEqualTo.js +3 -3
  117. package/lib/cjs/utils/formUtils.d.ts +2 -2
  118. package/lib/cjs/utils/index.d.ts +169 -2
  119. package/lib/cjs/utils/index.js +22 -2
  120. package/lib/cjs/utils/utils.d.ts +31 -45
  121. package/lib/cjs/utils/utils.js +80 -156
  122. package/lib/cjs/widgets/CalendarWidget.d.ts +1 -8
  123. package/lib/cjs/widgets/CalendarWidget.js +19 -40
  124. package/lib/mjs/Element.d.ts +2 -1
  125. package/lib/mjs/Element.js +11 -9
  126. package/lib/mjs/EventEmitter.js +2 -2
  127. package/lib/mjs/Form.js +1 -1
  128. package/lib/mjs/PDF.js +1 -1
  129. package/lib/mjs/PDFBuilder.js +1 -2
  130. package/lib/mjs/Webform.d.ts +2 -2
  131. package/lib/mjs/Webform.js +12 -13
  132. package/lib/mjs/WebformBuilder.d.ts +1 -0
  133. package/lib/mjs/WebformBuilder.js +37 -8
  134. package/lib/mjs/Wizard.d.ts +2 -2
  135. package/lib/mjs/Wizard.js +39 -25
  136. package/lib/mjs/WizardBuilder.js +1 -1
  137. package/lib/mjs/components/_classes/component/Component.d.ts +49 -15
  138. package/lib/mjs/components/_classes/component/Component.js +161 -75
  139. package/lib/mjs/components/_classes/component/editForm/Component.edit.conditional.js +1 -1
  140. package/lib/mjs/components/_classes/component/editForm/Component.edit.data.js +19 -0
  141. package/lib/mjs/components/_classes/component/editForm/Component.edit.logic.js +1 -1
  142. package/lib/mjs/components/_classes/component/editForm/utils.js +1 -1
  143. package/lib/mjs/components/_classes/componentModal/ComponentModal.js +1 -1
  144. package/lib/mjs/components/_classes/input/Input.js +1 -1
  145. package/lib/mjs/components/_classes/list/ListComponent.js +3 -3
  146. package/lib/mjs/components/_classes/nested/NestedComponent.d.ts +0 -1
  147. package/lib/mjs/components/_classes/nested/NestedComponent.form.js +13 -0
  148. package/lib/mjs/components/_classes/nested/NestedComponent.js +17 -25
  149. package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.js +1 -1
  150. package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.d.ts +0 -2
  151. package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.js +1 -12
  152. package/lib/mjs/components/address/Address.d.ts +9 -0
  153. package/lib/mjs/components/address/Address.js +32 -9
  154. package/lib/mjs/components/address/editForm/Address.edit.display.d.ts +4 -0
  155. package/lib/mjs/components/address/editForm/Address.edit.display.js +1 -0
  156. package/lib/mjs/components/address/editForm/Address.edit.provider.js +8 -8
  157. package/lib/mjs/components/alert/Alert.js +1 -1
  158. package/lib/mjs/components/button/Button.d.ts +1 -1
  159. package/lib/mjs/components/button/Button.js +7 -10
  160. package/lib/mjs/components/checkbox/Checkbox.js +1 -1
  161. package/lib/mjs/components/container/Container.js +1 -1
  162. package/lib/mjs/components/content/editForm/Content.edit.display.js +8 -0
  163. package/lib/mjs/components/currency/Currency.js +1 -1
  164. package/lib/mjs/components/currency/editForm/Currency.edit.display.js +12 -0
  165. package/lib/mjs/components/datagrid/DataGrid.js +5 -4
  166. package/lib/mjs/components/datamap/DataMap.js +2 -6
  167. package/lib/mjs/components/datetime/DateTime.d.ts +1 -1
  168. package/lib/mjs/components/datetime/DateTime.js +15 -13
  169. package/lib/mjs/components/datetime/editForm/DateTime.edit.validation.d.ts +66 -15
  170. package/lib/mjs/components/datetime/editForm/DateTime.edit.validation.js +68 -47
  171. package/lib/mjs/components/day/Day.js +2 -2
  172. package/lib/mjs/components/day/editForm/Day.edit.display.js +8 -0
  173. package/lib/mjs/components/editgrid/EditGrid.js +4 -13
  174. package/lib/mjs/components/editgrid/editForm/EditGrid.edit.display.js +1 -1
  175. package/lib/mjs/components/email/editForm/Email.edit.display.js +12 -0
  176. package/lib/mjs/components/fieldset/editForm/Fieldset.edit.display.js +8 -0
  177. package/lib/mjs/components/file/File.js +6 -2
  178. package/lib/mjs/components/file/editForm/File.edit.file.d.ts +13 -0
  179. package/lib/mjs/components/file/editForm/File.edit.file.js +1 -0
  180. package/lib/mjs/components/form/Form.d.ts +0 -1
  181. package/lib/mjs/components/form/Form.js +31 -24
  182. package/lib/mjs/components/form/editForm/Form.edit.form.js +3 -2
  183. package/lib/mjs/components/hidden/editForm/Hidden.edit.display.js +8 -0
  184. package/lib/mjs/components/html/HTML.js +1 -2
  185. package/lib/mjs/components/html/editForm/HTML.edit.display.js +8 -0
  186. package/lib/mjs/components/number/Number.js +1 -1
  187. package/lib/mjs/components/number/editForm/Number.edit.display.js +12 -0
  188. package/lib/mjs/components/panel/Panel.js +1 -1
  189. package/lib/mjs/components/password/editForm/Password.edit.display.js +13 -1
  190. package/lib/mjs/components/phonenumber/PhoneNumber.form.js +9 -1
  191. package/lib/mjs/components/radio/Radio.d.ts +8 -0
  192. package/lib/mjs/components/radio/Radio.js +17 -7
  193. package/lib/mjs/components/recaptcha/editForm/ReCaptcha.edit.display.js +1 -1
  194. package/lib/mjs/components/select/Select.d.ts +1 -0
  195. package/lib/mjs/components/select/Select.js +21 -5
  196. package/lib/mjs/components/select/editForm/Select.edit.data.d.ts +68 -110
  197. package/lib/mjs/components/select/editForm/Select.edit.data.js +3 -38
  198. package/lib/mjs/components/selectboxes/SelectBoxes.d.ts +6 -0
  199. package/lib/mjs/components/selectboxes/SelectBoxes.js +7 -1
  200. package/lib/mjs/components/signature/Signature.js +1 -1
  201. package/lib/mjs/components/survey/Survey.js +2 -2
  202. package/lib/mjs/components/tabs/Tabs.js +1 -0
  203. package/lib/mjs/components/tabs/editForm/Tabs.edit.display.js +8 -0
  204. package/lib/mjs/components/tags/Tags.js +1 -1
  205. package/lib/mjs/components/textarea/TextArea.js +10 -2
  206. package/lib/mjs/components/textarea/editForm/TextArea.edit.display.js +12 -0
  207. package/lib/mjs/components/textfield/TextField.js +3 -3
  208. package/lib/mjs/components/time/Time.js +1 -1
  209. package/lib/mjs/components/unknown/Unknown.form.d.ts +2 -1
  210. package/lib/mjs/components/unknown/Unknown.form.js +13 -9
  211. package/lib/mjs/components/url/editForm/Url.edit.display.js +12 -0
  212. package/lib/mjs/components/well/editForm/Well.edit.display.js +8 -0
  213. package/lib/mjs/formio.form.js +3 -3
  214. package/lib/mjs/providers/storage/uploadAdapter.js +8 -6
  215. package/lib/mjs/translations/en.d.ts +1 -234
  216. package/lib/mjs/translations/en.js +6 -47
  217. package/lib/mjs/utils/Evaluator.d.ts +20 -6
  218. package/lib/mjs/utils/Evaluator.js +31 -13
  219. package/lib/mjs/utils/builder.js +1 -1
  220. package/lib/mjs/utils/conditionOperators/IsEqualTo.js +1 -1
  221. package/lib/mjs/utils/formUtils.d.ts +2 -2
  222. package/lib/mjs/utils/index.d.ts +169 -2
  223. package/lib/mjs/utils/index.js +18 -1
  224. package/lib/mjs/utils/utils.d.ts +31 -45
  225. package/lib/mjs/utils/utils.js +72 -129
  226. package/lib/mjs/widgets/CalendarWidget.d.ts +1 -8
  227. package/lib/mjs/widgets/CalendarWidget.js +19 -40
  228. package/package.json +8 -6
  229. package/lib/cjs/i18n.d.ts +0 -13
  230. package/lib/cjs/i18n.js +0 -19
  231. package/lib/cjs/utils/i18n.d.ts +0 -19
  232. package/lib/cjs/utils/i18n.js +0 -120
  233. package/lib/mjs/i18n.d.ts +0 -13
  234. package/lib/mjs/i18n.js +0 -14
  235. package/lib/mjs/utils/i18n.d.ts +0 -19
  236. package/lib/mjs/utils/i18n.js +0 -112
@@ -6,36 +6,87 @@ declare const _default: ({
6
6
  persistent: boolean;
7
7
  weight: number;
8
8
  tooltip: string;
9
+ applyMaskOn?: undefined;
10
+ logic?: undefined;
9
11
  skipMerge?: undefined;
10
- customConditional?: undefined;
12
+ tableView?: undefined;
13
+ validateWhenHidden?: undefined;
11
14
  enableTime?: undefined;
12
15
  } | {
16
+ label: string;
17
+ tooltip: string;
18
+ applyMaskOn: string;
19
+ key: string;
20
+ logic: ({
21
+ name: string;
22
+ trigger: {
23
+ type: string;
24
+ javascript: string;
25
+ event?: undefined;
26
+ };
27
+ actions: {
28
+ name: string;
29
+ type: string;
30
+ schemaDefinition: string;
31
+ }[];
32
+ } | {
33
+ name: string;
34
+ trigger: {
35
+ type: string;
36
+ event: string;
37
+ javascript?: undefined;
38
+ };
39
+ actions: {
40
+ name: string;
41
+ type: string;
42
+ customAction: string;
43
+ }[];
44
+ })[];
13
45
  type: string;
14
46
  input: boolean;
15
- key: string;
16
- label: string;
17
47
  skipMerge: boolean;
18
48
  weight: number;
19
- tooltip: string;
20
- customConditional({ data, component }: {
21
- data: any;
22
- component: any;
23
- }): boolean;
24
49
  persistent?: undefined;
50
+ tableView?: undefined;
51
+ validateWhenHidden?: undefined;
25
52
  enableTime?: undefined;
26
53
  } | {
54
+ label: string;
55
+ tooltip: string;
56
+ applyMaskOn: string;
57
+ tableView: boolean;
58
+ validateWhenHidden: boolean;
59
+ key: string;
60
+ logic: ({
61
+ name: string;
62
+ trigger: {
63
+ type: string;
64
+ javascript: string;
65
+ event?: undefined;
66
+ };
67
+ actions: {
68
+ name: string;
69
+ type: string;
70
+ schemaDefinition: string;
71
+ }[];
72
+ } | {
73
+ name: string;
74
+ trigger: {
75
+ type: string;
76
+ event: string;
77
+ javascript?: undefined;
78
+ };
79
+ actions: {
80
+ name: string;
81
+ type: string;
82
+ customAction: string;
83
+ }[];
84
+ })[];
27
85
  type: string;
28
86
  input: boolean;
29
87
  enableTime: boolean;
30
- key: string;
31
88
  skipMerge: boolean;
32
- label: string;
33
89
  weight: number;
34
- tooltip: string;
35
- customConditional({ data, component }: {
36
- data: any;
37
- component: any;
38
- }): any;
39
90
  persistent?: undefined;
40
91
  })[];
41
92
  export default _default;
@@ -9,35 +9,44 @@ export default [
9
9
  tooltip: 'Enables to use input for moment functions instead of calendar.'
10
10
  },
11
11
  {
12
- type: 'datetime',
13
- input: true,
12
+ label: 'Minimum Date',
13
+ tooltip: "The minimum date that can be picked. You can also use Moment.js functions. For example: moment().subtract(10, 'days')",
14
+ applyMaskOn: 'change',
14
15
  key: 'datePicker.minDate',
15
- label: 'Use calendar to set minDate',
16
- skipMerge: true,
17
- weight: 10,
18
- tooltip: 'Enables to use calendar to set date.',
19
- customConditional({ data, component }) {
20
- if (component.datePicker && component.datePicker.minDate && component.datePicker.minDate.indexOf('moment') !== -1) {
21
- return false;
22
- }
23
- return !data.enableMinDateInput;
24
- },
25
- },
26
- {
16
+ logic: [
17
+ {
18
+ name: 'check input mode',
19
+ trigger: {
20
+ type: 'javascript',
21
+ javascript: "if (component.datePicker && component.datePicker.minDate && component.datePicker.minDate.indexOf('moment') !== -1) {\r\n result = false;\r\n}\r\nelse {\r\n result = !data.enableMinDateInput;\r\n}",
22
+ },
23
+ actions: [
24
+ {
25
+ name: 'change component',
26
+ type: 'mergeComponentSchema',
27
+ schemaDefinition: "schema = {\n type: 'datetime',\n label: 'Use calendar to set minDate',\n enableDate: true,\n enableTime: true,\n tooltip: 'Enables to use calendar to set date.',\n widget: {\n type: 'calendar',\n displayInTimezone: 'viewer',\n locale: 'en',\n useLocaleSettings: false,\n allowInput: true,\n mode: 'single',\n enableTime: true,\n noCalendar: false,\n format: 'yyyy-MM-dd hh:mm a',\n hourIncrement: 1,\n minuteIncrement: 1,\n time_24hr: false,\n disableWeekends: false,\n disableWeekdays: false,\n maxDate: null,\n },\n};",
28
+ },
29
+ ],
30
+ },
31
+ {
32
+ name: 'clear value',
33
+ trigger: {
34
+ type: 'event',
35
+ event: 'componentChange',
36
+ },
37
+ actions: [
38
+ {
39
+ name: 'reset value',
40
+ type: 'customAction',
41
+ customAction: "var isDateInput = instance.component?.type === 'datetime';\nvar enableInput = data.enableMinDateInput;\nvar allowReset = result[0].component && result[0].component.key === 'enableMinDateInput' && !result[0].flags?.fromSubmission;\nif(((enableInput && isDateInput) || (!enableInput && !isDateInput)) && allowReset) {\n instance.resetValue()\n}\n",
42
+ },
43
+ ],
44
+ },
45
+ ],
27
46
  type: 'textfield',
28
47
  input: true,
29
- enableTime: false,
30
- key: 'datePicker.minDate',
31
48
  skipMerge: true,
32
- label: 'Minimum Date',
33
49
  weight: 10,
34
- tooltip: 'The minimum date that can be picked. You can also use Moment.js functions. For example: \n \n moment().subtract(10, \'days\')',
35
- customConditional({ data, component }) {
36
- if (component.datePicker && component.datePicker.minDate && component.datePicker.minDate.indexOf('moment') !== -1) {
37
- return true;
38
- }
39
- return data.enableMinDateInput;
40
- },
41
50
  },
42
51
  {
43
52
  type: 'checkbox',
@@ -49,34 +58,46 @@ export default [
49
58
  tooltip: 'Enables to use input for moment functions instead of calendar.'
50
59
  },
51
60
  {
52
- type: 'datetime',
53
- input: true,
61
+ label: 'Maximum Date',
62
+ tooltip: "The maximum date that can be picked. You can also use Moment.js functions. For example: moment().add(10, 'days')",
63
+ applyMaskOn: 'change',
64
+ tableView: true,
65
+ validateWhenHidden: false,
54
66
  key: 'datePicker.maxDate',
55
- skipMerge: true,
56
- label: 'Use calendar to set maxDate',
57
- weight: 20,
58
- tooltip: 'Enables to use calendar to set date.',
59
- customConditional({ data, component }) {
60
- if (component.datePicker && component.datePicker.maxDate && component.datePicker.maxDate.indexOf('moment') !== -1) {
61
- return false;
62
- }
63
- return !data.enableMaxDateInput;
64
- },
65
- },
66
- {
67
+ logic: [
68
+ {
69
+ name: 'check input mode',
70
+ trigger: {
71
+ type: 'javascript',
72
+ javascript: "if (component.datePicker && component.datePicker.maxDate && component.datePicker.maxDate.indexOf('moment') !== -1) {\r\n result = false;\r\n}\r\nelse {\r\n result = !data.enableMaxDateInput;\r\n}",
73
+ },
74
+ actions: [
75
+ {
76
+ name: 'change component',
77
+ type: 'mergeComponentSchema',
78
+ schemaDefinition: "schema = {\n type: 'datetime',\n label: 'Use calendar to set maxDate',\n enableDate: true,\n enableTime: true,\n tooltip: 'Enables to use calendar to set date.',\n widget: {\n type: 'calendar',\n displayInTimezone: 'viewer',\n locale: 'en',\n useLocaleSettings: false,\n allowInput: true,\n mode: 'single',\n enableTime: true,\n noCalendar: false,\n format: 'yyyy-MM-dd hh:mm a',\n hourIncrement: 1,\n minuteIncrement: 1,\n time_24hr: false,\n disableWeekends: false,\n disableWeekdays: false,\n maxDate: null,\n },\n};",
79
+ },
80
+ ],
81
+ },
82
+ {
83
+ name: 'clear value',
84
+ trigger: {
85
+ type: 'event',
86
+ event: 'componentChange',
87
+ },
88
+ actions: [
89
+ {
90
+ name: 'reset value',
91
+ type: 'customAction',
92
+ customAction: "var isDateInput = instance.component?.type === 'datetime';\nvar enableInput = data.enableMaxDateInput;\nvar allowReset = result[0].component && result[0].component.key === 'enableMaxDateInput' && !result[0].flags?.fromSubmission;\nif(((enableInput && isDateInput) || (!enableInput && !isDateInput)) && allowReset) {\n instance.resetValue()\n}\n",
93
+ },
94
+ ],
95
+ },
96
+ ],
67
97
  type: 'textfield',
68
98
  input: true,
69
99
  enableTime: false,
70
- key: 'datePicker.maxDate',
71
100
  skipMerge: true,
72
- label: 'Maximum Date',
73
- tooltip: 'The maximum date that can be picked. You can also use Moment.js functions. For example: \n \n moment().add(10, \'days\')',
74
101
  weight: 20,
75
- customConditional({ data, component }) {
76
- if (component.datePicker && component.datePicker.maxDate && component.datePicker.maxDate.indexOf('moment') !== -1) {
77
- return true;
78
- }
79
- return data.enableMaxDateInput;
80
- },
81
102
  }
82
103
  ];
@@ -1,7 +1,7 @@
1
1
  import _ from 'lodash';
2
2
  import moment from 'moment';
3
3
  import Field from '../_classes/field/Field';
4
- import { boolValue, componentValueTypes, getComponentSavedTypes, getLocaleDateFormatInfo } from '../../utils/utils';
4
+ import { boolValue, componentValueTypes, getComponentSavedTypes, getLocaleDateFormatInfo } from '../../utils';
5
5
  import { getDayFormat } from '@formio/core';
6
6
  export default class DayComponent extends Field {
7
7
  static schema(...extend) {
@@ -53,7 +53,7 @@ export default class DayComponent extends Field {
53
53
  // Empty value used before 9.3.x
54
54
  static oldEmptyValue = '00/00/0000';
55
55
  constructor(component, options, data) {
56
- if (!options.inFormBuilder && !options.building) {
56
+ if (options && !options.inFormBuilder && !options.building) {
57
57
  if (component.maxDate && component.maxDate.indexOf('moment(') === -1) {
58
58
  component.maxDate = moment(component.maxDate, 'YYYY-MM-DD').toISOString();
59
59
  }
@@ -3,6 +3,14 @@ export default [
3
3
  key: 'labelPosition',
4
4
  ignore: true
5
5
  },
6
+ {
7
+ key: 'labelWidth',
8
+ ignore: true
9
+ },
10
+ {
11
+ key: 'labelMargin',
12
+ ignore: true
13
+ },
6
14
  {
7
15
  weight: 15,
8
16
  type: 'checkbox',
@@ -4,7 +4,7 @@ import { editgrid as templates } from '@formio/bootstrap/components';
4
4
  import NestedArrayComponent from '../_classes/nestedarray/NestedArrayComponent';
5
5
  import Component from '../_classes/component/Component';
6
6
  import Alert from '../alert/Alert';
7
- import { fastCloneDeep, Evaluator, getArrayFromComponentPath, eachComponent } from '../../utils/utils';
7
+ import { fastCloneDeep, Evaluator, getArrayFromComponentPath, eachComponent } from '../../utils';
8
8
  const EditRowState = {
9
9
  New: 'new',
10
10
  Editing: 'editing',
@@ -546,13 +546,6 @@ export default class EditGridComponent extends NestedArrayComponent {
546
546
  }
547
547
  });
548
548
  }
549
- restoreComponentsContext() {
550
- this.getComponents().forEach((component) => {
551
- const rowData = this.dataValue[component.rowIndex];
552
- const editRowData = this.editRows[component.rowIndex]?.data;
553
- component.data = rowData || editRowData;
554
- });
555
- }
556
549
  flattenComponents(rowIndex) {
557
550
  const result = {};
558
551
  this.everyComponent((component) => {
@@ -1106,7 +1099,9 @@ export default class EditGridComponent extends NestedArrayComponent {
1106
1099
  errors.push(...this._errors);
1107
1100
  return false;
1108
1101
  }
1109
- const message = this.invalid || this.invalidMessage(data, dirty, false, row);
1102
+ // TODO: this is the only place invalidMessage gets called, and it's not clear why it's needed - we already validate the editGrid
1103
+ // component above with super.checkComponentValidity
1104
+ const message = this.invalid || this.invalidMessage(data, dirty, false, row, options);
1110
1105
  if (allRowErrors.length && this.root?.submitted && !message) {
1111
1106
  this._errors = this.setCustomValidity(message, dirty);
1112
1107
  errors.push(...this._errors);
@@ -1150,9 +1145,6 @@ export default class EditGridComponent extends NestedArrayComponent {
1150
1145
  }
1151
1146
  }
1152
1147
  const changed = this.hasChanged(value, this.dataValue);
1153
- if (this.parent) {
1154
- this.parent.checkComponentConditions();
1155
- }
1156
1148
  this.dataValue = value;
1157
1149
  // Refresh editRow data when data changes.
1158
1150
  this.dataValue.forEach((row, rowIndex) => {
@@ -1183,7 +1175,6 @@ export default class EditGridComponent extends NestedArrayComponent {
1183
1175
  this.editRows = this.editRows.slice(0, dataLength);
1184
1176
  this.openWhenEmpty();
1185
1177
  this.updateOnChange(flags, changed);
1186
- this.checkData();
1187
1178
  this.changeState(changed, flags);
1188
1179
  return changed;
1189
1180
  }
@@ -33,7 +33,7 @@ export default [
33
33
  weight: 1002,
34
34
  input: false,
35
35
  customConditional() {
36
- return !Evaluator.noeval;
36
+ return !Evaluator.noeval || !Evaluator.protectedEval;
37
37
  },
38
38
  },
39
39
  {
@@ -7,6 +7,18 @@ export default [
7
7
  key: 'allowMultipleMasks',
8
8
  ignore: true,
9
9
  },
10
+ {
11
+ key: 'inputMasks',
12
+ ignore: true
13
+ },
14
+ {
15
+ key: 'widget.type',
16
+ ignore: true
17
+ },
18
+ {
19
+ key: 'widget',
20
+ ignore: true
21
+ },
10
22
  {
11
23
  key: 'showWordCount',
12
24
  ignore: true
@@ -3,6 +3,14 @@ export default [
3
3
  key: 'labelPosition',
4
4
  ignore: true
5
5
  },
6
+ {
7
+ key: 'labelWidth',
8
+ ignore: true
9
+ },
10
+ {
11
+ key: 'labelMargin',
12
+ ignore: true
13
+ },
6
14
  {
7
15
  key: 'placeholder',
8
16
  ignore: true
@@ -1,5 +1,5 @@
1
1
  import Field from '../_classes/field/Field';
2
- import { componentValueTypes, getComponentSavedTypes, uniqueName } from '../../utils/utils';
2
+ import { componentValueTypes, getComponentSavedTypes, uniqueName } from '../../utils';
3
3
  import download from 'downloadjs';
4
4
  import _ from 'lodash';
5
5
  import fileProcessor from '../../providers/processor/fileProcessor';
@@ -905,7 +905,9 @@ export default class FileComponent extends Field {
905
905
  async uploadFile(fileToSync) {
906
906
  return await this.fileService.uploadFile(fileToSync.storage, fileToSync.file, fileToSync.name, fileToSync.dir,
907
907
  // Progress callback
908
- this.updateProgress.bind(this, fileToSync), fileToSync.url, fileToSync.options, fileToSync.fileKey, fileToSync.groupPermissions, fileToSync.groupResourceId, () => { },
908
+ this.updateProgress.bind(this, fileToSync), fileToSync.url, fileToSync.options, fileToSync.fileKey, fileToSync.groupPermissions, fileToSync.groupResourceId, () => {
909
+ this.emit('fileUploadingStart');
910
+ },
909
911
  // Abort upload callback
910
912
  (abort) => this.abortUploads.push({
911
913
  id: fileToSync.id,
@@ -930,6 +932,7 @@ export default class FileComponent extends Field {
930
932
  fileToSync.message = this.t('succefullyUploaded');
931
933
  fileInfo.originalName = fileToSync.originalName;
932
934
  fileInfo.hash = fileToSync.hash;
935
+ this.emit('fileUploadingEnd');
933
936
  }
934
937
  catch (response) {
935
938
  fileToSync.status = 'error';
@@ -939,6 +942,7 @@ export default class FileComponent extends Field {
939
942
  : response.type === 'abort'
940
943
  ? this.t('Request was aborted')
941
944
  : response.toString();
945
+ this.emit('fileUploadingEnd');
942
946
  this.emit('fileUploadError', {
943
947
  fileToSync,
944
948
  response,
@@ -16,6 +16,7 @@ declare const _default: ({
16
16
  components?: undefined;
17
17
  rows?: undefined;
18
18
  editor?: undefined;
19
+ as?: undefined;
19
20
  optionsLabelPosition?: undefined;
20
21
  inline?: undefined;
21
22
  defaultValue?: undefined;
@@ -45,6 +46,7 @@ declare const _default: ({
45
46
  components?: undefined;
46
47
  rows?: undefined;
47
48
  editor?: undefined;
49
+ as?: undefined;
48
50
  optionsLabelPosition?: undefined;
49
51
  inline?: undefined;
50
52
  defaultValue?: undefined;
@@ -91,6 +93,7 @@ declare const _default: ({
91
93
  data?: undefined;
92
94
  rows?: undefined;
93
95
  editor?: undefined;
96
+ as?: undefined;
94
97
  optionsLabelPosition?: undefined;
95
98
  inline?: undefined;
96
99
  defaultValue?: undefined;
@@ -120,6 +123,7 @@ declare const _default: ({
120
123
  components?: undefined;
121
124
  rows?: undefined;
122
125
  editor?: undefined;
126
+ as?: undefined;
123
127
  optionsLabelPosition?: undefined;
124
128
  inline?: undefined;
125
129
  defaultValue?: undefined;
@@ -149,6 +153,7 @@ declare const _default: ({
149
153
  components?: undefined;
150
154
  rows?: undefined;
151
155
  editor?: undefined;
156
+ as?: undefined;
152
157
  optionsLabelPosition?: undefined;
153
158
  inline?: undefined;
154
159
  defaultValue?: undefined;
@@ -160,6 +165,7 @@ declare const _default: ({
160
165
  tooltip: string;
161
166
  rows: number;
162
167
  editor: string;
168
+ as: string;
163
169
  input: boolean;
164
170
  weight: number;
165
171
  placeholder: string;
@@ -207,6 +213,7 @@ declare const _default: ({
207
213
  components?: undefined;
208
214
  rows?: undefined;
209
215
  editor?: undefined;
216
+ as?: undefined;
210
217
  optionsLabelPosition?: undefined;
211
218
  inline?: undefined;
212
219
  defaultValue?: undefined;
@@ -227,6 +234,7 @@ declare const _default: ({
227
234
  components?: undefined;
228
235
  rows?: undefined;
229
236
  editor?: undefined;
237
+ as?: undefined;
230
238
  optionsLabelPosition?: undefined;
231
239
  inline?: undefined;
232
240
  defaultValue?: undefined;
@@ -247,6 +255,7 @@ declare const _default: ({
247
255
  components?: undefined;
248
256
  rows?: undefined;
249
257
  editor?: undefined;
258
+ as?: undefined;
250
259
  optionsLabelPosition?: undefined;
251
260
  inline?: undefined;
252
261
  defaultValue?: undefined;
@@ -276,6 +285,7 @@ declare const _default: ({
276
285
  components?: undefined;
277
286
  rows?: undefined;
278
287
  editor?: undefined;
288
+ as?: undefined;
279
289
  optionsLabelPosition?: undefined;
280
290
  inline?: undefined;
281
291
  defaultValue?: undefined;
@@ -305,6 +315,7 @@ declare const _default: ({
305
315
  components?: undefined;
306
316
  rows?: undefined;
307
317
  editor?: undefined;
318
+ as?: undefined;
308
319
  optionsLabelPosition?: undefined;
309
320
  inline?: undefined;
310
321
  defaultValue?: undefined;
@@ -332,6 +343,7 @@ declare const _default: ({
332
343
  components?: undefined;
333
344
  rows?: undefined;
334
345
  editor?: undefined;
346
+ as?: undefined;
335
347
  } | {
336
348
  type: string;
337
349
  input: boolean;
@@ -353,6 +365,7 @@ declare const _default: ({
353
365
  tableView?: undefined;
354
366
  rows?: undefined;
355
367
  editor?: undefined;
368
+ as?: undefined;
356
369
  optionsLabelPosition?: undefined;
357
370
  inline?: undefined;
358
371
  defaultValue?: undefined;
@@ -115,6 +115,7 @@ export default [
115
115
  tooltip: 'Pass your custom xhr options(optional)',
116
116
  rows: 5,
117
117
  editor: 'ace',
118
+ as: 'json',
118
119
  input: true,
119
120
  weight: 15,
120
121
  placeholder: `{
@@ -98,7 +98,6 @@ export default class FormComponent extends Component {
98
98
  * @returns {void}
99
99
  */
100
100
  onSetSubFormValue(submission: object | null | undefined, flags: object | null | undefined): void;
101
- areAllComponentsEmpty(data: any): boolean;
102
101
  updateSubFormVisibility(): void;
103
102
  /**
104
103
  * Determines if this form is a Nested Wizard
@@ -3,7 +3,7 @@ import _ from 'lodash';
3
3
  import Component from '../_classes/component/Component';
4
4
  import ComponentModal from '../_classes/componentModal/ComponentModal';
5
5
  import EventEmitter from 'eventemitter3';
6
- import { isMongoId, eachComponent, componentValueTypes } from '../../utils/utils';
6
+ import { isMongoId, eachComponent, componentValueTypes } from '../../utils';
7
7
  import { Formio } from '../../Formio';
8
8
  import Form from '../../Form';
9
9
  export default class FormComponent extends Component {
@@ -96,6 +96,9 @@ export default class FormComponent extends Component {
96
96
  }
97
97
  return this.createSubForm();
98
98
  }
99
+ shouldConditionallyClearOnPristine() {
100
+ return !this.hasSetValue && super.shouldConditionallyClearOnPristine();
101
+ }
99
102
  get dataReady() {
100
103
  return this.subForm?.dataReady || this.subFormReady || Promise.resolve();
101
104
  }
@@ -109,6 +112,10 @@ export default class FormComponent extends Component {
109
112
  get emptyValue() {
110
113
  return { data: {} };
111
114
  }
115
+ // In order for the subform values to set properly, we must always say that nested forms have a default value.
116
+ get hasDefaultValue() {
117
+ return true;
118
+ }
112
119
  get ready() {
113
120
  return this.subFormReady || Promise.resolve();
114
121
  }
@@ -267,6 +274,9 @@ export default class FormComponent extends Component {
267
274
  if (this.isSubFormLazyLoad() && !this.hasLoadedForm && !this.subFormLoading) {
268
275
  this.createSubForm(true);
269
276
  }
277
+ if (!this.subFormReady) {
278
+ return Promise.resolve();
279
+ }
270
280
  return this.subFormReady.then(() => {
271
281
  this.empty(element);
272
282
  if (this.options.builder) {
@@ -282,11 +292,13 @@ export default class FormComponent extends Component {
282
292
  }
283
293
  this.subForm.attach(element);
284
294
  this.valueChanged = this.hasSetValue;
285
- if (!this.valueChanged && this.dataValue.state !== 'submitted') {
286
- this.setDefaultValue();
287
- }
288
- else {
289
- this.restoreValue();
295
+ if (!this.shouldConditionallyClear()) {
296
+ if (!this.valueChanged && this.dataValue.state !== 'submitted') {
297
+ this.setDefaultValue();
298
+ }
299
+ else {
300
+ this.restoreValue();
301
+ }
290
302
  }
291
303
  }
292
304
  if (!this.builderMode && this.component.modalEdit) {
@@ -399,9 +411,10 @@ export default class FormComponent extends Component {
399
411
  const componentsMap = this.componentsMap;
400
412
  const formComponentsMap = this.subForm.componentsMap;
401
413
  _.assign(componentsMap, formComponentsMap);
402
- this.component.components = this.subForm.components.map((comp) => comp.component);
414
+ this.component.components = this.subForm._form?.components;
415
+ this.component.display = this.subForm._form?.display;
403
416
  this.subForm.on('change', () => {
404
- if (this.subForm) {
417
+ if (this.subForm && !this.shouldConditionallyClear()) {
405
418
  this.dataValue = this.subForm.getValue();
406
419
  this.triggerChange({
407
420
  noEmit: true
@@ -441,7 +454,7 @@ export default class FormComponent extends Component {
441
454
  */
442
455
  loadSubForm(fromAttach, beforeSubmit) {
443
456
  const loadHiddenForm = beforeSubmit && !this.component.clearOnHide;
444
- if (this.builderMode || (this.conditionallyHidden && !loadHiddenForm) || (this.isSubFormLazyLoad() && !fromAttach)) {
457
+ if (this.builderMode || (this.conditionallyHidden() && !loadHiddenForm) || (this.isSubFormLazyLoad() && !fromAttach)) {
445
458
  return Promise.resolve();
446
459
  }
447
460
  if (this.hasLoadedForm && !this.isRevisionChanged &&
@@ -513,7 +526,7 @@ export default class FormComponent extends Component {
513
526
  * @returns {*|boolean} - TRUE if the subform should be submitted, FALSE if it should not.
514
527
  */
515
528
  get shouldSubmit() {
516
- return this.subFormReady && (!this.component.hasOwnProperty('reference') || this.component.reference) && (!this.conditionallyHidden || !this.component.clearOnHide);
529
+ return this.subFormReady && (!this.component.hasOwnProperty('reference') || this.component.reference) && !this.shouldConditionallyClear();
517
530
  }
518
531
  /**
519
532
  * Returns the data for the subform.
@@ -664,20 +677,7 @@ export default class FormComponent extends Component {
664
677
  }
665
678
  }
666
679
  isEmpty(value = this.dataValue) {
667
- return value === null || _.isEqual(value, this.emptyValue) || (this.areAllComponentsEmpty(value?.data) && !value?._id);
668
- }
669
- areAllComponentsEmpty(data) {
670
- let res = true;
671
- if (this.subForm) {
672
- this.subForm.everyComponent((comp) => {
673
- const componentValue = _.get(data, comp.key);
674
- res &= comp.isEmpty(componentValue);
675
- });
676
- }
677
- else {
678
- res = false;
679
- }
680
- return res;
680
+ return value === null || _.isEqual(value, this.emptyValue);
681
681
  }
682
682
  getValue() {
683
683
  if (this.subForm) {
@@ -692,6 +692,13 @@ export default class FormComponent extends Component {
692
692
  }
693
693
  return errors;
694
694
  }
695
+ conditionallyHidden() {
696
+ const conditionallyHidden = super.conditionallyHidden();
697
+ if (this.subForm) {
698
+ this.subForm._conditionallyHidden = conditionallyHidden;
699
+ }
700
+ return conditionallyHidden;
701
+ }
695
702
  updateSubFormVisibility() {
696
703
  if (this.subForm) {
697
704
  this.subForm.parentVisible = this.visible;
@@ -30,9 +30,10 @@ export default [
30
30
  tooltip: 'if it is checked, the subform is loaded after navigation to the page with this component within the wizard.',
31
31
  input: true,
32
32
  customConditional({ instance, data }) {
33
- const formInfo = instance.root?.getComponent('form')?.defaultDownloadedResources.find(res => res._id === data.form);
33
+ const formComp = instance.root?.getComponent('form');
34
+ const formInfo = formComp?.defaultDownloadedResources.find(res => res._id === data.form);
34
35
  const displayMode = 'wizard';
35
- return instance.options?.editForm?.display === displayMode && formInfo && formInfo.display !== displayMode;
36
+ return instance.options?.editForm?.display === displayMode && ((data.form && !formInfo) || (formInfo && formInfo.display !== displayMode));
36
37
  },
37
38
  },
38
39
  {