@formio/js 5.4.1 → 5.4.3

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 (227) hide show
  1. package/README.md +11 -5
  2. package/dist/formio.builder.css +1 -0
  3. package/dist/formio.builder.min.css +1 -1
  4. package/dist/formio.embed.js +1 -1
  5. package/dist/formio.embed.min.js +1 -1
  6. package/dist/formio.embed.min.js.LICENSE.txt +1 -1
  7. package/dist/formio.form.css +1 -0
  8. package/dist/formio.form.js +137 -115
  9. package/dist/formio.form.min.css +1 -1
  10. package/dist/formio.form.min.js +1 -1
  11. package/dist/formio.form.min.js.LICENSE.txt +2 -2
  12. package/dist/formio.full.css +1 -0
  13. package/dist/formio.full.js +161 -139
  14. package/dist/formio.full.min.css +1 -1
  15. package/dist/formio.full.min.js +1 -1
  16. package/dist/formio.full.min.js.LICENSE.txt +2 -2
  17. package/dist/formio.js +27 -27
  18. package/dist/formio.min.js +1 -1
  19. package/dist/formio.min.js.LICENSE.txt +2 -2
  20. package/dist/formio.utils.js +19 -19
  21. package/dist/formio.utils.min.js +1 -1
  22. package/dist/formio.utils.min.js.LICENSE.txt +2 -2
  23. package/lib/cjs/Element.js +1 -1
  24. package/lib/cjs/Embed.js +8 -16
  25. package/lib/cjs/Form.js +4 -4
  26. package/lib/cjs/Formio.js +2 -9
  27. package/lib/cjs/InlineEmbed.js +1 -4
  28. package/lib/cjs/PDF.js +28 -8
  29. package/lib/cjs/PDFBuilder.js +6 -10
  30. package/lib/cjs/Webform.d.ts +1 -0
  31. package/lib/cjs/Webform.js +19 -34
  32. package/lib/cjs/WebformBuilder.js +27 -68
  33. package/lib/cjs/Wizard.d.ts +2 -0
  34. package/lib/cjs/Wizard.js +59 -31
  35. package/lib/cjs/WizardBuilder.js +5 -15
  36. package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.form.js +2 -6
  37. package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.js +3 -9
  38. package/lib/cjs/addons/index.js +1 -3
  39. package/lib/cjs/components/_classes/component/Component.d.ts +5 -5
  40. package/lib/cjs/components/_classes/component/Component.js +60 -132
  41. package/lib/cjs/components/_classes/component/editForm/Component.edit.data.js +2 -4
  42. package/lib/cjs/components/_classes/component/editForm/Component.edit.display.js +4 -16
  43. package/lib/cjs/components/_classes/component/editForm/Component.edit.validation.js +1 -4
  44. package/lib/cjs/components/_classes/field/Field.js +1 -4
  45. package/lib/cjs/components/_classes/input/Input.js +2 -2
  46. package/lib/cjs/components/_classes/list/ListComponent.js +4 -4
  47. package/lib/cjs/components/_classes/list/editForm/ListComponent.edit.data.js +6 -28
  48. package/lib/cjs/components/_classes/multivalue/Multivalue.js +8 -26
  49. package/lib/cjs/components/_classes/nested/NestedComponent.js +1 -4
  50. package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.js +5 -9
  51. package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.js +1 -3
  52. package/lib/cjs/components/address/Address.js +10 -30
  53. package/lib/cjs/components/address/editForm/Address.edit.provider.js +8 -32
  54. package/lib/cjs/components/alert/Alert.js +3 -6
  55. package/lib/cjs/components/button/Button.js +10 -17
  56. package/lib/cjs/components/button/editForm/Button.edit.display.js +8 -32
  57. package/lib/cjs/components/checkbox/Checkbox.js +4 -10
  58. package/lib/cjs/components/checkbox/editForm/Checkbox.edit.display.js +2 -8
  59. package/lib/cjs/components/columns/Columns.js +5 -17
  60. package/lib/cjs/components/container/Container.js +1 -3
  61. package/lib/cjs/components/currency/Currency.js +2 -7
  62. package/lib/cjs/components/datagrid/DataGrid.js +31 -63
  63. package/lib/cjs/components/datamap/DataMap.js +4 -16
  64. package/lib/cjs/components/datetime/DateTime.js +2 -6
  65. package/lib/cjs/components/datetime/editForm/DateTime.edit.display.js +1 -4
  66. package/lib/cjs/components/day/Day.js +12 -70
  67. package/lib/cjs/components/day/editForm/Day.edit.day.js +1 -3
  68. package/lib/cjs/components/day/editForm/Day.edit.month.js +1 -3
  69. package/lib/cjs/components/editgrid/EditGrid.d.ts +1 -0
  70. package/lib/cjs/components/editgrid/EditGrid.js +18 -44
  71. package/lib/cjs/components/editgrid/editForm/EditGrid.edit.display.js +1 -4
  72. package/lib/cjs/components/file/File.js +52 -75
  73. package/lib/cjs/components/file/editForm/File.edit.display.js +1 -5
  74. package/lib/cjs/components/file/editForm/File.edit.file.d.ts +9 -3
  75. package/lib/cjs/components/file/editForm/File.edit.file.js +27 -52
  76. package/lib/cjs/components/form/Form.js +5 -7
  77. package/lib/cjs/components/html/HTML.d.ts +1 -1
  78. package/lib/cjs/components/html/HTML.js +8 -10
  79. package/lib/cjs/components/number/Number.js +7 -5
  80. package/lib/cjs/components/panel/editForm/Panel.edit.display.js +3 -12
  81. package/lib/cjs/components/password/Password.js +1 -4
  82. package/lib/cjs/components/radio/Radio.js +17 -17
  83. package/lib/cjs/components/radio/editForm/Radio.edit.data.js +4 -14
  84. package/lib/cjs/components/recaptcha/ReCaptcha.js +3 -6
  85. package/lib/cjs/components/select/Select.js +48 -92
  86. package/lib/cjs/components/select/editForm/Select.edit.data.js +37 -182
  87. package/lib/cjs/components/select/editForm/Select.edit.validation.js +1 -9
  88. package/lib/cjs/components/selectboxes/SelectBoxes.js +3 -6
  89. package/lib/cjs/components/signature/Signature.d.ts +1 -1
  90. package/lib/cjs/components/signature/Signature.js +21 -24
  91. package/lib/cjs/components/signature/editForm/Signature.edit.display.d.ts +4 -10
  92. package/lib/cjs/components/signature/editForm/Signature.edit.display.js +8 -12
  93. package/lib/cjs/components/survey/Survey.js +6 -17
  94. package/lib/cjs/components/survey/editForm/Survey.edit.data.js +4 -12
  95. package/lib/cjs/components/table/editForm/Table.edit.display.js +3 -3
  96. package/lib/cjs/components/tabs/Tabs.js +4 -19
  97. package/lib/cjs/components/tabs/editForm/Tabs.edit.display.js +1 -3
  98. package/lib/cjs/components/tags/Tags.js +4 -14
  99. package/lib/cjs/components/textarea/TextArea.js +8 -15
  100. package/lib/cjs/components/textarea/editForm/TextArea.edit.display.js +14 -56
  101. package/lib/cjs/components/textfield/TextField.js +4 -4
  102. package/lib/cjs/components/textfield/editForm/TextField.edit.display.js +2 -8
  103. package/lib/cjs/components/time/Time.js +1 -4
  104. package/lib/cjs/components/time/editForm/Time.edit.display.js +1 -4
  105. package/lib/cjs/formio.form.js +5 -5
  106. package/lib/cjs/package.json +1 -1
  107. package/lib/cjs/providers/address/AddressProvider.js +1 -1
  108. package/lib/cjs/providers/address/GoogleAddressProvider.js +1 -3
  109. package/lib/cjs/providers/processor/fileProcessor.js +1 -3
  110. package/lib/cjs/providers/storage/azure.js +5 -6
  111. package/lib/cjs/providers/storage/indexeddb.js +17 -18
  112. package/lib/cjs/providers/storage/s3.js +3 -14
  113. package/lib/cjs/providers/storage/url.js +13 -2
  114. package/lib/cjs/providers/storage/xhr.js +19 -28
  115. package/lib/cjs/templates/Templates.js +1 -0
  116. package/lib/cjs/templates/index.d.ts +1 -0
  117. package/lib/cjs/translations/en.d.ts +237 -82
  118. package/lib/cjs/translations/en.js +9 -82
  119. package/lib/cjs/utils/ChoicesWrapper.js +1 -1
  120. package/lib/cjs/utils/builder.js +5 -26
  121. package/lib/cjs/utils/i18n.d.ts +5 -2
  122. package/lib/cjs/utils/i18n.js +33 -12
  123. package/lib/cjs/utils/utils.js +37 -47
  124. package/lib/cjs/widgets/CalendarWidget.js +2 -6
  125. package/lib/mjs/Element.js +1 -1
  126. package/lib/mjs/Embed.js +8 -16
  127. package/lib/mjs/Form.js +4 -4
  128. package/lib/mjs/Formio.js +2 -9
  129. package/lib/mjs/InlineEmbed.js +1 -4
  130. package/lib/mjs/PDF.js +27 -8
  131. package/lib/mjs/PDFBuilder.js +6 -10
  132. package/lib/mjs/Webform.d.ts +1 -0
  133. package/lib/mjs/Webform.js +19 -31
  134. package/lib/mjs/WebformBuilder.js +27 -68
  135. package/lib/mjs/Wizard.d.ts +2 -0
  136. package/lib/mjs/Wizard.js +54 -27
  137. package/lib/mjs/WizardBuilder.js +5 -15
  138. package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.form.js +2 -6
  139. package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.js +3 -9
  140. package/lib/mjs/addons/index.js +1 -3
  141. package/lib/mjs/components/_classes/component/Component.d.ts +5 -5
  142. package/lib/mjs/components/_classes/component/Component.js +59 -132
  143. package/lib/mjs/components/_classes/component/editForm/Component.edit.data.js +2 -4
  144. package/lib/mjs/components/_classes/component/editForm/Component.edit.display.js +4 -16
  145. package/lib/mjs/components/_classes/component/editForm/Component.edit.validation.js +1 -4
  146. package/lib/mjs/components/_classes/field/Field.js +1 -4
  147. package/lib/mjs/components/_classes/input/Input.js +2 -2
  148. package/lib/mjs/components/_classes/list/ListComponent.js +4 -4
  149. package/lib/mjs/components/_classes/list/editForm/ListComponent.edit.data.js +6 -28
  150. package/lib/mjs/components/_classes/multivalue/Multivalue.js +8 -26
  151. package/lib/mjs/components/_classes/nested/NestedComponent.js +1 -4
  152. package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.js +5 -9
  153. package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.js +1 -3
  154. package/lib/mjs/components/address/Address.js +10 -30
  155. package/lib/mjs/components/address/editForm/Address.edit.provider.js +8 -32
  156. package/lib/mjs/components/alert/Alert.js +3 -6
  157. package/lib/mjs/components/button/Button.js +9 -16
  158. package/lib/mjs/components/button/editForm/Button.edit.display.js +8 -32
  159. package/lib/mjs/components/checkbox/Checkbox.js +4 -10
  160. package/lib/mjs/components/checkbox/editForm/Checkbox.edit.display.js +2 -8
  161. package/lib/mjs/components/columns/Columns.js +5 -17
  162. package/lib/mjs/components/container/Container.js +1 -3
  163. package/lib/mjs/components/currency/Currency.js +2 -7
  164. package/lib/mjs/components/datagrid/DataGrid.js +30 -63
  165. package/lib/mjs/components/datamap/DataMap.js +12 -18
  166. package/lib/mjs/components/datetime/DateTime.js +2 -6
  167. package/lib/mjs/components/datetime/editForm/DateTime.edit.display.js +1 -4
  168. package/lib/mjs/components/day/Day.js +12 -70
  169. package/lib/mjs/components/day/editForm/Day.edit.day.js +1 -3
  170. package/lib/mjs/components/day/editForm/Day.edit.month.js +1 -3
  171. package/lib/mjs/components/editgrid/EditGrid.d.ts +1 -0
  172. package/lib/mjs/components/editgrid/EditGrid.js +18 -44
  173. package/lib/mjs/components/editgrid/editForm/EditGrid.edit.display.js +1 -4
  174. package/lib/mjs/components/file/File.js +52 -75
  175. package/lib/mjs/components/file/editForm/File.edit.display.js +1 -5
  176. package/lib/mjs/components/file/editForm/File.edit.file.d.ts +9 -3
  177. package/lib/mjs/components/file/editForm/File.edit.file.js +27 -52
  178. package/lib/mjs/components/form/Form.js +5 -7
  179. package/lib/mjs/components/html/HTML.d.ts +1 -1
  180. package/lib/mjs/components/html/HTML.js +8 -10
  181. package/lib/mjs/components/number/Number.js +7 -5
  182. package/lib/mjs/components/panel/editForm/Panel.edit.display.js +3 -12
  183. package/lib/mjs/components/password/Password.js +1 -4
  184. package/lib/mjs/components/radio/Radio.js +17 -17
  185. package/lib/mjs/components/radio/editForm/Radio.edit.data.js +4 -14
  186. package/lib/mjs/components/recaptcha/ReCaptcha.js +3 -6
  187. package/lib/mjs/components/select/Select.js +51 -95
  188. package/lib/mjs/components/select/editForm/Select.edit.data.js +37 -182
  189. package/lib/mjs/components/select/editForm/Select.edit.validation.js +1 -9
  190. package/lib/mjs/components/selectboxes/SelectBoxes.js +3 -6
  191. package/lib/mjs/components/signature/Signature.d.ts +1 -1
  192. package/lib/mjs/components/signature/Signature.js +20 -23
  193. package/lib/mjs/components/signature/editForm/Signature.edit.display.d.ts +4 -10
  194. package/lib/mjs/components/signature/editForm/Signature.edit.display.js +6 -12
  195. package/lib/mjs/components/survey/Survey.js +6 -17
  196. package/lib/mjs/components/survey/editForm/Survey.edit.data.js +4 -12
  197. package/lib/mjs/components/table/editForm/Table.edit.display.js +3 -3
  198. package/lib/mjs/components/tabs/Tabs.js +4 -19
  199. package/lib/mjs/components/tabs/editForm/Tabs.edit.display.js +1 -3
  200. package/lib/mjs/components/tags/Tags.js +4 -14
  201. package/lib/mjs/components/textarea/TextArea.js +8 -15
  202. package/lib/mjs/components/textarea/editForm/TextArea.edit.display.js +14 -56
  203. package/lib/mjs/components/textfield/TextField.js +4 -4
  204. package/lib/mjs/components/textfield/editForm/TextField.edit.display.js +2 -8
  205. package/lib/mjs/components/time/Time.js +1 -4
  206. package/lib/mjs/components/time/editForm/Time.edit.display.js +1 -4
  207. package/lib/mjs/formio.form.js +6 -6
  208. package/lib/mjs/package.json +1 -1
  209. package/lib/mjs/providers/address/AddressProvider.js +1 -1
  210. package/lib/mjs/providers/address/GoogleAddressProvider.js +1 -3
  211. package/lib/mjs/providers/processor/fileProcessor.js +1 -3
  212. package/lib/mjs/providers/storage/azure.js +5 -6
  213. package/lib/mjs/providers/storage/indexeddb.js +17 -18
  214. package/lib/mjs/providers/storage/s3.js +3 -14
  215. package/lib/mjs/providers/storage/url.js +13 -2
  216. package/lib/mjs/providers/storage/xhr.js +19 -32
  217. package/lib/mjs/templates/Templates.js +1 -0
  218. package/lib/mjs/templates/index.d.ts +1 -0
  219. package/lib/mjs/translations/en.d.ts +237 -82
  220. package/lib/mjs/translations/en.js +88 -0
  221. package/lib/mjs/utils/ChoicesWrapper.js +1 -1
  222. package/lib/mjs/utils/builder.js +5 -26
  223. package/lib/mjs/utils/i18n.d.ts +5 -2
  224. package/lib/mjs/utils/i18n.js +33 -12
  225. package/lib/mjs/utils/utils.js +37 -47
  226. package/lib/mjs/widgets/CalendarWidget.js +2 -6
  227. package/package.json +6 -4
@@ -28,10 +28,7 @@ export default [
28
28
  tooltip: "The <a href='https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html'>S3 Multipart Upload API</a> is designed to improve the upload experience for larger objects (> 5GB).",
29
29
  conditional: {
30
30
  json: {
31
- '===': [
32
- { var: 'data.storage' },
33
- 's3',
34
- ],
31
+ '===': [{ var: 'data.storage' }, 's3'],
35
32
  },
36
33
  },
37
34
  },
@@ -63,10 +60,7 @@ export default [
63
60
  ],
64
61
  conditional: {
65
62
  json: {
66
- '===': [
67
- { var: 'data.useMultipartUpload' },
68
- true,
69
- ],
63
+ '===': [{ var: 'data.useMultipartUpload' }, true],
70
64
  },
71
65
  },
72
66
  },
@@ -80,56 +74,46 @@ export default [
80
74
  tooltip: "See <a href='https://github.com/danialfarid/ng-file-upload#server-side' target='_blank'>https://github.com/danialfarid/ng-file-upload#server-side</a> for how to set up the server.",
81
75
  conditional: {
82
76
  json: {
83
- '===': [
84
- { var: 'data.storage' },
85
- 'url',
86
- ],
77
+ '===': [{ var: 'data.storage' }, 'url'],
87
78
  },
88
79
  },
89
80
  },
90
81
  {
91
- type: 'textfield',
92
- input: true,
93
- key: 'options.indexeddb',
94
- label: 'Database',
82
+ type: 'container',
83
+ key: 'options',
84
+ label: 'IndexedDB options',
95
85
  weight: 10,
96
- placeholder: 'Enter the indexeddb database name',
97
- conditional: {
98
- json: {
99
- in: [
100
- {
101
- var: 'data.storage',
102
- },
103
- [
104
- 'indexeddb',
105
- ],
106
- ],
107
- },
108
- },
109
- },
110
- {
111
- type: 'textfield',
112
86
  input: true,
113
- label: 'Table',
114
- key: 'options.indexeddbTable',
115
- weight: 10,
116
- placeholder: 'Enter the name for indexeddb table',
117
87
  conditional: {
118
88
  json: {
119
89
  in: [
120
90
  {
121
91
  var: 'data.storage',
122
92
  },
123
- [
124
- 'indexeddb',
125
- ],
93
+ ['indexeddb'],
126
94
  ],
127
95
  },
128
96
  },
97
+ components: [
98
+ {
99
+ type: 'textfield',
100
+ input: true,
101
+ key: 'indexeddb',
102
+ label: 'Database',
103
+ placeholder: 'Enter the indexeddb database name',
104
+ },
105
+ {
106
+ type: 'textfield',
107
+ input: true,
108
+ key: 'indexeddbTable',
109
+ label: 'Table',
110
+ placeholder: 'Enter the name for indexeddb table',
111
+ },
112
+ ],
129
113
  },
130
114
  {
131
115
  type: 'textarea',
132
- key: 'options',
116
+ key: 'urlRequestOptions',
133
117
  label: 'Custom request options',
134
118
  tooltip: 'Pass your custom xhr options(optional)',
135
119
  rows: 5,
@@ -296,10 +280,7 @@ export default [
296
280
  weight: 31,
297
281
  conditional: {
298
282
  json: {
299
- '===': [
300
- { var: 'data.storage' },
301
- 'url',
302
- ],
283
+ '===': [{ var: 'data.storage' }, 'url'],
303
284
  },
304
285
  },
305
286
  },
@@ -313,10 +294,7 @@ export default [
313
294
  weight: 40,
314
295
  conditional: {
315
296
  json: {
316
- '==': [
317
- { var: 'data.image' },
318
- true,
319
- ],
297
+ '==': [{ var: 'data.image' }, true],
320
298
  },
321
299
  },
322
300
  },
@@ -338,10 +316,7 @@ export default [
338
316
  weight: 38,
339
317
  conditional: {
340
318
  json: {
341
- '==': [
342
- { var: 'data.webcam' },
343
- true,
344
- ],
319
+ '==': [{ var: 'data.webcam' }, true],
345
320
  },
346
321
  },
347
322
  },
@@ -29,9 +29,7 @@ export default class FormComponent extends Component {
29
29
  };
30
30
  }
31
31
  static savedValueTypes() {
32
- return [
33
- componentValueTypes.object,
34
- ];
32
+ return [componentValueTypes.object];
35
33
  }
36
34
  init() {
37
35
  super.init();
@@ -215,7 +213,7 @@ export default class FormComponent extends Component {
215
213
  }
216
214
  render() {
217
215
  if (this.builderMode) {
218
- return super.render(this.component.label || 'Nested form');
216
+ return super.render(this.t(this.component.label || 'nestedForm'));
219
217
  }
220
218
  const subform = this.subForm ? this.subForm.render() : this.renderTemplate('loading');
221
219
  return super.render(subform);
@@ -228,13 +226,13 @@ export default class FormComponent extends Component {
228
226
  */
229
227
  getValueAsString(value, options) {
230
228
  if (!value) {
231
- return 'No data provided';
229
+ return this.t('noDataProvided');
232
230
  }
233
231
  if (!value.data && value._id) {
234
232
  return value._id;
235
233
  }
236
234
  if (!value.data || !Object.keys(value.data).length) {
237
- return 'No data provided';
235
+ return this.t('noDataProvided');
238
236
  }
239
237
  if (options?.email) {
240
238
  let result = `
@@ -696,7 +694,7 @@ export default class FormComponent extends Component {
696
694
  : {};
697
695
  this.subForm.setUrl(submissionUrl, { ...this.options, ...options });
698
696
  this.subForm.loadSubmission().catch((err) => {
699
- console.error(`Unable to load subform submission ${submission._id}:`, err);
697
+ console.error(this.t('subformSubmissionLoadingError', { submissionId: submission._id }), err);
700
698
  });
701
699
  }
702
700
  else {
@@ -12,7 +12,7 @@ export default class HTMLComponent extends Component {
12
12
  get content(): any;
13
13
  get singleTags(): string[];
14
14
  checkRefreshOn(changed: any): void;
15
- renderContent(): any;
15
+ renderContent(content?: any): any;
16
16
  render(): string;
17
17
  get dataReady(): any;
18
18
  attach(element: any): Promise<void>;
@@ -49,11 +49,7 @@ export default class HTMLComponent extends Component {
49
49
  return content;
50
50
  }
51
51
  get singleTags() {
52
- return [
53
- 'br',
54
- 'img',
55
- 'hr',
56
- ];
52
+ return ['br', 'img', 'hr'];
57
53
  }
58
54
  checkRefreshOn(changed) {
59
55
  super.checkRefreshOn(changed);
@@ -70,7 +66,7 @@ export default class HTMLComponent extends Component {
70
66
  this.setContent(this.element, this.renderContent());
71
67
  }
72
68
  }
73
- renderContent() {
69
+ renderContent(content = this.content) {
74
70
  const submission = _.get(this.root, 'submission', {});
75
71
  return this.renderTemplate('html', {
76
72
  component: this.component,
@@ -86,23 +82,25 @@ export default class HTMLComponent extends Component {
86
82
  }),
87
83
  };
88
84
  }),
89
- content: this.content,
85
+ content,
90
86
  singleTags: this.singleTags,
91
87
  });
92
88
  }
93
89
  render() {
94
- return super.render(this.renderContent());
90
+ return super.render(this.renderContent(''));
95
91
  }
96
92
  get dataReady() {
97
93
  return this.root?.submissionReady || Promise.resolve();
98
94
  }
99
95
  attach(element) {
100
96
  this.loadRefs(element, { html: 'single' });
101
- this.dataReady.then(() => {
97
+ const setHtmlContent = () => {
102
98
  if (this.refs.html) {
103
99
  this.setContent(this.refs.html, this.content);
104
100
  }
105
- });
101
+ };
102
+ setHtmlContent();
103
+ this.dataReady.then(setHtmlContent);
106
104
  return super.attach(element);
107
105
  }
108
106
  }
@@ -47,9 +47,7 @@ export default class NumberComponent extends Input {
47
47
  }
48
48
  static savedValueTypes(schema) {
49
49
  schema = schema || {};
50
- return (getComponentSavedTypes(schema) || [
51
- componentValueTypes.number,
52
- ]);
50
+ return getComponentSavedTypes(schema) || [componentValueTypes.number];
53
51
  }
54
52
  constructor(...args) {
55
53
  super(...args);
@@ -70,7 +68,7 @@ export default class NumberComponent extends Input {
70
68
  if (this.component.thousandsSeparator ||
71
69
  this.options.properties?.thousandsSeparator ||
72
70
  this.options.thousandsSeparator) {
73
- console.warn('In order for thousands separator to work properly, you must set the delimiter to true in the component json');
71
+ console.warn(this.t('noDelimiterSet'));
74
72
  }
75
73
  this.delimiter = '';
76
74
  }
@@ -187,7 +185,11 @@ export default class NumberComponent extends Input {
187
185
  return null;
188
186
  }
189
187
  const val = this.refs.input[index].value;
190
- return val && val !== '-_' ? this.parseNumber(val) : null;
188
+ const result = val && val !== '-_' ? this.parseNumber(val) : null;
189
+ if (_.isNaN(result)) {
190
+ return null;
191
+ }
192
+ return result;
191
193
  }
192
194
  setValueAt(index, value, flags = {}) {
193
195
  return super.setValueAt(index, this.formatValue(this.parseValue(value)), flags);
@@ -87,10 +87,7 @@ export default [
87
87
  defaultValue: true,
88
88
  customConditional({ data = {}, buildingForm = {} }) {
89
89
  const formSettings = buildingForm.settings || {};
90
- return ![
91
- data.breadcrumb,
92
- formSettings.wizardBreadcrumbsType,
93
- ].includes('none');
90
+ return ![data.breadcrumb, formSettings.wizardBreadcrumbsType].includes('none');
94
91
  },
95
92
  },
96
93
  {
@@ -102,10 +99,7 @@ export default [
102
99
  tooltip: 'Determines if the breadcrumb bar is clickable or not for visited tabs.',
103
100
  conditional: {
104
101
  json: {
105
- '===': [
106
- { var: 'data.breadcrumbClickable' },
107
- false,
108
- ],
102
+ '===': [{ var: 'data.breadcrumbClickable' }, false],
109
103
  },
110
104
  },
111
105
  },
@@ -211,10 +205,7 @@ export default [
211
205
  input: true,
212
206
  conditional: {
213
207
  json: {
214
- '===': [
215
- { var: 'data.collapsible' },
216
- true,
217
- ],
208
+ '===': [{ var: 'data.collapsible' }, true],
218
209
  },
219
210
  },
220
211
  },
@@ -21,10 +21,7 @@ export default class PasswordComponent extends TextFieldComponent {
21
21
  };
22
22
  }
23
23
  get defaultSchema() {
24
- return _.omit(PasswordComponent.schema(), [
25
- 'protected',
26
- 'tableView',
27
- ]);
24
+ return _.omit(PasswordComponent.schema(), ['protected', 'tableView']);
28
25
  }
29
26
  get inputInfo() {
30
27
  const info = super.inputInfo;
@@ -9,9 +9,7 @@ export default class RadioComponent extends ListComponent {
9
9
  inputType: 'radio',
10
10
  label: 'Radio',
11
11
  key: 'radio',
12
- values: [
13
- { label: '', value: '' },
14
- ],
12
+ values: [{ label: '', value: '' }],
15
13
  data: {
16
14
  url: '',
17
15
  },
@@ -61,23 +59,12 @@ export default class RadioComponent extends ListComponent {
61
59
  return types;
62
60
  }
63
61
  if (dataType === 'object') {
64
- return [
65
- object,
66
- array,
67
- ];
62
+ return [object, array];
68
63
  }
69
64
  if (componentValueTypes[dataType]) {
70
- return [
71
- componentValueTypes[dataType],
72
- ];
65
+ return [componentValueTypes[dataType]];
73
66
  }
74
- return [
75
- boolean,
76
- string,
77
- number,
78
- object,
79
- array,
80
- ];
67
+ return [boolean, string, number, object, array];
81
68
  }
82
69
  constructor(component, options, data) {
83
70
  super(component, options, data);
@@ -356,6 +343,16 @@ export default class RadioComponent extends ListComponent {
356
343
  }
357
344
  setItems(items) {
358
345
  const listData = [];
346
+ // If the items is a string, then parse as JSON.
347
+ if (typeof items == 'string') {
348
+ try {
349
+ items = JSON.parse(items);
350
+ }
351
+ catch (err) {
352
+ console.warn(err.message);
353
+ items = [];
354
+ }
355
+ }
359
356
  items?.forEach((item, i) => {
360
357
  const valueAtProperty = _.get(item, this.component.valueProperty);
361
358
  this.loadedOptions[i] = {
@@ -415,6 +412,9 @@ export default class RadioComponent extends ListComponent {
415
412
  if (changed) {
416
413
  this.previousValue = this.dataValue;
417
414
  }
415
+ if (!this.visible) {
416
+ this.previousValue = this.emptyValue;
417
+ }
418
418
  return changed;
419
419
  }
420
420
  // If they clicked on the radio that is currently selected, it needs to reset the value.
@@ -18,9 +18,7 @@ export default [
18
18
  },
19
19
  onChange(context) {
20
20
  if (context && context.flags && context.flags && context.flags.modified) {
21
- context.data.values = [
22
- { label: '', value: '' },
23
- ];
21
+ context.data.values = [{ label: '', value: '' }];
24
22
  }
25
23
  },
26
24
  },
@@ -32,9 +30,7 @@ export default [
32
30
  tooltip: 'The radio button values that can be picked for this field. Values are text submitted with the form data. Labels are text that appears next to the radio buttons on the form.',
33
31
  weight: 10,
34
32
  reorder: true,
35
- defaultValue: [
36
- { label: '', value: '' },
37
- ],
33
+ defaultValue: [{ label: '', value: '' }],
38
34
  components: [
39
35
  {
40
36
  label: 'Label',
@@ -73,10 +69,7 @@ export default [
73
69
  ],
74
70
  conditional: {
75
71
  json: {
76
- '===': [
77
- { var: 'data.dataSrc' },
78
- 'values',
79
- ],
72
+ '===': [{ var: 'data.dataSrc' }, 'values'],
80
73
  },
81
74
  },
82
75
  },
@@ -104,10 +97,7 @@ export default [
104
97
  key: 'template',
105
98
  conditional: {
106
99
  json: {
107
- '===': [
108
- { var: 'data.dataSrc' },
109
- 'url',
110
- ],
100
+ '===': [{ var: 'data.dataSrc' }, 'url'],
111
101
  },
112
102
  },
113
103
  },
@@ -20,10 +20,7 @@ export default class ReCaptchaComponent extends Component {
20
20
  static get conditionOperatorsSettings() {
21
21
  return {
22
22
  ...super.conditionOperatorsSettings,
23
- operators: [
24
- 'isEmpty',
25
- 'isNotEmpty',
26
- ],
23
+ operators: ['isEmpty', 'isNotEmpty'],
27
24
  };
28
25
  }
29
26
  static get serverConditionSettings() {
@@ -50,7 +47,7 @@ export default class ReCaptchaComponent extends Component {
50
47
  this.recaptchaApiReady = Formio.requireLibrary('googleRecaptcha', 'grecaptcha', recaptchaApiScriptUrl, true);
51
48
  }
52
49
  else {
53
- console.warn('There is no Site Key specified in settings in form JSON');
50
+ console.warn(this.t('noSiteKey'));
54
51
  }
55
52
  }
56
53
  }
@@ -63,7 +60,7 @@ export default class ReCaptchaComponent extends Component {
63
60
  async verify(actionName) {
64
61
  const siteKey = _get(this.root?.form, 'settings.recaptcha.siteKey');
65
62
  if (!siteKey) {
66
- console.warn('There is no Site Key specified in settings in form JSON');
63
+ console.warn(this.t('noSiteKey'));
67
64
  return;
68
65
  }
69
66
  if (!this.recaptchaApiReady) {