@goldenpine/react-form-builder2 0.20.3-build.2 → 0.20.3-build.21

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.
@@ -13,17 +13,30 @@ var ComponentLabel = function ComponentLabel(props) {
13
13
  if (!labelText) {
14
14
  return null;
15
15
  }
16
+
17
+ // Since we use <div> to replace <span> in the label in form-elements-edit.jsx to support multiple-line labels,
18
+ // we need to ensure that the required label, *, is inserted correctly.
19
+ // If it's simply appended the label string, it will show on a new line.
20
+ // The workaround is to insert it before the first closing </div> or </li> tag if it exists,
21
+ // so it appears at the end of the first line of the label.
22
+ var updatedLabel = labelText;
23
+ if (hasRequiredLabel) {
24
+ var insertSpan = '<span class="label-required" style="color:red;">*</span>';
25
+ var closingTagRegex = /<\/(div|li)>/i; // case-insensitive match for </div> or </li>
26
+
27
+ if (closingTagRegex.test(labelText)) {
28
+ updatedLabel = labelText.replace(closingTagRegex, "".concat(insertSpan, "</$1>"));
29
+ } else {
30
+ // Neither </div> nor </li> found — append at the end
31
+ updatedLabel = labelText + insertSpan;
32
+ }
33
+ }
16
34
  return /*#__PURE__*/_react["default"].createElement("label", {
17
35
  className: props.className || 'form-label'
18
36
  }, /*#__PURE__*/_react["default"].createElement("span", {
19
37
  dangerouslySetInnerHTML: {
20
- __html: labelText
21
- }
22
- }), hasRequiredLabel && /*#__PURE__*/_react["default"].createElement("span", {
23
- className: "label-required",
24
- style: {
25
- color: "red"
38
+ __html: updatedLabel
26
39
  }
27
- }, "*"));
40
+ }));
28
41
  };
29
42
  var _default = exports["default"] = ComponentLabel;
@@ -57,7 +57,7 @@ var CustomElement = /*#__PURE__*/function (_Component) {
57
57
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), bare ? /*#__PURE__*/_react["default"].createElement(Element, (0, _extends2["default"])({
58
58
  data: this.props.data
59
59
  }, this.props.data.props, props)) : /*#__PURE__*/_react["default"].createElement("div", {
60
- className: "form-group"
60
+ className: "mb-3"
61
61
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], (0, _extends2["default"])({
62
62
  className: "form-label"
63
63
  }, this.props)), /*#__PURE__*/_react["default"].createElement(Element, (0, _extends2["default"])({
@@ -80,7 +80,7 @@ var DatePicker = /*#__PURE__*/function (_React$Component) {
80
80
  className: baseClasses,
81
81
  style: _objectSpread({}, this.props.style)
82
82
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
83
- className: "form-group"
83
+ className: "mb-3"
84
84
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", null, readOnly && /*#__PURE__*/_react["default"].createElement("input", {
85
85
  type: "text",
86
86
  name: props.name,
@@ -19,7 +19,7 @@ var _fileSaver = require("file-saver");
19
19
  var _react = _interopRequireDefault(require("react"));
20
20
  var _reactSelect = _interopRequireDefault(require("react-select"));
21
21
  var _reactSignatureCanvas = _interopRequireDefault(require("react-signature-canvas"));
22
- var _reactBootstrapSlider = _interopRequireDefault(require("react-bootstrap-slider"));
22
+ var _reactBootstrapSlider = _interopRequireDefault(require("@goldenpine/react-bootstrap-slider"));
23
23
  var _starRating = _interopRequireDefault(require("./star-rating"));
24
24
  var _datePicker = _interopRequireDefault(require("./date-picker"));
25
25
  var _componentHeader = _interopRequireDefault(require("./component-header"));
@@ -86,7 +86,7 @@ var Paragraph = /*#__PURE__*/function (_React$Component2) {
86
86
  return /*#__PURE__*/_react["default"].createElement("div", {
87
87
  style: _objectSpread({}, this.props.style),
88
88
  className: baseClasses
89
- }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("p", {
89
+ }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
90
90
  className: classNames,
91
91
  dangerouslySetInnerHTML: {
92
92
  __html: _myxss["default"].process(this.props.data.content)
@@ -178,7 +178,7 @@ var TextInput = /*#__PURE__*/function (_React$Component5) {
178
178
  style: _objectSpread({}, this.props.style),
179
179
  className: baseClasses
180
180
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
181
- className: "form-group"
181
+ className: "mb-3"
182
182
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("input", props)));
183
183
  }
184
184
  }]);
@@ -214,7 +214,7 @@ var EmailInput = /*#__PURE__*/function (_React$Component6) {
214
214
  style: _objectSpread({}, this.props.style),
215
215
  className: baseClasses
216
216
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
217
- className: "form-group"
217
+ className: "mb-3"
218
218
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("input", props)));
219
219
  }
220
220
  }]);
@@ -250,7 +250,7 @@ var PhoneNumber = /*#__PURE__*/function (_React$Component7) {
250
250
  style: _objectSpread({}, this.props.style),
251
251
  className: baseClasses
252
252
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
253
- className: "form-group"
253
+ className: "mb-3"
254
254
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("input", props)));
255
255
  }
256
256
  }]);
@@ -286,7 +286,7 @@ var NumberInput = /*#__PURE__*/function (_React$Component8) {
286
286
  style: _objectSpread({}, this.props.style),
287
287
  className: baseClasses
288
288
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
289
- className: "form-group"
289
+ className: "mb-3"
290
290
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("input", props)));
291
291
  }
292
292
  }]);
@@ -321,7 +321,7 @@ var TextArea = /*#__PURE__*/function (_React$Component9) {
321
321
  style: _objectSpread({}, this.props.style),
322
322
  className: baseClasses
323
323
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
324
- className: "form-group"
324
+ className: "mb-3"
325
325
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("textarea", props)));
326
326
  }
327
327
  }]);
@@ -356,7 +356,7 @@ var Dropdown = /*#__PURE__*/function (_React$Component0) {
356
356
  style: _objectSpread({}, this.props.style),
357
357
  className: baseClasses
358
358
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
359
- className: "form-group"
359
+ className: "mb-3"
360
360
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("select", props, this.props.data.options.map(function (option) {
361
361
  var this_key = "preview_".concat(option.key);
362
362
  return /*#__PURE__*/_react["default"].createElement("option", {
@@ -421,7 +421,7 @@ var Signature = /*#__PURE__*/function (_React$Component1) {
421
421
  style: _objectSpread({}, this.props.style),
422
422
  className: baseClasses
423
423
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
424
- className: "form-group"
424
+ className: "mb-3"
425
425
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), this.props.read_only === true || !!sourceDataURL ? /*#__PURE__*/_react["default"].createElement("img", {
426
426
  src: sourceDataURL
427
427
  }) : /*#__PURE__*/_react["default"].createElement(_reactSignatureCanvas["default"], pad_props), canClear && /*#__PURE__*/_react["default"].createElement("i", {
@@ -498,7 +498,7 @@ var Tags = /*#__PURE__*/function (_React$Component10) {
498
498
  style: _objectSpread({}, this.props.style),
499
499
  className: baseClasses
500
500
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
501
- className: "form-group"
501
+ className: "mb-3"
502
502
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement(_reactSelect["default"], props)));
503
503
  }
504
504
  }]);
@@ -517,9 +517,9 @@ var Checkboxes = /*#__PURE__*/function (_React$Component11) {
517
517
  value: function render() {
518
518
  var _this0 = this;
519
519
  var self = this;
520
- var classNames = 'custom-control custom-checkbox';
520
+ var classNames = 'form-check';
521
521
  if (this.props.data.inline) {
522
- classNames += ' option-inline';
522
+ classNames += ' form-check-inline';
523
523
  }
524
524
  var baseClasses = 'SortableItem rfb-item';
525
525
  if (this.props.data.pageBreakBefore) {
@@ -529,7 +529,7 @@ var Checkboxes = /*#__PURE__*/function (_React$Component11) {
529
529
  style: _objectSpread({}, this.props.style),
530
530
  className: baseClasses
531
531
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
532
- className: "form-group"
532
+ className: "mb-3"
533
533
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), this.props.data.options.map(function (option) {
534
534
  var this_key = "preview_".concat(option.key);
535
535
  var props = {};
@@ -547,14 +547,15 @@ var Checkboxes = /*#__PURE__*/function (_React$Component11) {
547
547
  key: this_key
548
548
  }, /*#__PURE__*/_react["default"].createElement("input", (0, _extends2["default"])({
549
549
  id: "fid_".concat(this_key),
550
- className: "custom-control-input",
550
+ className: "form-check-input",
551
551
  ref: function ref(c) {
552
552
  if (c && self.props.mutable) {
553
553
  self.options["child_ref_".concat(option.key)] = c;
554
554
  }
555
- }
555
+ },
556
+ "data-required-checks": _this0.props.data.checkbox_required_checks ? _this0.props.data.checkbox_required_checks : '1'
556
557
  }, props)), /*#__PURE__*/_react["default"].createElement("label", {
557
- className: "custom-control-label",
558
+ className: "form-check-label",
558
559
  htmlFor: "fid_".concat(this_key)
559
560
  }, option.text));
560
561
  })));
@@ -575,9 +576,9 @@ var RadioButtons = /*#__PURE__*/function (_React$Component12) {
575
576
  value: function render() {
576
577
  var _this10 = this;
577
578
  var self = this;
578
- var classNames = 'custom-control custom-radio';
579
+ var classNames = 'form-check';
579
580
  if (this.props.data.inline) {
580
- classNames += ' option-inline';
581
+ classNames += ' form-check-inline';
581
582
  }
582
583
  var baseClasses = 'SortableItem rfb-item';
583
584
  if (this.props.data.pageBreakBefore) {
@@ -587,7 +588,7 @@ var RadioButtons = /*#__PURE__*/function (_React$Component12) {
587
588
  style: _objectSpread({}, this.props.style),
588
589
  className: baseClasses
589
590
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
590
- className: "form-group"
591
+ className: "mb-3"
591
592
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), this.props.data.options.map(function (option) {
592
593
  var this_key = "preview_".concat(option.key);
593
594
  var props = {};
@@ -605,14 +606,14 @@ var RadioButtons = /*#__PURE__*/function (_React$Component12) {
605
606
  key: this_key
606
607
  }, /*#__PURE__*/_react["default"].createElement("input", (0, _extends2["default"])({
607
608
  id: "fid_".concat(this_key),
608
- className: "custom-control-input",
609
+ className: "form-check-input",
609
610
  ref: function ref(c) {
610
611
  if (c && self.props.mutable) {
611
612
  self.options["child_ref_".concat(option.key)] = c;
612
613
  }
613
614
  }
614
615
  }, props)), /*#__PURE__*/_react["default"].createElement("label", {
615
- className: "custom-control-label",
616
+ className: "form-check-label",
616
617
  htmlFor: "fid_".concat(this_key)
617
618
  }, option.text));
618
619
  })));
@@ -640,8 +641,11 @@ var Image = /*#__PURE__*/function (_React$Component13) {
640
641
  className: baseClasses
641
642
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), this.props.data.src && /*#__PURE__*/_react["default"].createElement("img", {
642
643
  src: this.props.data.src,
643
- width: this.props.data.width,
644
- height: this.props.data.height
644
+ style: {
645
+ height: this.props.data.height,
646
+ width: this.props.data.width,
647
+ display: 'inline'
648
+ }
645
649
  }), !this.props.data.src && /*#__PURE__*/_react["default"].createElement("div", {
646
650
  className: "no-image"
647
651
  }, "No Image"));
@@ -677,7 +681,7 @@ var Rating = /*#__PURE__*/function (_React$Component14) {
677
681
  style: _objectSpread({}, this.props.style),
678
682
  className: baseClasses
679
683
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
680
- className: "form-group"
684
+ className: "mb-3"
681
685
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement(_starRating["default"], props)));
682
686
  }
683
687
  }]);
@@ -699,7 +703,7 @@ var HyperLink = /*#__PURE__*/function (_React$Component15) {
699
703
  style: _objectSpread({}, this.props.style),
700
704
  className: baseClasses
701
705
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
702
- className: "form-group"
706
+ className: "mb-3"
703
707
  }, /*#__PURE__*/_react["default"].createElement("label", {
704
708
  className: 'form-label'
705
709
  }, /*#__PURE__*/_react["default"].createElement("a", {
@@ -729,7 +733,7 @@ var Download = /*#__PURE__*/function (_React$Component16) {
729
733
  style: _objectSpread({}, this.props.style),
730
734
  className: baseClasses
731
735
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
732
- className: "form-group"
736
+ className: "mb-3"
733
737
  }, /*#__PURE__*/_react["default"].createElement("a", {
734
738
  href: "".concat(this.props.download_path, "?id=").concat(this.props.data.file_path)
735
739
  }, this.props.data.content)));
@@ -780,13 +784,29 @@ var Camera = /*#__PURE__*/function (_React$Component17) {
780
784
  }
781
785
  return imgProps;
782
786
  }
787
+
788
+ /*
789
+ Originally Image/File upload elments don't count the heights of all visible controls which is layered on top of <input>,
790
+ which makes the element possibly overlaps on the next element on a narrow screen.
791
+ It's caused by "position: absolue" of .image-upload-control.
792
+ The fix is to add inline style "position: relative" to the container div of .image-upload-control, and use <label> tag
793
+ and "for"/"id" to trigger to the file input dialog.
794
+ */
783
795
  }, {
784
796
  key: "render",
785
797
  value: function render() {
786
798
  var _this13 = this;
787
799
  var imageStyle = {
788
- objectFit: 'scale-down',
789
- objectPosition: this.props.data.center ? 'center' : 'left'
800
+ // 2025/11/11
801
+ // 'scale-down' looks to keep the original size of image on form-builder-generator.
802
+ // and sometimes the image is too small. Supposeing admin want to show the image in bigger size,
803
+ // so adjust it "contain" to make it bigger if possible.
804
+ // "contain" is supposed to "Preserves the aspect ratio, and fits the image inside the container, without cutting"
805
+ objectFit: 'contain',
806
+ objectPosition: this.props.data.center ? 'center' : 'left',
807
+ // Move width and height from element style to inline style of image, to make it work the same way as 'Image' element.
808
+ width: this.props.data.width,
809
+ height: this.props.data.height
790
810
  };
791
811
  var baseClasses = 'SortableItem rfb-item';
792
812
  var name = this.props.data.field_name;
@@ -804,46 +824,103 @@ var Camera = /*#__PURE__*/function (_React$Component17) {
804
824
  sourceDataURL = "data:image/png;base64,".concat(this.props.defaultValue);
805
825
  }
806
826
  }
807
- return /*#__PURE__*/_react["default"].createElement("div", {
808
- style: _objectSpread({}, this.props.style),
809
- className: baseClasses
810
- }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
811
- className: "form-group"
812
- }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), this.props.read_only === true && this.props.defaultValue && this.props.defaultValue.length > 0 ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("img", (0, _extends2["default"])({
813
- style: imageStyle,
814
- src: sourceDataURL
815
- }, this.getImageSizeProps(this.props.data)))) : /*#__PURE__*/_react["default"].createElement("div", {
816
- className: "image-upload-container"
817
- }, /*#__PURE__*/_react["default"].createElement("div", {
818
- style: fileInputStyle
819
- }, /*#__PURE__*/_react["default"].createElement("input", {
820
- name: name,
821
- type: "file",
822
- accept: "image/*",
823
- capture: "camera",
824
- className: "image-upload",
825
- onChange: this.displayImage,
826
- "data-clearlabel": this.props.data.label_after_photo_clear_icon,
827
- disabled: this.props.read_only
828
- }), /*#__PURE__*/_react["default"].createElement("div", {
829
- className: "image-upload-control"
830
- }, /*#__PURE__*/_react["default"].createElement("div", {
831
- className: "btn btn-default"
832
- }, /*#__PURE__*/_react["default"].createElement("i", {
833
- className: "fas fa-camera"
834
- }), " ", this.props.data.label_after_camera_icon), /*#__PURE__*/_react["default"].createElement("p", null, this.props.data.message_under_camera_icon))), this.state.img && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("img", {
835
- onLoad: function onLoad() {
836
- return URL.revokeObjectURL(_this13.state.previewImg);
837
- },
838
- src: this.state.previewImg,
839
- height: "100",
840
- className: "image-upload-preview"
841
- }), /*#__PURE__*/_react["default"].createElement("br", null), /*#__PURE__*/_react["default"].createElement("div", {
842
- className: "btn btn-image-clear",
843
- onClick: this.clearImage
844
- }, /*#__PURE__*/_react["default"].createElement("i", {
845
- className: "fas fa-times"
846
- }), " ", this.props.data.label_after_photo_clear_icon)))));
827
+ if (this.props.data.upload_layout === "standard") {
828
+ return /*#__PURE__*/_react["default"].createElement("div", {
829
+ style: _objectSpread({}, this.props.style),
830
+ className: baseClasses
831
+ }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
832
+ className: "mb-3"
833
+ }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), this.props.read_only === true && this.props.defaultValue && this.props.defaultValue.length > 0 ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("img", {
834
+ style: imageStyle,
835
+ src: sourceDataURL
836
+ // {...this.getImageSizeProps(this.props.data)} // move width and height from element style to inline style of image, to make it work the same way as 'Image' element.
837
+ })) : /*#__PURE__*/_react["default"].createElement("div", {
838
+ className: "image-upload-container"
839
+ }, /*#__PURE__*/_react["default"].createElement("div", {
840
+ style: fileInputStyle
841
+ }, /*#__PURE__*/_react["default"].createElement("input", {
842
+ name: name,
843
+ type: "file",
844
+ accept: "image/*"
845
+ //capture="camera" // With this property, users on most mobiles can only take photo but no options to pick up a photo from gallery
846
+ ,
847
+ className: "image-upload visually-hidden",
848
+ onChange: this.displayImage,
849
+ "data-clearlabel": this.props.data.label_after_photo_clear_icon,
850
+ disabled: this.props.read_only,
851
+ id: name
852
+ }), /*#__PURE__*/_react["default"].createElement("div", {
853
+ className: "image-upload-control",
854
+ style: {
855
+ position: 'relative'
856
+ }
857
+ }, /*#__PURE__*/_react["default"].createElement("label", {
858
+ className: "btn btn-outline-secondary",
859
+ htmlFor: name
860
+ }, /*#__PURE__*/_react["default"].createElement("i", {
861
+ className: "fas fa-camera"
862
+ }), " ", this.props.data.label_after_camera_icon), /*#__PURE__*/_react["default"].createElement("div", null, this.props.data.message_under_camera_icon))), this.state.img && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("img", {
863
+ onLoad: function onLoad() {
864
+ return URL.revokeObjectURL(_this13.state.previewImg);
865
+ },
866
+ src: this.state.previewImg,
867
+ height: "100",
868
+ className: "image-upload-preview"
869
+ }), /*#__PURE__*/_react["default"].createElement("br", null), /*#__PURE__*/_react["default"].createElement("div", {
870
+ className: "btn btn-image-clear",
871
+ onClick: this.clearImage
872
+ }, /*#__PURE__*/_react["default"].createElement("i", {
873
+ className: "fas fa-times"
874
+ }), " ", this.props.data.label_after_photo_clear_icon)))));
875
+ } else {
876
+ return /*#__PURE__*/_react["default"].createElement("div", {
877
+ style: _objectSpread({}, this.props.style),
878
+ className: baseClasses
879
+ }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
880
+ className: "mb-3"
881
+ }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), this.props.read_only === true && this.props.defaultValue && this.props.defaultValue.length > 0 ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("img", {
882
+ style: imageStyle,
883
+ src: sourceDataURL
884
+ })) : /*#__PURE__*/_react["default"].createElement("div", {
885
+ className: "image-upload-container"
886
+ }, /*#__PURE__*/_react["default"].createElement("div", {
887
+ style: fileInputStyle,
888
+ className: "upload-card"
889
+ }, /*#__PURE__*/_react["default"].createElement("input", {
890
+ name: name,
891
+ type: "file",
892
+ accept: "image/*",
893
+ capture: "camera",
894
+ className: "visually-hidden",
895
+ onChange: this.displayImage,
896
+ id: name,
897
+ disabled: this.props.read_only
898
+ }), /*#__PURE__*/_react["default"].createElement("label", {
899
+ htmlFor: name,
900
+ className: "upload-card-content"
901
+ }, /*#__PURE__*/_react["default"].createElement("i", {
902
+ className: "fas fa-cloud-upload-alt upload-icon"
903
+ }), /*#__PURE__*/_react["default"].createElement("span", {
904
+ className: "upload-text"
905
+ }, this.props.data.message_under_camera_icon), /*#__PURE__*/_react["default"].createElement("div", {
906
+ className: "btn-browse"
907
+ }, this.props.data.label_after_camera_icon))), this.state.img && /*#__PURE__*/_react["default"].createElement("div", {
908
+ className: "preview-container"
909
+ }, /*#__PURE__*/_react["default"].createElement("img", {
910
+ onLoad: function onLoad() {
911
+ return URL.revokeObjectURL(_this13.state.previewImg);
912
+ },
913
+ src: this.state.previewImg,
914
+ className: "image-upload-preview",
915
+ alt: "Preview",
916
+ height: "100"
917
+ }), /*#__PURE__*/_react["default"].createElement("button", {
918
+ className: "btn btn-image-clear",
919
+ onClick: this.clearImage
920
+ }, /*#__PURE__*/_react["default"].createElement("i", {
921
+ className: "fas fa-times"
922
+ }), " Remove Photo")))));
923
+ }
847
924
  }
848
925
  }]);
849
926
  }(_react["default"].Component);
@@ -934,9 +1011,9 @@ var FileUpload = /*#__PURE__*/function (_React$Component18) {
934
1011
  style: _objectSpread({}, this.props.style),
935
1012
  className: baseClasses
936
1013
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
937
- className: "form-group"
1014
+ className: "mb-3"
938
1015
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), this.props.read_only === true && this.props.defaultValue && this.props.defaultValue.length > 0 ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("button", {
939
- className: "btn btn-default",
1016
+ className: "btn btn-outline-secondary",
940
1017
  onClick: this.saveFile
941
1018
  }, /*#__PURE__*/_react["default"].createElement("i", {
942
1019
  className: "fas fa-download"
@@ -948,17 +1025,22 @@ var FileUpload = /*#__PURE__*/function (_React$Component18) {
948
1025
  name: name,
949
1026
  type: "file",
950
1027
  accept: this.props.data.fileType || '*',
951
- className: "image-upload",
1028
+ className: "image-upload visually-hidden",
952
1029
  onChange: this.displayFileUpload,
953
1030
  "data-clearlabel": this.props.data.label_after_file_clear_icon,
954
- disabled: this.props.read_only
1031
+ disabled: this.props.read_only,
1032
+ id: name
955
1033
  }), /*#__PURE__*/_react["default"].createElement("div", {
956
- className: "image-upload-control"
957
- }, /*#__PURE__*/_react["default"].createElement("div", {
958
- className: "btn btn-default"
1034
+ className: "image-upload-control",
1035
+ style: {
1036
+ position: 'relative'
1037
+ }
1038
+ }, /*#__PURE__*/_react["default"].createElement("label", {
1039
+ className: "btn btn-outline-secondary",
1040
+ htmlFor: name
959
1041
  }, /*#__PURE__*/_react["default"].createElement("i", {
960
1042
  className: "fas fa-file"
961
- }), " ", this.props.data.label_after_file_icon), /*#__PURE__*/_react["default"].createElement("p", null, this.props.data.message_under_file_icon))), this.state.fileUpload && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
1043
+ }), " ", this.props.data.label_after_file_icon), /*#__PURE__*/_react["default"].createElement("div", null, this.props.data.message_under_file_icon))), this.state.fileUpload && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
962
1044
  className: "file-upload-preview"
963
1045
  }, /*#__PURE__*/_react["default"].createElement("div", {
964
1046
  style: {
@@ -1004,9 +1086,9 @@ var Range = /*#__PURE__*/function (_React$Component19) {
1004
1086
  var name = this.props.data.field_name;
1005
1087
  props.type = 'range';
1006
1088
  props.list = "tickmarks_".concat(name);
1007
- props.min = this.props.data.min_value;
1008
- props.max = this.props.data.max_value;
1009
- props.step = this.props.data.step;
1089
+ props.min = Number(this.props.data.min_value);
1090
+ props.max = Number(this.props.data.max_value);
1091
+ props.step = Number(this.props.data.step) || 1;
1010
1092
  props.value = this.state.value;
1011
1093
  props.change = this.changeValue;
1012
1094
  if (this.props.mutable) {
@@ -1051,21 +1133,24 @@ var Range = /*#__PURE__*/function (_React$Component19) {
1051
1133
  style: _objectSpread({}, this.props.style),
1052
1134
  className: baseClasses
1053
1135
  }, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
1054
- className: "form-group"
1136
+ className: "mb-3"
1055
1137
  }, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
1056
1138
  className: "range"
1057
1139
  }, /*#__PURE__*/_react["default"].createElement("div", {
1058
1140
  className: "clearfix"
1059
1141
  }, /*#__PURE__*/_react["default"].createElement("span", {
1060
- className: "float-left"
1142
+ className: "float-start"
1061
1143
  }, this.props.data.min_label), /*#__PURE__*/_react["default"].createElement("span", {
1062
- className: "float-right"
1144
+ className: "float-end"
1063
1145
  }, this.props.data.max_label)), /*#__PURE__*/_react["default"].createElement(_reactBootstrapSlider["default"], props)), /*#__PURE__*/_react["default"].createElement("div", {
1064
1146
  className: "visible_marks"
1065
1147
  }, visible_marks), /*#__PURE__*/_react["default"].createElement("input", {
1066
1148
  name: name,
1067
1149
  value: this.state.value,
1068
- type: "hidden"
1150
+ type: "hidden",
1151
+ "data-min-value": props.min,
1152
+ "data-max-value": props.max,
1153
+ "data-step": props.step
1069
1154
  }), /*#__PURE__*/_react["default"].createElement("datalist", {
1070
1155
  id: props.list
1071
1156
  }, _datalist)));