@goldenpine/react-form-builder2 0.20.3-build.3 → 0.20.3-build.31

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.
@@ -10,6 +10,7 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
10
10
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
11
11
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
12
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
14
  var _react = _interopRequireDefault(require("react"));
14
15
  var _reactTextareaAutosize = _interopRequireDefault(require("react-textarea-autosize"));
15
16
  var _draftJs = require("draft-js");
@@ -34,6 +35,17 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
34
35
  var _this;
35
36
  (0, _classCallCheck2["default"])(this, FormElementsEdit);
36
37
  _this = _callSuper(this, FormElementsEdit, [props]);
38
+ // Instead of using editElementProp for the camera layout change, we have a separate handler to immediately update the element on change without waiting for blur, as it's a radio button and we want the change to be reflected immediately in the UI.
39
+ (0, _defineProperty2["default"])(_this, "handleUploadLayoutChange", function (e) {
40
+ var this_element = _this.state.element;
41
+ this_element["upload_layout"] = e.target["value"];
42
+ _this.setState({
43
+ element: this_element,
44
+ dirty: true
45
+ }, function () {
46
+ _this.updateElement();
47
+ });
48
+ });
37
49
  _this.state = {
38
50
  element: _this.props.element,
39
51
  data: _this.props.data,
@@ -122,9 +134,22 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
122
134
  });
123
135
  }
124
136
  }
137
+ }, {
138
+ key: "validateImageSize",
139
+ value: function validateImageSize(e) {
140
+ var regex = /^$|^\d+(px|%)$/;
141
+ if (regex.test(e.target.value)) {
142
+ e.target.classList.remove("is-invalid");
143
+ e.target.classList.add("is-valid");
144
+ } else {
145
+ e.target.classList.remove("is-valid");
146
+ e.target.classList.add("is-invalid");
147
+ }
148
+ }
125
149
  }, {
126
150
  key: "render",
127
151
  value: function render() {
152
+ var _this$props$element$c;
128
153
  if (this.state.dirty) {
129
154
  this.props.element.dirty = true;
130
155
  }
@@ -147,6 +172,8 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
147
172
  canHaveOptionCorrect = _this$props$element.canHaveOptionCorrect,
148
173
  canHaveOptionValue = _this$props$element.canHaveOptionValue;
149
174
  var canHaveImageSize = this.state.element.element === 'Image' || this.state.element.element === 'Camera';
175
+ var canHaveUploadLayout = this.state.element.element === 'Camera' || this.state.element.element === 'FileUpload';
176
+ var canHavePlaceholder = this.props.element.element === 'TextInput' || this.props.element.element === 'TextArea' || this.props.element.element === 'EmailInput' || this.props.element.element === 'NumberInput' || this.props.element.element === 'PhoneNumber';
150
177
  var this_files = this.props.files.length ? this.props.files : [];
151
178
  if (this_files.length < 1 || this_files.length > 0 && this_files[0].id !== '') {
152
179
  this_files.unshift({
@@ -164,12 +191,12 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
164
191
  return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
165
192
  className: "clearfix"
166
193
  }, /*#__PURE__*/_react["default"].createElement("h4", {
167
- className: "float-left"
194
+ className: "float-start"
168
195
  }, this.props.element.text), /*#__PURE__*/_react["default"].createElement("i", {
169
- className: "float-right fas fa-times dismiss-edit",
196
+ className: "float-end fas fa-times dismiss-edit",
170
197
  onClick: this.props.manualEditModeOff
171
198
  })), this.props.element.hasOwnProperty('content') && /*#__PURE__*/_react["default"].createElement("div", {
172
- className: "form-group"
199
+ className: "mb-3"
173
200
  }, /*#__PURE__*/_react["default"].createElement("label", {
174
201
  className: "control-label"
175
202
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
@@ -181,7 +208,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
181
208
  onEditorStateChange: this.onEditorStateChange.bind(this, 0, 'content'),
182
209
  stripPastedStyles: true
183
210
  })), this.props.element.hasOwnProperty('file_path') && /*#__PURE__*/_react["default"].createElement("div", {
184
- className: "form-group"
211
+ className: "mb-3"
185
212
  }, /*#__PURE__*/_react["default"].createElement("label", {
186
213
  className: "control-label",
187
214
  htmlFor: "fileSelect"
@@ -200,7 +227,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
200
227
  key: this_key
201
228
  }, file.file_name);
202
229
  }))), this.props.element.hasOwnProperty('href') && /*#__PURE__*/_react["default"].createElement("div", {
203
- className: "form-group"
230
+ className: "mb-3"
204
231
  }, /*#__PURE__*/_react["default"].createElement(_reactTextareaAutosize["default"], {
205
232
  type: "text",
206
233
  className: "form-control",
@@ -208,115 +235,164 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
208
235
  onBlur: this.updateElement.bind(this),
209
236
  onChange: this.editElementProp.bind(this, 'href', 'value')
210
237
  })), this.props.element.hasOwnProperty('label') && /*#__PURE__*/_react["default"].createElement("div", {
211
- className: "form-group"
212
- }, /*#__PURE__*/_react["default"].createElement("label", null, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
238
+ className: "mb-3"
239
+ }, /*#__PURE__*/_react["default"].createElement("div", {
240
+ className: "d-flex justify-content-between align-items-center"
241
+ }, /*#__PURE__*/_react["default"].createElement("label", {
242
+ className: "mb-0"
243
+ }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
213
244
  id: "display-label"
214
- })), /*#__PURE__*/_react["default"].createElement(_reactDraftWysiwyg.Editor, {
245
+ })), /*#__PURE__*/_react["default"].createElement("div", {
246
+ className: "form-check m-0"
247
+ }, /*#__PURE__*/_react["default"].createElement("input", {
248
+ id: "label-hidden",
249
+ className: "form-check-input",
250
+ type: "checkbox",
251
+ checked: this.props.element.labelHidden || false,
252
+ onChange: this.editElementProp.bind(this, 'labelHidden', 'checked')
253
+ }), /*#__PURE__*/_react["default"].createElement("label", {
254
+ className: "form-check-label",
255
+ htmlFor: "label-hidden"
256
+ }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
257
+ id: "label-hidden"
258
+ })))), /*#__PURE__*/_react["default"].createElement(_reactDraftWysiwyg.Editor, {
215
259
  toolbar: toolbar,
216
260
  defaultEditorState: editorState,
217
261
  onBlur: this.updateElement.bind(this),
218
262
  onEditorStateChange: this.onEditorStateChange.bind(this, 0, 'label'),
219
263
  stripPastedStyles: true
220
264
  }), /*#__PURE__*/_react["default"].createElement("br", null), /*#__PURE__*/_react["default"].createElement("div", {
221
- className: "custom-control custom-checkbox"
265
+ className: "form-check"
222
266
  }, /*#__PURE__*/_react["default"].createElement("input", {
223
267
  id: "is-required",
224
- className: "custom-control-input",
268
+ className: "form-check-input",
225
269
  type: "checkbox",
226
270
  checked: this_checked,
227
271
  value: true,
228
272
  onChange: this.editElementProp.bind(this, 'required', 'checked')
229
273
  }), /*#__PURE__*/_react["default"].createElement("label", {
230
- className: "custom-control-label",
274
+ className: "form-check-label",
231
275
  htmlFor: "is-required"
232
276
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
233
277
  id: "required"
234
- }))), this.props.element.hasOwnProperty('readOnly') && /*#__PURE__*/_react["default"].createElement("div", {
235
- className: "custom-control custom-checkbox"
278
+ }))), this_checked && this.state.element.element === 'Checkboxes' && /*#__PURE__*/_react["default"].createElement("div", {
279
+ className: "d-flex align-items-center gap-2"
280
+ }, /*#__PURE__*/_react["default"].createElement("label", {
281
+ className: "form-label mb-0",
282
+ htmlFor: "checkbox-required-checks"
283
+ }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
284
+ id: "minimum-number-of-selections"
285
+ }), ":"), /*#__PURE__*/_react["default"].createElement("input", {
286
+ id: "checkbox-required-checks",
287
+ type: "number",
288
+ min: "1",
289
+ className: "form-control d-inline-block",
290
+ style: {
291
+ width: '8ch'
292
+ },
293
+ value: (_this$props$element$c = this.props.element.checkbox_required_checks) !== null && _this$props$element$c !== void 0 ? _this$props$element$c : '1',
294
+ onBlur: this.updateElement.bind(this),
295
+ onChange: this.editElementProp.bind(this, 'checkbox_required_checks', 'value')
296
+ })), this.props.element.hasOwnProperty('readOnly') && /*#__PURE__*/_react["default"].createElement("div", {
297
+ className: "form-check"
236
298
  }, /*#__PURE__*/_react["default"].createElement("input", {
237
299
  id: "is-read-only",
238
- className: "custom-control-input",
300
+ className: "form-check-input",
239
301
  type: "checkbox",
240
302
  checked: this_read_only,
241
303
  value: true,
242
304
  onChange: this.editElementProp.bind(this, 'readOnly', 'checked')
243
305
  }), /*#__PURE__*/_react["default"].createElement("label", {
244
- className: "custom-control-label",
306
+ className: "form-check-label",
245
307
  htmlFor: "is-read-only"
246
308
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
247
309
  id: "read-only"
248
310
  }))), this.props.element.hasOwnProperty('defaultToday') && /*#__PURE__*/_react["default"].createElement("div", {
249
- className: "custom-control custom-checkbox"
311
+ className: "form-check"
250
312
  }, /*#__PURE__*/_react["default"].createElement("input", {
251
313
  id: "is-default-to-today",
252
- className: "custom-control-input",
314
+ className: "form-check-input",
253
315
  type: "checkbox",
254
316
  checked: this_default_today,
255
317
  value: true,
256
318
  onChange: this.editElementProp.bind(this, 'defaultToday', 'checked')
257
319
  }), /*#__PURE__*/_react["default"].createElement("label", {
258
- className: "custom-control-label",
320
+ className: "form-check-label",
259
321
  htmlFor: "is-default-to-today"
260
322
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
261
323
  id: "default-to-today"
262
324
  }), "?")), this.props.element.hasOwnProperty('showTimeSelect') && /*#__PURE__*/_react["default"].createElement("div", {
263
- className: "custom-control custom-checkbox"
325
+ className: "form-check"
264
326
  }, /*#__PURE__*/_react["default"].createElement("input", {
265
327
  id: "show-time-select",
266
- className: "custom-control-input",
328
+ className: "form-check-input",
267
329
  type: "checkbox",
268
330
  checked: this_show_time_select,
269
331
  value: true,
270
332
  onChange: this.editElementProp.bind(this, 'showTimeSelect', 'checked')
271
333
  }), /*#__PURE__*/_react["default"].createElement("label", {
272
- className: "custom-control-label",
334
+ className: "form-check-label",
273
335
  htmlFor: "show-time-select"
274
336
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
275
337
  id: "show-time-select"
276
338
  }), "?")), this_show_time_select && this.props.element.hasOwnProperty('showTimeSelectOnly') && /*#__PURE__*/_react["default"].createElement("div", {
277
- className: "custom-control custom-checkbox"
339
+ className: "form-check"
278
340
  }, /*#__PURE__*/_react["default"].createElement("input", {
279
341
  id: "show-time-select-only",
280
- className: "custom-control-input",
342
+ className: "form-check-input",
281
343
  type: "checkbox",
282
344
  checked: this_show_time_select_only,
283
345
  value: true,
284
346
  onChange: this.editElementProp.bind(this, 'showTimeSelectOnly', 'checked')
285
347
  }), /*#__PURE__*/_react["default"].createElement("label", {
286
- className: "custom-control-label",
348
+ className: "form-check-label",
287
349
  htmlFor: "show-time-select-only"
288
350
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
289
351
  id: "show-time-select-only"
290
352
  }), "?")), this.props.element.hasOwnProperty('showTimeInput') && /*#__PURE__*/_react["default"].createElement("div", {
291
- className: "custom-control custom-checkbox"
353
+ className: "form-check"
292
354
  }, /*#__PURE__*/_react["default"].createElement("input", {
293
355
  id: "show-time-input",
294
- className: "custom-control-input",
356
+ className: "form-check-input",
295
357
  type: "checkbox",
296
358
  checked: this_show_time_input,
297
359
  value: true,
298
360
  onChange: this.editElementProp.bind(this, 'showTimeInput', 'checked')
299
361
  }), /*#__PURE__*/_react["default"].createElement("label", {
300
- className: "custom-control-label",
362
+ className: "form-check-label",
301
363
  htmlFor: "show-time-input"
302
364
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
303
365
  id: "show-time-input"
304
366
  }), "?")), (this.state.element.element === 'RadioButtons' || this.state.element.element === 'Checkboxes') && canHaveDisplayHorizontal && /*#__PURE__*/_react["default"].createElement("div", {
305
- className: "custom-control custom-checkbox"
367
+ className: "form-check"
306
368
  }, /*#__PURE__*/_react["default"].createElement("input", {
307
369
  id: "display-horizontal",
308
- className: "custom-control-input",
370
+ className: "form-check-input",
309
371
  type: "checkbox",
310
372
  checked: this_checked_inline,
311
373
  value: true,
312
374
  onChange: this.editElementProp.bind(this, 'inline', 'checked')
313
375
  }), /*#__PURE__*/_react["default"].createElement("label", {
314
- className: "custom-control-label",
376
+ className: "form-check-label",
315
377
  htmlFor: "display-horizontal"
316
378
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
317
379
  id: "display-horizontal"
318
- })))), this.props.element.hasOwnProperty('src') && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
319
- className: "form-group"
380
+ })))), canHavePlaceholder && /*#__PURE__*/_react["default"].createElement("div", {
381
+ className: "mb-3"
382
+ }, /*#__PURE__*/_react["default"].createElement("label", {
383
+ className: "control-label",
384
+ htmlFor: "placeholderInput"
385
+ }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
386
+ id: "placeholder"
387
+ })), /*#__PURE__*/_react["default"].createElement("input", {
388
+ id: "placeholderInput",
389
+ type: "text",
390
+ className: "form-control",
391
+ defaultValue: this.props.element.placeholder,
392
+ onBlur: this.updateElement.bind(this),
393
+ onChange: this.editElementProp.bind(this, 'placeholder', 'value')
394
+ })), this.props.element.hasOwnProperty('src') && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
395
+ className: "mb-3"
320
396
  }, /*#__PURE__*/_react["default"].createElement("label", {
321
397
  className: "control-label",
322
398
  htmlFor: "srcInput"
@@ -329,54 +405,46 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
329
405
  defaultValue: this.props.element.src,
330
406
  onBlur: this.updateElement.bind(this),
331
407
  onChange: this.editElementProp.bind(this, 'src', 'value')
332
- }))), canHaveImageSize && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
333
- className: "form-group"
408
+ }))), canHaveUploadLayout && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
409
+ className: "mb-3"
410
+ }, /*#__PURE__*/_react["default"].createElement("label", {
411
+ className: "control-label bold"
412
+ }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
413
+ id: "upload-layout"
414
+ }), ":"), /*#__PURE__*/_react["default"].createElement("div", {
415
+ className: "d-flex align-items-center gap-3"
334
416
  }, /*#__PURE__*/_react["default"].createElement("div", {
335
- className: "custom-control custom-checkbox"
417
+ className: "form-check d-flex align-items-center"
336
418
  }, /*#__PURE__*/_react["default"].createElement("input", {
337
- id: "do-center",
338
- className: "custom-control-input",
339
- type: "checkbox",
340
- checked: this_checked_center,
341
- value: true,
342
- onChange: this.editElementProp.bind(this, 'center', 'checked')
419
+ className: "form-check-input",
420
+ type: "radio",
421
+ name: "uploadLayout",
422
+ id: "uploadLayoutStandard",
423
+ value: "standard",
424
+ checked: this.props.element.upload_layout === "standard",
425
+ onChange: this.handleUploadLayoutChange
343
426
  }), /*#__PURE__*/_react["default"].createElement("label", {
344
- className: "custom-control-label",
345
- htmlFor: "do-center"
346
- }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
347
- id: "center"
348
- }), "?"))), /*#__PURE__*/_react["default"].createElement("div", {
349
- className: "row"
350
- }, /*#__PURE__*/_react["default"].createElement("div", {
351
- className: "col-sm-3"
352
- }, /*#__PURE__*/_react["default"].createElement("label", {
353
- className: "control-label",
354
- htmlFor: "elementWidth"
427
+ className: "form-check-label ms-2",
428
+ htmlFor: "uploadLayoutStandard"
355
429
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
356
- id: "width"
357
- }), ":"), /*#__PURE__*/_react["default"].createElement("input", {
358
- id: "elementWidth",
359
- type: "text",
360
- className: "form-control",
361
- defaultValue: this.props.element.width,
362
- onBlur: this.updateElement.bind(this),
363
- onChange: this.editElementProp.bind(this, 'width', 'value')
364
- })), /*#__PURE__*/_react["default"].createElement("div", {
365
- className: "col-sm-3"
366
- }, /*#__PURE__*/_react["default"].createElement("label", {
367
- className: "control-label",
368
- htmlFor: "elementHeight"
430
+ id: "upload-layout-standard"
431
+ }))), /*#__PURE__*/_react["default"].createElement("div", {
432
+ className: "form-check d-flex align-items-center"
433
+ }, /*#__PURE__*/_react["default"].createElement("input", {
434
+ className: "form-check-input",
435
+ type: "radio",
436
+ name: "uploadLayout",
437
+ id: "uploadLayoutDropZone",
438
+ value: "dropzone",
439
+ checked: this.props.element.upload_layout === "dropzone",
440
+ onChange: this.handleUploadLayoutChange
441
+ }), /*#__PURE__*/_react["default"].createElement("label", {
442
+ className: "form-check-label ms-2",
443
+ htmlFor: "uploadLayoutDropZone"
369
444
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
370
- id: "height"
371
- }), ":"), /*#__PURE__*/_react["default"].createElement("input", {
372
- id: "elementHeight",
373
- type: "text",
374
- className: "form-control",
375
- defaultValue: this.props.element.height,
376
- onBlur: this.updateElement.bind(this),
377
- onChange: this.editElementProp.bind(this, 'height', 'value')
378
- })))), this.state.element.element === 'Camera' && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
379
- className: "form-group"
445
+ id: "upload-layout-dropzone"
446
+ })))))), this.state.element.element === 'Camera' && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
447
+ className: "mb-3"
380
448
  }, /*#__PURE__*/_react["default"].createElement("label", {
381
449
  className: "control-label",
382
450
  htmlFor: "LabelAfterCameraIcon"
@@ -390,7 +458,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
390
458
  onBlur: this.updateElement.bind(this),
391
459
  onChange: this.editElementProp.bind(this, 'label_after_camera_icon', 'value')
392
460
  })), /*#__PURE__*/_react["default"].createElement("div", {
393
- className: "form-group"
461
+ className: "mb-3"
394
462
  }, /*#__PURE__*/_react["default"].createElement("label", {
395
463
  className: "control-label",
396
464
  htmlFor: "MessageUnderCameraIcon"
@@ -404,7 +472,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
404
472
  onBlur: this.updateElement.bind(this),
405
473
  onChange: this.editElementProp.bind(this, 'message_under_camera_icon', 'value')
406
474
  })), /*#__PURE__*/_react["default"].createElement("div", {
407
- className: "form-group"
475
+ className: "mb-3"
408
476
  }, /*#__PURE__*/_react["default"].createElement("label", {
409
477
  className: "control-label",
410
478
  htmlFor: "LabelAfterPhotoClearIcon"
@@ -417,8 +485,64 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
417
485
  defaultValue: this.props.element.label_after_photo_clear_icon,
418
486
  onBlur: this.updateElement.bind(this),
419
487
  onChange: this.editElementProp.bind(this, 'label_after_photo_clear_icon', 'value')
420
- }))), this.state.element.element === 'FileUpload' && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
421
- className: "form-group"
488
+ }))), canHaveImageSize && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
489
+ className: "mb-3"
490
+ }, /*#__PURE__*/_react["default"].createElement("label", {
491
+ className: "control-label bold"
492
+ }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
493
+ id: "image-layout"
494
+ }), ":"), /*#__PURE__*/_react["default"].createElement("div", {
495
+ className: "form-check"
496
+ }, /*#__PURE__*/_react["default"].createElement("input", {
497
+ id: "do-center",
498
+ className: "form-check-input",
499
+ type: "checkbox",
500
+ checked: this_checked_center,
501
+ value: true,
502
+ onChange: this.editElementProp.bind(this, 'center', 'checked')
503
+ }), /*#__PURE__*/_react["default"].createElement("label", {
504
+ className: "form-check-label",
505
+ htmlFor: "do-center"
506
+ }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
507
+ id: "center"
508
+ }), "?"))), /*#__PURE__*/_react["default"].createElement("div", {
509
+ className: "row mb-3"
510
+ }, /*#__PURE__*/_react["default"].createElement("div", {
511
+ className: "col-sm-3"
512
+ }, /*#__PURE__*/_react["default"].createElement("label", {
513
+ className: "control-label",
514
+ htmlFor: "elementWidth"
515
+ }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
516
+ id: "width"
517
+ }), ":"), /*#__PURE__*/_react["default"].createElement("input", {
518
+ id: "elementWidth",
519
+ type: "text",
520
+ className: "form-control",
521
+ pattern: "^$|^\\d+(px|%)$",
522
+ onInput: this.validateImageSize,
523
+ defaultValue: this.props.element.width,
524
+ onBlur: this.updateElement.bind(this),
525
+ onChange: this.editElementProp.bind(this, 'width', 'value')
526
+ })), /*#__PURE__*/_react["default"].createElement("div", {
527
+ className: "col-sm-3"
528
+ }, /*#__PURE__*/_react["default"].createElement("label", {
529
+ className: "control-label",
530
+ htmlFor: "elementHeight"
531
+ }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
532
+ id: "height"
533
+ }), ":"), /*#__PURE__*/_react["default"].createElement("input", {
534
+ id: "elementHeight",
535
+ type: "text",
536
+ className: "form-control",
537
+ pattern: "^$|^\\d+(px|%)$",
538
+ onInput: this.validateImageSize,
539
+ defaultValue: this.props.element.height,
540
+ onBlur: this.updateElement.bind(this),
541
+ onChange: this.editElementProp.bind(this, 'height', 'value')
542
+ })), /*#__PURE__*/_react["default"].createElement("small", {
543
+ className: "form-text text-muted"
544
+ }, "Use ", /*#__PURE__*/_react["default"].createElement("code", null, "px"), " or ", /*#__PURE__*/_react["default"].createElement("code", null, "%"), " (e.g. 200px, 100%)."))), this.state.element.element === 'FileUpload' && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
545
+ className: "mb-3"
422
546
  }, /*#__PURE__*/_react["default"].createElement("label", {
423
547
  className: "control-label",
424
548
  htmlFor: "LabelAfterFileIcon"
@@ -432,7 +556,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
432
556
  onBlur: this.updateElement.bind(this),
433
557
  onChange: this.editElementProp.bind(this, 'label_after_file_icon', 'value')
434
558
  })), /*#__PURE__*/_react["default"].createElement("div", {
435
- className: "form-group"
559
+ className: "mb-3"
436
560
  }, /*#__PURE__*/_react["default"].createElement("label", {
437
561
  className: "control-label",
438
562
  htmlFor: "MessageUnderFileIcon"
@@ -446,7 +570,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
446
570
  onBlur: this.updateElement.bind(this),
447
571
  onChange: this.editElementProp.bind(this, 'message_under_file_icon', 'value')
448
572
  })), /*#__PURE__*/_react["default"].createElement("div", {
449
- className: "form-group"
573
+ className: "mb-3"
450
574
  }, /*#__PURE__*/_react["default"].createElement("label", {
451
575
  className: "control-label",
452
576
  htmlFor: "LabelAfterFileClearIcon"
@@ -460,7 +584,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
460
584
  onBlur: this.updateElement.bind(this),
461
585
  onChange: this.editElementProp.bind(this, 'label_after_file_clear_icon', 'value')
462
586
  })), /*#__PURE__*/_react["default"].createElement("div", {
463
- className: "form-group"
587
+ className: "mb-3"
464
588
  }, /*#__PURE__*/_react["default"].createElement("label", {
465
589
  className: "control-label",
466
590
  htmlFor: "fileType"
@@ -498,7 +622,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
498
622
  key: index
499
623
  }, file.typeName);
500
624
  })))), this.state.element.element === 'Signature' && this.props.element.readOnly ? /*#__PURE__*/_react["default"].createElement("div", {
501
- className: "form-group"
625
+ className: "mb-3"
502
626
  }, /*#__PURE__*/_react["default"].createElement("label", {
503
627
  className: "control-label",
504
628
  htmlFor: "variableKey"
@@ -516,47 +640,47 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
516
640
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
517
641
  id: "variable-key-desc"
518
642
  }), ".")) : /*#__PURE__*/_react["default"].createElement("div", null), canHavePageBreakBefore && /*#__PURE__*/_react["default"].createElement("div", {
519
- className: "form-group"
643
+ className: "mb-3"
520
644
  }, /*#__PURE__*/_react["default"].createElement("label", {
521
645
  className: "control-label"
522
646
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
523
647
  id: "print-options"
524
648
  })), /*#__PURE__*/_react["default"].createElement("div", {
525
- className: "custom-control custom-checkbox"
649
+ className: "form-check"
526
650
  }, /*#__PURE__*/_react["default"].createElement("input", {
527
651
  id: "page-break-before-element",
528
- className: "custom-control-input",
652
+ className: "form-check-input",
529
653
  type: "checkbox",
530
654
  checked: this_checked_page_break,
531
655
  value: true,
532
656
  onChange: this.editElementProp.bind(this, 'pageBreakBefore', 'checked')
533
657
  }), /*#__PURE__*/_react["default"].createElement("label", {
534
- className: "custom-control-label",
658
+ className: "form-check-label",
535
659
  htmlFor: "page-break-before-element"
536
660
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
537
661
  id: "page-break-before-elements"
538
662
  }), "?"))), canHaveAlternateForm && /*#__PURE__*/_react["default"].createElement("div", {
539
- className: "form-group"
663
+ className: "mb-3"
540
664
  }, /*#__PURE__*/_react["default"].createElement("label", {
541
665
  className: "control-label"
542
666
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
543
667
  id: "alternate-signature-page"
544
668
  })), /*#__PURE__*/_react["default"].createElement("div", {
545
- className: "custom-control custom-checkbox"
669
+ className: "form-check"
546
670
  }, /*#__PURE__*/_react["default"].createElement("input", {
547
671
  id: "display-on-alternate",
548
- className: "custom-control-input",
672
+ className: "form-check-input",
549
673
  type: "checkbox",
550
674
  checked: this_checked_alternate_form,
551
675
  value: true,
552
676
  onChange: this.editElementProp.bind(this, 'alternateForm', 'checked')
553
677
  }), /*#__PURE__*/_react["default"].createElement("label", {
554
- className: "custom-control-label",
678
+ className: "form-check-label",
555
679
  htmlFor: "display-on-alternate"
556
680
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
557
681
  id: "display-on-alternate-signature-page"
558
682
  }), "?"))), this.props.element.hasOwnProperty('step') && /*#__PURE__*/_react["default"].createElement("div", {
559
- className: "form-group"
683
+ className: "mb-3"
560
684
  }, /*#__PURE__*/_react["default"].createElement("div", {
561
685
  className: "form-group-range"
562
686
  }, /*#__PURE__*/_react["default"].createElement("label", {
@@ -572,7 +696,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
572
696
  onBlur: this.updateElement.bind(this),
573
697
  onChange: this.editElementProp.bind(this, 'step', 'value')
574
698
  }))), this.props.element.hasOwnProperty('min_value') && /*#__PURE__*/_react["default"].createElement("div", {
575
- className: "form-group"
699
+ className: "mb-3"
576
700
  }, /*#__PURE__*/_react["default"].createElement("div", {
577
701
  className: "form-group-range"
578
702
  }, /*#__PURE__*/_react["default"].createElement("label", {
@@ -594,7 +718,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
594
718
  onBlur: this.updateElement.bind(this),
595
719
  onChange: this.editElementProp.bind(this, 'min_label', 'value')
596
720
  }))), this.props.element.hasOwnProperty('max_value') && /*#__PURE__*/_react["default"].createElement("div", {
597
- className: "form-group"
721
+ className: "mb-3"
598
722
  }, /*#__PURE__*/_react["default"].createElement("div", {
599
723
  className: "form-group-range"
600
724
  }, /*#__PURE__*/_react["default"].createElement("label", {
@@ -616,7 +740,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
616
740
  onBlur: this.updateElement.bind(this),
617
741
  onChange: this.editElementProp.bind(this, 'max_label', 'value')
618
742
  }))), this.props.element.hasOwnProperty('default_value') && /*#__PURE__*/_react["default"].createElement("div", {
619
- className: "form-group"
743
+ className: "mb-3"
620
744
  }, /*#__PURE__*/_react["default"].createElement("div", {
621
745
  className: "form-group-range"
622
746
  }, /*#__PURE__*/_react["default"].createElement("label", {
@@ -632,41 +756,41 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
632
756
  onBlur: this.updateElement.bind(this),
633
757
  onChange: this.editElementProp.bind(this, 'default_value', 'value')
634
758
  }))), this.props.element.hasOwnProperty('static') && this.props.element["static"] && /*#__PURE__*/_react["default"].createElement("div", {
635
- className: "form-group"
759
+ className: "mb-3"
636
760
  }, /*#__PURE__*/_react["default"].createElement("label", {
637
761
  className: "control-label"
638
762
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
639
763
  id: "text-style"
640
764
  })), /*#__PURE__*/_react["default"].createElement("div", {
641
- className: "custom-control custom-checkbox"
765
+ className: "form-check"
642
766
  }, /*#__PURE__*/_react["default"].createElement("input", {
643
767
  id: "do-bold",
644
- className: "custom-control-input",
768
+ className: "form-check-input",
645
769
  type: "checkbox",
646
770
  checked: this_checked_bold,
647
771
  value: true,
648
772
  onChange: this.editElementProp.bind(this, 'bold', 'checked')
649
773
  }), /*#__PURE__*/_react["default"].createElement("label", {
650
- className: "custom-control-label",
774
+ className: "form-check-label",
651
775
  htmlFor: "do-bold"
652
776
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
653
777
  id: "bold"
654
778
  }))), /*#__PURE__*/_react["default"].createElement("div", {
655
- className: "custom-control custom-checkbox"
779
+ className: "form-check"
656
780
  }, /*#__PURE__*/_react["default"].createElement("input", {
657
781
  id: "do-italic",
658
- className: "custom-control-input",
782
+ className: "form-check-input",
659
783
  type: "checkbox",
660
784
  checked: this_checked_italic,
661
785
  value: true,
662
786
  onChange: this.editElementProp.bind(this, 'italic', 'checked')
663
787
  }), /*#__PURE__*/_react["default"].createElement("label", {
664
- className: "custom-control-label",
788
+ className: "form-check-label",
665
789
  htmlFor: "do-italic"
666
790
  }, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
667
791
  id: "italic"
668
792
  })))), this.props.element.showDescription && /*#__PURE__*/_react["default"].createElement("div", {
669
- className: "form-group"
793
+ className: "mb-3"
670
794
  }, /*#__PURE__*/_react["default"].createElement("label", {
671
795
  className: "control-label",
672
796
  htmlFor: "questionDescription"
@@ -680,7 +804,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
680
804
  onBlur: this.updateElement.bind(this),
681
805
  onChange: this.editElementProp.bind(this, 'description', 'value')
682
806
  })), this.props.showCorrectColumn && this.props.element.canHaveAnswer && !this.props.element.hasOwnProperty('options') && /*#__PURE__*/_react["default"].createElement("div", {
683
- className: "form-group"
807
+ className: "mb-3"
684
808
  }, /*#__PURE__*/_react["default"].createElement("label", {
685
809
  className: "control-label",
686
810
  htmlFor: "correctAnswer"
@@ -694,7 +818,7 @@ var FormElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Compon
694
818
  onBlur: this.updateElement.bind(this),
695
819
  onChange: this.editElementProp.bind(this, 'correct', 'value')
696
820
  })), this.props.element.canPopulateFromApi && this.props.element.hasOwnProperty('options') && /*#__PURE__*/_react["default"].createElement("div", {
697
- className: "form-group"
821
+ className: "mb-3"
698
822
  }, /*#__PURE__*/_react["default"].createElement("label", {
699
823
  className: "control-label",
700
824
  htmlFor: "optionsApiUrl"