@formio/js 5.0.0-dev.5954.7e72629 → 5.0.0-dev.5957.bed9ce0

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 (70) hide show
  1. package/README.md +28 -1
  2. package/dist/formio.form.js +69 -47
  3. package/dist/formio.form.min.js +1 -1
  4. package/dist/formio.full.js +72 -50
  5. package/dist/formio.full.min.js +1 -1
  6. package/lib/cjs/Form.js +4 -4
  7. package/lib/cjs/PDFBuilder.js +4 -4
  8. package/lib/cjs/Webform.d.ts +12 -12
  9. package/lib/cjs/Webform.js +132 -131
  10. package/lib/cjs/WebformBuilder.js +10 -10
  11. package/lib/cjs/Wizard.js +1 -1
  12. package/lib/cjs/WizardBuilder.js +1 -1
  13. package/lib/cjs/components/_classes/component/Component.js +11 -10
  14. package/lib/cjs/components/_classes/list/ListComponent.js +4 -4
  15. package/lib/cjs/components/_classes/multivalue/Multivalue.js +2 -2
  16. package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.js +3 -3
  17. package/lib/cjs/components/address/Address.js +1 -1
  18. package/lib/cjs/components/button/Button.js +6 -6
  19. package/lib/cjs/components/checkbox/Checkbox.js +1 -1
  20. package/lib/cjs/components/datagrid/DataGrid.js +1 -1
  21. package/lib/cjs/components/day/Day.js +2 -2
  22. package/lib/cjs/components/editgrid/EditGrid.js +4 -4
  23. package/lib/cjs/components/file/File.js +15 -15
  24. package/lib/cjs/components/form/Form.js +4 -4
  25. package/lib/cjs/components/number/Number.js +1 -1
  26. package/lib/cjs/components/recaptcha/ReCaptcha.js +2 -2
  27. package/lib/cjs/components/select/Select.js +5 -5
  28. package/lib/cjs/components/selectboxes/SelectBoxes.js +2 -2
  29. package/lib/cjs/components/signature/Signature.d.ts +1 -1
  30. package/lib/cjs/components/signature/Signature.js +2 -2
  31. package/lib/cjs/components/survey/Survey.js +2 -2
  32. package/lib/cjs/components/textarea/TextArea.js +6 -6
  33. package/lib/cjs/formio.form.js +4 -0
  34. package/lib/cjs/translations/en.d.ts +234 -81
  35. package/lib/cjs/translations/en.js +8 -81
  36. package/lib/cjs/utils/i18n.d.ts +5 -2
  37. package/lib/cjs/utils/i18n.js +32 -5
  38. package/lib/mjs/Form.js +4 -4
  39. package/lib/mjs/PDFBuilder.js +4 -4
  40. package/lib/mjs/Webform.d.ts +12 -12
  41. package/lib/mjs/Webform.js +142 -141
  42. package/lib/mjs/WebformBuilder.js +10 -10
  43. package/lib/mjs/Wizard.js +1 -1
  44. package/lib/mjs/WizardBuilder.js +1 -1
  45. package/lib/mjs/components/_classes/component/Component.js +11 -10
  46. package/lib/mjs/components/_classes/list/ListComponent.js +4 -4
  47. package/lib/mjs/components/_classes/multivalue/Multivalue.js +2 -2
  48. package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.js +3 -3
  49. package/lib/mjs/components/address/Address.js +1 -1
  50. package/lib/mjs/components/button/Button.js +6 -6
  51. package/lib/mjs/components/checkbox/Checkbox.js +1 -1
  52. package/lib/mjs/components/datagrid/DataGrid.js +1 -1
  53. package/lib/mjs/components/day/Day.js +2 -2
  54. package/lib/mjs/components/editgrid/EditGrid.js +4 -4
  55. package/lib/mjs/components/file/File.js +15 -15
  56. package/lib/mjs/components/form/Form.js +4 -4
  57. package/lib/mjs/components/number/Number.js +1 -1
  58. package/lib/mjs/components/recaptcha/ReCaptcha.js +2 -2
  59. package/lib/mjs/components/select/Select.js +7 -7
  60. package/lib/mjs/components/selectboxes/SelectBoxes.js +2 -2
  61. package/lib/mjs/components/signature/Signature.d.ts +1 -1
  62. package/lib/mjs/components/signature/Signature.js +2 -2
  63. package/lib/mjs/components/survey/Survey.js +2 -2
  64. package/lib/mjs/components/textarea/TextArea.js +6 -6
  65. package/lib/mjs/formio.form.js +4 -0
  66. package/lib/mjs/translations/en.d.ts +234 -81
  67. package/lib/mjs/translations/en.js +87 -1
  68. package/lib/mjs/utils/i18n.d.ts +5 -2
  69. package/lib/mjs/utils/i18n.js +32 -5
  70. package/package.json +2 -2
@@ -177,7 +177,7 @@ class SignatureComponent extends Input_1.default {
177
177
  return this.renderModalPreview({
178
178
  previewText: this.dataValue ?
179
179
  `<img src=${this.dataValue} ${this._referenceAttributeName}='openModal' style="width: 100%;height: 100%;" />` :
180
- this.t('Click to Sign')
180
+ this.t('clickToSign')
181
181
  });
182
182
  }
183
183
  attach(element) {
@@ -245,7 +245,7 @@ class SignatureComponent extends Input_1.default {
245
245
  if (lodash_1.default.isUndefined(value) && this.inDataTable) {
246
246
  return '';
247
247
  }
248
- return value ? 'Yes' : 'No';
248
+ return this.t(value ? 'yes' : 'no');
249
249
  }
250
250
  focus() {
251
251
  this.refs.padBody.focus();
@@ -128,8 +128,8 @@ class SurveyComponent extends Field_1.default {
128
128
  <table border="1" style="width:100%">
129
129
  <thead>
130
130
  <tr>
131
- <th>Question</th>
132
- <th>Value</th>
131
+ <th>${this.t('surveyQuestion')}</th>
132
+ <th>${this.t('surveyQuestionValue')}</th>
133
133
  </tr>
134
134
  </thead>
135
135
  <tbody>
@@ -136,7 +136,7 @@ class TextAreaComponent extends TextField_1.default {
136
136
  case 'quill':
137
137
  // Normalize the configurations for quill.
138
138
  if (settings.hasOwnProperty('toolbarGroups') || settings.hasOwnProperty('toolbar')) {
139
- console.warn('The WYSIWYG settings are configured for CKEditor. For this renderer, you will need to use configurations for the Quill Editor. See https://quilljs.com/docs/configuration for more information.');
139
+ console.warn(this.t('needConfigurationForQuill'));
140
140
  settings = this.wysiwygDefault.quill;
141
141
  }
142
142
  // Add the quill editor.
@@ -208,7 +208,7 @@ class TextAreaComponent extends TextField_1.default {
208
208
  imageHandler(moduleInstance, range, files) {
209
209
  const quillInstance = moduleInstance.quill;
210
210
  if (!files || !files.length) {
211
- console.warn('No files selected');
211
+ console.warn(this.t('noFilesSelected'));
212
212
  return;
213
213
  }
214
214
  quillInstance.enable(false);
@@ -233,7 +233,7 @@ class TextAreaComponent extends TextField_1.default {
233
233
  alt: JSON.stringify(requestData),
234
234
  }), Quill.sources.USER);
235
235
  }).catch(error => {
236
- console.warn('Quill image upload failed');
236
+ console.warn(this.t('quillImageUploadFailed'));
237
237
  console.warn(error);
238
238
  quillInstance.enable(true);
239
239
  });
@@ -530,7 +530,7 @@ class TextAreaComponent extends TextField_1.default {
530
530
  }
531
531
  this.element.scrollIntoView();
532
532
  }).catch((err) => {
533
- console.warn('An editor did not initialize properly when trying to focus:', err);
533
+ console.warn(this.t('editorFocusError'), err);
534
534
  });
535
535
  break;
536
536
  }
@@ -539,7 +539,7 @@ class TextAreaComponent extends TextField_1.default {
539
539
  this.editors[0].focus();
540
540
  this.element.scrollIntoView();
541
541
  }).catch((err) => {
542
- console.warn('An editor did not initialize properly when trying to focus:', err);
542
+ console.warn(this.t('editorFocusError'), err);
543
543
  });
544
544
  break;
545
545
  }
@@ -547,7 +547,7 @@ class TextAreaComponent extends TextField_1.default {
547
547
  (_c = this.editorsReady[0]) === null || _c === void 0 ? void 0 : _c.then(() => {
548
548
  this.editors[0].focus();
549
549
  }).catch((err) => {
550
- console.warn('An editor did not initialize properly when trying to focus:', err);
550
+ console.warn(this.t('editorFocusError'), err);
551
551
  });
552
552
  break;
553
553
  }
@@ -29,6 +29,7 @@ const EventEmitter_1 = __importDefault(require("./EventEmitter"));
29
29
  exports.EventEmitter = EventEmitter_1.default;
30
30
  const Webform_1 = __importDefault(require("./Webform"));
31
31
  exports.Webform = Webform_1.default;
32
+ const i18n_1 = require("./utils/i18n");
32
33
  Formio_1.Formio.loadModules = (path = `${Formio_1.Formio.getApiUrl()}/externalModules.js`, name = 'externalModules') => {
33
34
  Formio_1.Formio.requireLibrary(name, name, path, true)
34
35
  .then((modules) => {
@@ -101,6 +102,9 @@ function registerModule(mod, defaultFn = null, options = {}) {
101
102
  case 'evaluator':
102
103
  Formio_1.Formio.Evaluator.registerEvaluator(mod.evaluator);
103
104
  break;
105
+ case 'translations':
106
+ i18n_1.I18n.setDefaultTranslations(mod.translations);
107
+ break;
104
108
  case 'library':
105
109
  options.license
106
110
  ? Formio_1.Formio.Licenses.addLicense(mod.library, options.license)
@@ -1,82 +1,235 @@
1
- declare namespace _default {
2
- let unsavedRowsError: string;
3
- let invalidRowsError: string;
4
- let invalidRowError: string;
5
- let invalidOption: string;
6
- let invalidDay: string;
7
- let alertMessageWithLabel: string;
8
- let alertMessage: string;
9
- let complete: string;
10
- let error: string;
11
- let errorListHotkey: string;
12
- let errorsListNavigationMessage: string;
13
- let submitError: string;
14
- let required: string;
15
- let unique: string;
16
- let array: string;
17
- let array_nonempty: string;
18
- let nonarray: string;
19
- let select: string;
20
- let pattern: string;
21
- let minLength: string;
22
- let maxLength: string;
23
- let minWords: string;
24
- let maxWords: string;
25
- let min: string;
26
- let max: string;
27
- let maxDate: string;
28
- let minDate: string;
29
- let maxYear: string;
30
- let minYear: string;
31
- let minSelectedCount: string;
32
- let maxSelectedCount: string;
33
- let invalid_email: string;
34
- let invalid_url: string;
35
- let invalid_regex: string;
36
- let invalid_date: string;
37
- let invalid_day: string;
38
- let invalidValueProperty: string;
39
- let mask: string;
40
- let valueIsNotAvailable: string;
41
- let stripe: string;
42
- let month: string;
43
- let day: string;
44
- let year: string;
45
- let january: string;
46
- let february: string;
47
- let march: string;
48
- let april: string;
49
- let may: string;
50
- let june: string;
51
- let july: string;
52
- let august: string;
53
- let september: string;
54
- let october: string;
55
- let november: string;
56
- let december: string;
57
- let next: string;
58
- let previous: string;
59
- let cancel: string;
60
- let submit: string;
61
- let confirmCancel: string;
62
- let saveDraftInstanceError: string;
63
- let saveDraftAuthError: string;
64
- let restoreDraftInstanceError: string;
65
- let saveDraftError: string;
66
- let restoreDraftError: string;
67
- let time: string;
68
- let cancelButtonAriaLabel: string;
69
- let previousButtonAriaLabel: string;
70
- let nextButtonAriaLabel: string;
71
- let submitButtonAriaLabel: string;
72
- let reCaptchaTokenValidationError: string;
73
- let reCaptchaTokenNotSpecifiedError: string;
74
- let apiKey: string;
75
- let typeRemaining: string;
76
- let typeCount: string;
77
- let requiredDayField: string;
78
- let requiredDayEmpty: string;
79
- let requiredMonthField: string;
80
- let requiredYearField: string;
81
- }
1
+ declare const _default: {
2
+ unsavedRowsError: string;
3
+ invalidRowsError: string;
4
+ invalidRowError: string;
5
+ invalidOption: string;
6
+ invalidDay: string;
7
+ alertMessageWithLabel: string;
8
+ alertMessage: string;
9
+ complete: string;
10
+ error: string;
11
+ errorListHotkey: string;
12
+ errorsListNavigationMessage: string;
13
+ submitError: string;
14
+ required: string;
15
+ unique: string;
16
+ array: string;
17
+ array_nonempty: string;
18
+ nonarray: string;
19
+ select: string;
20
+ pattern: string;
21
+ minLength: string;
22
+ maxLength: string;
23
+ minWords: string;
24
+ maxWords: string;
25
+ min: string;
26
+ max: string;
27
+ maxDate: string;
28
+ minDate: string;
29
+ maxYear: string;
30
+ minYear: string;
31
+ minSelectedCount: string;
32
+ maxSelectedCount: string;
33
+ invalid_email: string;
34
+ invalid_url: string;
35
+ invalid_regex: string;
36
+ invalid_date: string;
37
+ invalid_day: string;
38
+ invalidValueProperty: string;
39
+ mask: string;
40
+ valueIsNotAvailable: string;
41
+ stripe: string;
42
+ month: string;
43
+ day: string;
44
+ year: string;
45
+ january: string;
46
+ february: string;
47
+ march: string;
48
+ april: string;
49
+ may: string;
50
+ june: string;
51
+ july: string;
52
+ august: string;
53
+ september: string;
54
+ october: string;
55
+ november: string;
56
+ december: string;
57
+ next: string;
58
+ previous: string;
59
+ cancel: string;
60
+ submit: string;
61
+ confirmCancel: string;
62
+ saveDraftInstanceError: string;
63
+ saveDraftAuthError: string;
64
+ restoreDraftInstanceError: string;
65
+ saveDraftError: string;
66
+ restoreDraftError: string;
67
+ time: string;
68
+ cancelButtonAriaLabel: string;
69
+ previousButtonAriaLabel: string;
70
+ nextButtonAriaLabel: string;
71
+ submitButtonAriaLabel: string;
72
+ reCaptchaTokenValidationError: string;
73
+ reCaptchaTokenNotSpecifiedError: string;
74
+ apiKey: string;
75
+ typeRemaining: string;
76
+ typeCount: string;
77
+ requiredDayField: string;
78
+ requiredDayEmpty: string;
79
+ requiredMonthField: string;
80
+ requiredYearField: string;
81
+ formNotReady: string;
82
+ noFormElement: string;
83
+ notUniqueKey: string;
84
+ newFormSchema: string;
85
+ missingUrl: string;
86
+ urlNotAttachedToBtn: string;
87
+ loadingProjectSettingsError: string;
88
+ sessionStorageSupportError: string;
89
+ builderUniqueError: string;
90
+ pageNotFound: string;
91
+ noDragInfoError: string;
92
+ addonSupportTypeError: string;
93
+ setPathError: string;
94
+ calculatedPathDeprecation: string;
95
+ unknownTemplate: string;
96
+ unknownComponent: string;
97
+ renderTemplateFunctionDeprecation: string;
98
+ whenReadyDeprecation: string;
99
+ loadResourcesError: string;
100
+ noSelectDataConfiguration: string;
101
+ indexedDBSupportError: string;
102
+ caretPositionSavingError: string;
103
+ iteratableRowsError: string;
104
+ checkRowDeprecation: string;
105
+ noOAuthBtn: string;
106
+ noOAuthConfiguration: string;
107
+ oAuthErrorsTitle: string;
108
+ noOAuthFormUrl: string;
109
+ oAuthStateError: string;
110
+ componentInvalidRowValidation: string;
111
+ videoPlayerNotFound: string;
112
+ synchronizationFailed: string;
113
+ fileWithDuplicatedNameInProgress: string;
114
+ fileWithDuplicatedNameLoaded: string;
115
+ nestedForm: string;
116
+ noDataProvided: string;
117
+ subformSubmissionLoadingError: string;
118
+ noDelimiterSet: string;
119
+ noSiteKey: string;
120
+ failedToNormalize: string;
121
+ failedToCompareItems: string;
122
+ editorFocusError: string;
123
+ quillImageUploadFailed: string;
124
+ noFilesSelected: string;
125
+ needConfigurationForQuill: string;
126
+ waitPdfConverting: string;
127
+ uploading: string;
128
+ pasteBelow: string;
129
+ copy: string;
130
+ move: string;
131
+ edit: string;
132
+ editJson: string;
133
+ remove: string;
134
+ clickToSetValue: string;
135
+ words: string;
136
+ characters: string;
137
+ addAnother: string;
138
+ yes: string;
139
+ no: string;
140
+ wantToClearData: string;
141
+ yesDelete: string;
142
+ waitFileProcessing: string;
143
+ wrongFileType: string;
144
+ fileTooSmall: string;
145
+ fileTooBig: string;
146
+ noFileService: string;
147
+ fileProcessingFailed: string;
148
+ readyForUpload: string;
149
+ readyForRemovingFromStorage: string;
150
+ preparingFileToRemove: string;
151
+ succefullyRemoved: string;
152
+ succefullyUploaded: string;
153
+ maxSelectItems: string;
154
+ minSelectItems: string;
155
+ clickToSign: string;
156
+ surveyQuestion: string;
157
+ surveyQuestionValue: string;
158
+ success: string;
159
+ noResultsFound: string;
160
+ noChoices: string;
161
+ typeToSearch: string;
162
+ loading: string;
163
+ help: string;
164
+ component: string;
165
+ save: string;
166
+ preview: string;
167
+ dragAndDropComponent: string;
168
+ searchFields: string;
169
+ noMatchesFound: string;
170
+ fileName: string;
171
+ size: string;
172
+ type: string;
173
+ gallery: string;
174
+ camera: string;
175
+ dropFilesToAttach: string;
176
+ useCamera: string;
177
+ browse: string;
178
+ takePicture: string;
179
+ switchToFileUpload: string;
180
+ completeStatus: string;
181
+ noStorageSet: string;
182
+ noFileApiSupport: string;
183
+ noFormDataSupport: string;
184
+ noProgressSupport: string;
185
+ close: string;
186
+ addResource: string;
187
+ autocomplete: string;
188
+ showPreview: string;
189
+ hidePreview: string;
190
+ createPage: string;
191
+ page: string;
192
+ closeBtnDescription: string;
193
+ cancelBtnDescription: string;
194
+ saveBtnDescription: string;
195
+ addOrRemove: string;
196
+ anyFileTypesAllowed: string;
197
+ allowedFileTypes: string;
198
+ syncing: string;
199
+ syncNow: string;
200
+ pressToOpen: string;
201
+ browseToAttachFileFor: string;
202
+ or: string;
203
+ numericOnly: string;
204
+ uploadPdfFile: string;
205
+ dropToStart: string;
206
+ expand: string;
207
+ collapse: string;
208
+ add: string;
209
+ delete: string;
210
+ revert: string;
211
+ removeBtnPressToRemove: string;
212
+ file: string;
213
+ captureVideo: string;
214
+ captureAudio: string;
215
+ captureImage: string;
216
+ browseFiles: string;
217
+ noComponentsSetInGrid: string;
218
+ sortAscending: string;
219
+ sortDescending: string;
220
+ filter: string;
221
+ clear: string;
222
+ showItemsWithValue: string;
223
+ gridItemsPerPage: string;
224
+ gridAllItems: string;
225
+ recordsSelectedOnPage: string;
226
+ recordsSelectedInTable: string;
227
+ gridSelectAll: string;
228
+ itemsInTable: string;
229
+ clearSelection: string;
230
+ editGridRow: string;
231
+ deleteGridRow: string;
232
+ selected: string;
233
+ actions: string;
234
+ };
82
235
  export default _default;
@@ -1,83 +1,10 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = {
4
- unsavedRowsError: 'Please save all rows before proceeding.',
5
- invalidRowsError: 'Please correct invalid rows before proceeding.',
6
- invalidRowError: 'Invalid row. Please correct it or delete.',
7
- invalidOption: '{{field}} is an invalid value.',
8
- invalidDay: '{{field}} is not a valid day.',
9
- alertMessageWithLabel: '{{label}}: {{message}}',
10
- alertMessage: '{{message}}',
11
- complete: 'Submission Complete',
12
- error: 'Please fix the following errors before submitting.',
13
- errorListHotkey: 'Press Ctrl + Alt + X to go back to the error list.',
14
- errorsListNavigationMessage: 'Click to navigate to the field with following error.',
15
- submitError: 'Please check the form and correct all errors before submitting.',
16
- required: '{{field}} is required',
17
- unique: '{{field}} must be unique',
18
- array: '{{field}} must be an array',
19
- array_nonempty: '{{field}} must be a non-empty array', // eslint-disable-line camelcase
20
- nonarray: '{{field}} must not be an array',
21
- select: '{{field}} contains an invalid selection',
22
- pattern: '{{field}} does not match the pattern {{pattern}}',
23
- minLength: '{{field}} must have at least {{length}} characters.',
24
- maxLength: '{{field}} must have no more than {{length}} characters.',
25
- minWords: '{{field}} must have at least {{length}} words.',
26
- maxWords: '{{field}} must have no more than {{length}} words.',
27
- min: '{{field}} cannot be less than {{min}}.',
28
- max: '{{field}} cannot be greater than {{max}}.',
29
- maxDate: '{{field}} should not contain date after {{- maxDate}}',
30
- minDate: '{{field}} should not contain date before {{- minDate}}',
31
- maxYear: '{{field}} should not contain year greater than {{maxYear}}',
32
- minYear: '{{field}} should not contain year less than {{minYear}}',
33
- minSelectedCount: 'You must select at least {{minCount}} items',
34
- maxSelectedCount: 'You may only select up to {{maxCount}} items',
35
- invalid_email: '{{field}} must be a valid email.', // eslint-disable-line camelcase
36
- invalid_url: '{{field}} must be a valid url.', // eslint-disable-line camelcase
37
- invalid_regex: '{{field}} does not match the pattern {{regex}}.', // eslint-disable-line camelcase
38
- invalid_date: '{{field}} is not a valid date.', // eslint-disable-line camelcase
39
- invalid_day: '{{field}} is not a valid day.', // eslint-disable-line camelcase
40
- invalidValueProperty: 'Invalid Value Property',
41
- mask: '{{field}} does not match the mask.',
42
- valueIsNotAvailable: '{{ field }} is an invalid value.',
43
- stripe: '{{stripe}}',
44
- month: 'Month',
45
- day: 'Day',
46
- year: 'Year',
47
- january: 'January',
48
- february: 'February',
49
- march: 'March',
50
- april: 'April',
51
- may: 'May',
52
- june: 'June',
53
- july: 'July',
54
- august: 'August',
55
- september: 'September',
56
- october: 'October',
57
- november: 'November',
58
- december: 'December',
59
- next: 'Next',
60
- previous: 'Previous',
61
- cancel: 'Cancel',
62
- submit: 'Submit Form',
63
- confirmCancel: 'Are you sure you want to cancel?',
64
- saveDraftInstanceError: 'Cannot save draft because there is no formio instance.',
65
- saveDraftAuthError: 'Cannot save draft unless a user is authenticated.',
66
- restoreDraftInstanceError: 'Cannot restore draft because there is no formio instance.',
67
- saveDraftError: 'Unable to save draft.',
68
- restoreDraftError: 'Unable to restore draft.',
69
- time: 'Invalid time',
70
- cancelButtonAriaLabel: 'Cancel button. Click to reset the form',
71
- previousButtonAriaLabel: 'Previous button. Click to go back to the previous tab',
72
- nextButtonAriaLabel: 'Next button. Click to go to the next tab',
73
- submitButtonAriaLabel: 'Submit Form button. Click to submit the form',
74
- reCaptchaTokenValidationError: 'ReCAPTCHA: Token validation error',
75
- reCaptchaTokenNotSpecifiedError: 'ReCAPTCHA: Token is not specified in submission',
76
- apiKey: 'API Key is not unique: {{key}}',
77
- typeRemaining: '{{ remaining }} {{ type }} remaining.',
78
- typeCount: '{{ count }} {{ type }}',
79
- requiredDayField: '{{ field }} is required',
80
- requiredDayEmpty: '{{ field }} is required',
81
- requiredMonthField: '{{ field }} is required',
82
- requiredYearField: '{{ field }} is required'
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
83
4
  };
5
+ var _a;
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const bootstrap_1 = __importDefault(require("@formio/bootstrap"));
8
+ exports.default = Object.assign(Object.assign({}, (((_a = bootstrap_1.default === null || bootstrap_1.default === void 0 ? void 0 : bootstrap_1.default.translations) === null || _a === void 0 ? void 0 : _a.en) || {})), { unsavedRowsError: 'Please save all rows before proceeding.', invalidRowsError: 'Please correct invalid rows before proceeding.', invalidRowError: 'Invalid row. Please correct it or delete.', invalidOption: '{{field}} is an invalid value.', invalidDay: '{{field}} is not a valid day.', alertMessageWithLabel: '{{label}}: {{message}}', alertMessage: '{{message}}', complete: 'Submission Complete', error: 'Please fix the following errors before submitting.', errorListHotkey: 'Press Ctrl + Alt + X to go back to the error list.', errorsListNavigationMessage: 'Click to navigate to the field with following error.', submitError: 'Please check the form and correct all errors before submitting.', required: '{{field}} is required', unique: '{{field}} must be unique', array: '{{field}} must be an array', array_nonempty: '{{field}} must be a non-empty array', nonarray: '{{field}} must not be an array', select: '{{field}} contains an invalid selection', pattern: '{{field}} does not match the pattern {{pattern}}', minLength: '{{field}} must have at least {{length}} characters.', maxLength: '{{field}} must have no more than {{length}} characters.', minWords: '{{field}} must have at least {{length}} words.', maxWords: '{{field}} must have no more than {{length}} words.', min: '{{field}} cannot be less than {{min}}.', max: '{{field}} cannot be greater than {{max}}.', maxDate: '{{field}} should not contain date after {{- maxDate}}', minDate: '{{field}} should not contain date before {{- minDate}}', maxYear: '{{field}} should not contain year greater than {{maxYear}}', minYear: '{{field}} should not contain year less than {{minYear}}', minSelectedCount: 'You must select at least {{minCount}} items', maxSelectedCount: 'You may only select up to {{maxCount}} items', invalid_email: '{{field}} must be a valid email.', invalid_url: '{{field}} must be a valid url.', invalid_regex: '{{field}} does not match the pattern {{regex}}.', invalid_date: '{{field}} is not a valid date.', invalid_day: '{{field}} is not a valid day.', invalidValueProperty: 'Invalid Value Property', mask: '{{field}} does not match the mask.', valueIsNotAvailable: '{{ field }} is an invalid value.', stripe: '{{stripe}}', month: 'Month', day: 'Day', year: 'Year', january: 'January', february: 'February', march: 'March', april: 'April', may: 'May', june: 'June', july: 'July', august: 'August', september: 'September', october: 'October', november: 'November', december: 'December', next: 'Next', previous: 'Previous', cancel: 'Cancel', submit: 'Submit Form', confirmCancel: 'Are you sure you want to cancel?', saveDraftInstanceError: 'Cannot save draft because there is no formio instance.', saveDraftAuthError: 'Cannot save draft unless a user is authenticated.', restoreDraftInstanceError: 'Cannot restore draft because there is no formio instance.', saveDraftError: 'Unable to save draft.', restoreDraftError: 'Unable to restore draft.', time: 'Invalid time', cancelButtonAriaLabel: 'Cancel button. Click to reset the form', previousButtonAriaLabel: 'Previous button. Click to go back to the previous tab', nextButtonAriaLabel: 'Next button. Click to go to the next tab', submitButtonAriaLabel: 'Submit Form button. Click to submit the form', reCaptchaTokenValidationError: 'ReCAPTCHA: Token validation error', reCaptchaTokenNotSpecifiedError: 'ReCAPTCHA: Token is not specified in submission', apiKey: 'API Key is not unique: {{key}}', typeRemaining: '{{ remaining }} {{ type }} remaining.', typeCount: '{{ count }} {{ type }}', requiredDayField: '{{ field }} is required', requiredDayEmpty: '{{ field }} is required', requiredMonthField: '{{ field }} is required', requiredYearField: '{{ field }} is required', formNotReady: 'Form not ready. Use form.ready promise', noFormElement: 'No DOM element for form.', notUniqueKey: 'API Key is not unique', newFormSchema: 'Form schema is for a newer version, please upgrade your renderer. Some functionality may not work.', missingUrl: 'Missing URL argument', urlNotAttachedToBtn: 'You should add a URL to this button.', loadingProjectSettingsError: 'Could not load project settings', sessionStorageSupportError: 'Session storage is not supported in this browser.', builderUniqueError: `You cannot add more than one {{componentKeyOrTitle}} component to one page.`, pageNotFound: 'Page not found', noDragInfoError: 'There is no Drag Info available for either dragged or sibling element', addonSupportTypeError: 'Addon {{label}} does not support component of type {{type}}', setPathError: 'Should not be setting the path of a component.', calculatedPathDeprecation: 'component.calculatedPath was deprecated, use component.path instead.', unknownTemplate: 'Unknown template: {{name}}', unknownComponent: 'Unknown component: {{type}}', renderTemplateFunctionDeprecation: `Form.io 'render' template function is deprecated.
9
+ If you need to render template (template A) inside of another template (template B),
10
+ pass pre-compiled template A (use this.renderTemplate('template_A_name') as template context variable for template B`, whenReadyDeprecation: 'The whenReady() method has been deprecated. Please use the dataReady property instead.', loadResourcesError: 'Unable to load resources for {{componentKey}}', noSelectDataConfiguration: 'Select component {{componentKey}} does not have data configuration.', indexedDBSupportError: "Your browser doesn't support current version of indexedDB", caretPositionSavingError: 'An error occurred while trying to save caret position', iteratableRowsError: 'Getter #iteratableRows() is not implemented', checkRowDeprecation: 'Deprecation Warning: checkRow method has been replaced with processRow', noOAuthBtn: 'You must add the OAuth button to a form for it to function properly', noOAuthConfiguration: 'OAuth not configured. You must configure oauth for your project before it will work.', oAuthErrorsTitle: 'The Following Error Has Occured', noOAuthFormUrl: 'You must attach a Form API url to your form in order to use OAuth buttons.', oAuthStateError: 'OAuth state does not match. Please try logging in again.', componentInvalidRowValidation: 'Invalid row validation for {{componentKey}}', videoPlayerNotFound: 'Video player not found in template.', synchronizationFailed: 'Synchronization is failed', fileWithDuplicatedNameInProgress: 'File with the same name is already being uploaded', fileWithDuplicatedNameLoaded: 'File with the same name is already uploaded', nestedForm: 'Nested form', noDataProvided: 'No data provided', subformSubmissionLoadingError: 'Unable to load subform submission {{submissionId}}:', noDelimiterSet: 'In order for thousands separator to work properly, you must set the delimiter to true in the component json', noSiteKey: 'There is no Site Key specified in settings in form JSON', failedToNormalize: 'Failed to normalize value', failedToCompareItems: 'Error while comparing items', editorFocusError: 'An editor did not initialize properly when trying to focus:', quillImageUploadFailed: 'Quill image upload failed', noFilesSelected: 'No files selected', needConfigurationForQuill: 'The WYSIWYG settings are configured for CKEditor. For this renderer, you will need to use configurations for the Quill Editor. See https://quilljs.com/docs/configuration for more information.', waitPdfConverting: 'Converting PDF. Please wait.', uploading: 'Uploading', pasteBelow: 'Paste below', copy: 'Copy', move: 'Move', edit: 'Edit', editJson: 'Edit JSON', remove: 'Remove', clickToSetValue: 'Click to set value', words: 'words', characters: 'characters', addAnother: 'Add Another', yes: 'Yes', no: 'No', wantToClearData: 'Do you want to clear data?', yesDelete: 'Yes, delete it', waitFileProcessing: 'Processing file. Please wait...', wrongFileType: 'File is the wrong type; it must be {{ pattern }}', fileTooSmall: 'File is too small; it must be at least {{ size }}', fileTooBig: 'File is too big; it must be at most {{ size }}', noFileService: 'File Service not provided.', fileProcessingFailed: 'File processing has been failed.', readyForUpload: 'Ready to be uploaded into storage', readyForRemovingFromStorage: 'Ready to be removed from storage', preparingFileToRemove: 'Preparing file to remove', succefullyRemoved: 'Succefully removed', succefullyUploaded: 'Succefully uploaded', maxSelectItems: 'You may only select up to {{maxCount}} items', minSelectItems: 'You must select at least {{minCount}} items', clickToSign: 'Click to Sign', surveyQuestion: 'Question', surveyQuestionValue: 'Value', success: 'Success', noResultsFound: 'No results found', noChoices: 'No choices to choose from', typeToSearch: 'Type to search', loading: 'Loading' });
@@ -2,13 +2,16 @@
2
2
  * This file is used to mimic the i18n library interface.
3
3
  */
4
4
  export class I18n {
5
+ static languages: {};
6
+ static setDefaultTranslations(languages: any): void;
5
7
  static init(languages?: {}): I18n;
6
8
  static createInstance(): I18n;
7
9
  constructor(languages?: {});
8
- languages: {};
10
+ languages: any;
11
+ defaultKeys: any;
9
12
  language: string;
10
13
  currentLanguage: any;
11
- setLanguages(languages: any): void;
14
+ setLanguages(languages: any, noDefaultOverride: any): void;
12
15
  dir(lang?: string): "rtl" | "ltr";
13
16
  changeLanguage(language: any, ready?: null): void;
14
17
  addResourceBundle(language: any, type: any, strings: any): void;
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.I18n = void 0;
7
7
  const utils_1 = require("@formio/core/utils");
8
8
  const i18n_1 = __importDefault(require("../i18n"));
9
+ const lodash_1 = require("lodash");
10
+ const core_1 = require("@formio/core");
9
11
  const i18Defaults = {};
10
12
  for (const lang in i18n_1.default.resources) {
11
13
  if (i18n_1.default.resources.hasOwnProperty(lang)) {
@@ -17,13 +19,28 @@ for (const lang in i18n_1.default.resources) {
17
19
  */
18
20
  class I18n {
19
21
  constructor(languages = {}) {
20
- this.languages = i18Defaults;
22
+ var _a;
23
+ this.languages = (0, core_1.fastCloneDeep)(I18n.languages || {});
24
+ this.defaultKeys = ((_a = I18n.languages) === null || _a === void 0 ? void 0 : _a.en) || {};
21
25
  this.language = 'en';
22
26
  this.currentLanguage = i18Defaults.en;
23
27
  this.setLanguages(languages);
24
28
  this.changeLanguage(this.language);
25
29
  }
26
- setLanguages(languages) {
30
+ static setDefaultTranslations(languages) {
31
+ if ((0, lodash_1.isEmpty)(languages)) {
32
+ return;
33
+ }
34
+ for (const lang in languages) {
35
+ if (lang !== 'language' && languages.hasOwnProperty(lang)) {
36
+ if (!this.languages[lang]) {
37
+ this.languages[lang] = {};
38
+ }
39
+ this.languages[lang] = Object.assign(Object.assign({}, languages[lang]), this.languages[lang]);
40
+ }
41
+ }
42
+ }
43
+ setLanguages(languages, noDefaultOverride) {
27
44
  if (languages.resources) {
28
45
  for (const lang in languages.resources) {
29
46
  if (languages.resources.hasOwnProperty(lang)) {
@@ -50,7 +67,8 @@ class I18n {
50
67
  if (!this.languages[lang]) {
51
68
  this.languages[lang] = {};
52
69
  }
53
- this.languages[lang] = Object.assign(Object.assign({}, this.languages[lang]), languages[lang]);
70
+ this.languages[lang] = noDefaultOverride
71
+ ? Object.assign(Object.assign({}, languages[lang]), this.languages[lang]) : Object.assign(Object.assign({}, this.languages[lang]), languages[lang]);
54
72
  }
55
73
  }
56
74
  }
@@ -80,14 +98,23 @@ class I18n {
80
98
  }
81
99
  t(text, ...args) {
82
100
  var _a;
83
- if (this.currentLanguage[text]) {
101
+ let currentTranslation = this.currentLanguage[text];
102
+ // provide compatibility with cases where the entire phrase is used as a key
103
+ // get the phrase that is possibly being used as a key
104
+ const defaultKey = this.defaultKeys[text];
105
+ if (defaultKey && this.currentLanguage[defaultKey]) {
106
+ // get translation using the phrase as a key
107
+ currentTranslation = this.currentLanguage[defaultKey];
108
+ }
109
+ if (currentTranslation) {
84
110
  const customTranslationFieldName = (_a = args[0]) === null || _a === void 0 ? void 0 : _a.field;
85
111
  if (customTranslationFieldName && this.currentLanguage[customTranslationFieldName]) {
86
112
  args[0].field = this.currentLanguage[customTranslationFieldName];
87
113
  }
88
- return utils_1.Evaluator.interpolateString(this.currentLanguage[text], ...args);
114
+ return utils_1.Evaluator.interpolateString(currentTranslation, ...args);
89
115
  }
90
116
  return utils_1.Evaluator.interpolateString(text, ...args);
91
117
  }
92
118
  }
93
119
  exports.I18n = I18n;
120
+ I18n.languages = i18Defaults;
package/lib/mjs/Form.js CHANGED
@@ -406,10 +406,10 @@ export default class Form extends Element {
406
406
  */
407
407
  build() {
408
408
  if (!this.instance) {
409
- return Promise.reject('Form not ready. Use form.ready promise');
409
+ return Promise.reject(this.t('formNotReady'));
410
410
  }
411
411
  if (!this.element) {
412
- return Promise.reject('No DOM element for form.');
412
+ return Promise.reject(this.t('noFormElement'));
413
413
  }
414
414
  // Add temporary loader.
415
415
  const template = (this.options && this.options.template) ? this.options.template : 'bootstrap';
@@ -426,7 +426,7 @@ export default class Form extends Element {
426
426
  }
427
427
  render() {
428
428
  if (!this.instance) {
429
- return Promise.reject('Form not ready. Use form.ready promise');
429
+ return Promise.reject(this.t('formNotReady'));
430
430
  }
431
431
  return Promise.resolve(this.instance.render())
432
432
  .then((param) => {
@@ -436,7 +436,7 @@ export default class Form extends Element {
436
436
  }
437
437
  attach(element) {
438
438
  if (!this.instance) {
439
- return Promise.reject('Form not ready. Use form.ready promise');
439
+ return Promise.reject(this.t('formNotReady'));
440
440
  }
441
441
  if (this.element) {
442
442
  delete this.element.component;