@uncinc/uncinc-react-kitchen-sink 2.6.6 → 2.7.0

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 (43) hide show
  1. package/dist/components/Cookie/Checkbox/style.scss +25 -23
  2. package/dist/components/Form/Checkbox/index.js +23 -6
  3. package/dist/components/Form/Checkboxes/index.js +61 -11
  4. package/dist/components/Form/DateField/index.d.ts +3 -0
  5. package/dist/components/Form/DateField/index.js +50 -0
  6. package/dist/components/Form/DatePicker/index.js +53 -15
  7. package/dist/components/Form/DateSelect/index.d.ts +1 -0
  8. package/dist/components/Form/DateSelect/index.js +116 -89
  9. package/dist/components/Form/FormikWrapper/index.d.ts +6 -1
  10. package/dist/components/Form/FormikWrapper/index.js +34 -53
  11. package/dist/components/Form/Number/index.js +19 -12
  12. package/dist/components/Form/RadioButtons/index.js +42 -11
  13. package/dist/components/Form/RadioButtons/style.scss +1 -0
  14. package/dist/components/Form/Select/Input/index.js +33 -7
  15. package/dist/components/Form/Select/index.js +14 -7
  16. package/dist/components/Form/TextField/index.js +24 -8
  17. package/dist/components/Form/Textarea/index.js +38 -11
  18. package/dist/components/Form/index.d.ts +13 -0
  19. package/dist/components/Form/index.js +97 -0
  20. package/dist/components/Image/AdaptivePicture/index.d.ts +10 -0
  21. package/dist/components/Image/AdaptivePicture/index.js +105 -0
  22. package/dist/components/Image/AdaptivePicture/style.scss +7 -0
  23. package/dist/components/Image/Picture/index.js +4 -14
  24. package/dist/components/Image/helpers/index.d.ts +10 -0
  25. package/dist/components/Image/helpers/index.js +124 -0
  26. package/dist/components/Image/index.d.ts +10 -0
  27. package/dist/components/Image/index.js +13 -4
  28. package/dist/components/Layout/Container/index.d.ts +6 -0
  29. package/dist/components/Layout/Container/index.js +6 -2
  30. package/dist/components/Layout/Container/style.scss +15 -1
  31. package/dist/components/MediaPlayer/index.d.ts +1 -1
  32. package/dist/components/MediaPlayer/index.js +2 -1
  33. package/dist/components/TableRender/index.d.ts +1 -1
  34. package/dist/components/TableRender/index.js +2 -4
  35. package/dist/components/index.d.ts +2 -2
  36. package/dist/components/index.js +12 -3
  37. package/dist/index.d.ts +2 -2
  38. package/dist/index.js +12 -3
  39. package/package.json +1 -1
  40. package/dist/components/Form/Date/index.d.ts +0 -3
  41. package/dist/components/Form/Date/index.js +0 -17
  42. package/dist/helpers/index.d.ts +0 -14
  43. package/dist/helpers/index.js +0 -31
@@ -8,13 +8,25 @@ var _react = _interopRequireDefault(require("react"));
8
8
  var _reactSelect = _interopRequireDefault(require("react-select"));
9
9
  var _classnames = _interopRequireDefault(require("classnames"));
10
10
  var _formik = require("formik");
11
+ var _reactI18next = require("react-i18next");
12
+ var _FormikWrapper = require("../../FormikWrapper");
11
13
  require("./style.scss");
12
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ var SelectInputOption = function SelectInputOption(props) {
16
+ return (
17
+ /*#__PURE__*/
18
+ // eslint-disable-next-line react/no-danger
19
+ _react.default.createElement("span", {
20
+ dangerouslySetInnerHTML: {
21
+ __html: props.label
22
+ }
23
+ })
24
+ );
25
+ };
13
26
  var SelectInput = function SelectInput(props) {
14
27
  var fieldName = props.fieldName,
15
28
  id = props.id,
16
29
  validation = props.validation,
17
- value = props.value,
18
30
  defaultValue = props.defaultValue,
19
31
  _onChange = props.onChange,
20
32
  options = props.options,
@@ -28,8 +40,15 @@ var SelectInput = function SelectInput(props) {
28
40
  isSearchable = _props$isSearchable === void 0 ? true : _props$isSearchable,
29
41
  _props$multiple = props.multiple,
30
42
  multiple = _props$multiple === void 0 ? false : _props$multiple,
31
- size = props.size;
43
+ size = props.size,
44
+ required = props.required;
32
45
  var selectedOption = props.selectedOption;
46
+ var _useExtendedFormikCon = (0, _FormikWrapper.useExtendedFormikContext)(),
47
+ values = _useExtendedFormikCon.values,
48
+ setFieldValue = _useExtendedFormikCon.setFieldValue;
49
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
50
+ t = _useTranslation.t;
51
+ var value = values[fieldName];
33
52
 
34
53
  // Check if options is [{value, label}] or {value: label}.
35
54
  var optionsTransformed = options;
@@ -57,14 +76,20 @@ var SelectInput = function SelectInput(props) {
57
76
  });
58
77
  }
59
78
  }
79
+ var handleValidation = function handleValidation(value) {
80
+ if (validation) {
81
+ return validation(value);
82
+ }
83
+ if (required && (value === undefined || value === null || value === '' || Array.isArray(value) && value.length === 0)) {
84
+ return t(['webform.components.select.required', 'webform.required', 'webform_required']);
85
+ }
86
+ };
60
87
  return /*#__PURE__*/_react.default.createElement(_formik.Field, {
61
88
  required: true,
62
89
  name: fieldName,
63
90
  value: value,
64
- validate: validation
65
- }, function (_ref) {
66
- var field = _ref.field,
67
- form = _ref.form;
91
+ validate: handleValidation
92
+ }, function () {
68
93
  return /*#__PURE__*/_react.default.createElement(_reactSelect.default, {
69
94
  id: id,
70
95
  inputId: fieldName,
@@ -89,10 +114,11 @@ var SelectInput = function SelectInput(props) {
89
114
  if (_onChange) {
90
115
  _onChange(value);
91
116
  }
92
- form.setFieldValue(fieldName, value);
117
+ setFieldValue(fieldName, value);
93
118
  },
94
119
  options: optionsTransformed,
95
120
  isMulti: multiple,
121
+ formatOptionLabel: SelectInputOption,
96
122
  isOptionDisabled: function isOptionDisabled(option) {
97
123
  if (option.disabled) {
98
124
  return true;
@@ -8,6 +8,7 @@ var _react = _interopRequireDefault(require("react"));
8
8
  var _classnames = _interopRequireDefault(require("classnames"));
9
9
  var _GenericFormElement = _interopRequireDefault(require("../GenericFormElement"));
10
10
  var _Input = _interopRequireDefault(require("./Input"));
11
+ var _FormikWrapper = require("../FormikWrapper");
11
12
  require("./style.scss");
12
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
@@ -16,9 +17,6 @@ var Select = function Select(props) {
16
17
  fieldName = props.fieldName,
17
18
  required = props.required,
18
19
  description = props.description,
19
- error = props.error,
20
- touched = props.touched,
21
- displayRequiredIndicator = props.displayRequiredIndicator,
22
20
  className = props.className,
23
21
  wrapperClassName = props.wrapperClassName,
24
22
  _props$disabled = props.disabled,
@@ -28,25 +26,34 @@ var Select = function Select(props) {
28
26
  _props$isSearchable = props.isSearchable,
29
27
  isSearchable = _props$isSearchable === void 0 ? true : _props$isSearchable,
30
28
  _props$isClearable = props.isClearable,
31
- isClearable = _props$isClearable === void 0 ? true : _props$isClearable;
29
+ isClearable = _props$isClearable === void 0 ? true : _props$isClearable,
30
+ validation = props.validation;
31
+ var _useExtendedFormikCon = (0, _FormikWrapper.useExtendedFormikContext)(),
32
+ errors = _useExtendedFormikCon.errors,
33
+ touched = _useExtendedFormikCon.touched,
34
+ displayRequiredIndicator = _useExtendedFormikCon.displayRequiredIndicator;
35
+ var error = errors[fieldName];
36
+ var isTouched = touched[fieldName];
32
37
  return /*#__PURE__*/_react.default.createElement(_GenericFormElement.default, {
33
38
  className: (0, _classnames.default)('Select', wrapperClassName),
34
39
  title: title,
35
40
  required: required,
36
41
  description: description,
37
42
  fieldName: fieldName,
38
- touched: touched,
43
+ touched: isTouched,
39
44
  error: error,
40
45
  displayRequiredIndicator: displayRequiredIndicator
41
46
  }, /*#__PURE__*/_react.default.createElement(_Input.default, _extends({}, props, {
42
47
  fieldName: fieldName,
43
48
  className: (0, _classnames.default)(className, {
44
- 'error': error && touched
49
+ 'error': error && isTouched
45
50
  }),
46
51
  disabled: disabled,
47
52
  multiple: multiple,
48
53
  isSearchable: isSearchable,
49
- isClearable: isClearable
54
+ isClearable: isClearable,
55
+ required: required,
56
+ validate: validation
50
57
  })));
51
58
  };
52
59
  var _default = Select;
@@ -7,10 +7,12 @@ exports.default = exports.TextField = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _formik = require("formik");
9
9
  var _classnames = _interopRequireDefault(require("classnames"));
10
+ var _reactI18next = require("react-i18next");
10
11
  var _withMapping = _interopRequireDefault(require("../../../Context/withMapping"));
11
12
  var _GenericFormElement = _interopRequireDefault(require("../GenericFormElement"));
13
+ var _FormikWrapper = require("../FormikWrapper");
12
14
  require("./style.scss");
13
- var _excluded = ["title", "required", "description", "placeholder", "fieldName", "validation", "touched", "error", "value", "displayRequiredIndicator", "onChange", "className", "wrapperClassName", "disabled"];
15
+ var _excluded = ["title", "required", "description", "placeholder", "fieldName", "validation", "onChange", "className", "wrapperClassName", "disabled"];
14
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
17
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
16
18
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
@@ -22,10 +24,6 @@ var TextField = function TextField(props) {
22
24
  placeholder = props.placeholder,
23
25
  fieldName = props.fieldName,
24
26
  validation = props.validation,
25
- touched = props.touched,
26
- error = props.error,
27
- value = props.value,
28
- displayRequiredIndicator = props.displayRequiredIndicator,
29
27
  onChange = props.onChange,
30
28
  className = props.className,
31
29
  wrapperClassName = props.wrapperClassName,
@@ -33,6 +31,16 @@ var TextField = function TextField(props) {
33
31
  disabled = _props$disabled === void 0 ? false : _props$disabled,
34
32
  restProps = _objectWithoutProperties(props, _excluded);
35
33
  var type = props.type || 'text';
34
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
35
+ t = _useTranslation.t;
36
+ var handleValidation = function handleValidation(value) {
37
+ if (validation) {
38
+ return validation(value);
39
+ }
40
+ if (required && (value === undefined || value === null || value === '')) {
41
+ return t(['webform.components.text_field.required', 'webform.required', 'webform_required']);
42
+ }
43
+ };
36
44
  var handleChange = function handleChange(e) {
37
45
  var handleChange = props.handleChange;
38
46
  if (handleChange) {
@@ -42,25 +50,33 @@ var TextField = function TextField(props) {
42
50
  onChange(e);
43
51
  }
44
52
  };
53
+ var _useExtendedFormikCon = (0, _FormikWrapper.useExtendedFormikContext)(),
54
+ values = _useExtendedFormikCon.values,
55
+ errors = _useExtendedFormikCon.errors,
56
+ touched = _useExtendedFormikCon.touched,
57
+ displayRequiredIndicator = _useExtendedFormikCon.displayRequiredIndicator;
58
+ var isTouched = touched[fieldName];
59
+ var value = values[fieldName];
60
+ var error = errors[fieldName];
45
61
  return /*#__PURE__*/_react.default.createElement(_GenericFormElement.default, {
46
62
  className: (0, _classnames.default)('TextField', wrapperClassName),
47
63
  title: title,
48
64
  required: required,
49
65
  description: description,
50
66
  fieldName: fieldName,
51
- touched: touched,
67
+ touched: isTouched,
52
68
  error: error,
53
69
  displayRequiredIndicator: displayRequiredIndicator
54
70
  }, /*#__PURE__*/_react.default.createElement(_formik.Field, _extends({}, restProps, {
55
71
  className: (0, _classnames.default)(className, {
56
- 'error': error && touched
72
+ 'error': error && isTouched
57
73
  }),
58
74
  id: fieldName,
59
75
  name: fieldName,
60
76
  type: type,
61
77
  value: value,
62
78
  placeholder: placeholder,
63
- validate: validation,
79
+ validate: handleValidation,
64
80
  onKeyUp: handleChange,
65
81
  disabled: disabled
66
82
  })));
@@ -7,9 +7,15 @@ exports.default = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _formik = require("formik");
9
9
  var _classnames = _interopRequireDefault(require("classnames"));
10
+ var _reactI18next = require("react-i18next");
10
11
  var _GenericFormElement = _interopRequireDefault(require("../GenericFormElement"));
12
+ var _FormikWrapper = require("../FormikWrapper");
11
13
  require("./style.scss");
14
+ var _excluded = ["title", "required", "description", "placeholder", "fieldName", "validation", "rows", "className", "onChange", "wrapperClassName", "disabled"];
12
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
17
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
18
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
13
19
  var Textarea = function Textarea(props) {
14
20
  var title = props.title,
15
21
  required = props.required,
@@ -17,27 +23,43 @@ var Textarea = function Textarea(props) {
17
23
  placeholder = props.placeholder,
18
24
  fieldName = props.fieldName,
19
25
  validation = props.validation,
20
- touched = props.touched,
21
- error = props.error,
22
26
  rows = props.rows,
23
- value = props.value,
24
- displayRequiredIndicator = props.displayRequiredIndicator,
25
27
  className = props.className,
28
+ onChange = props.onChange,
26
29
  wrapperClassName = props.wrapperClassName,
27
30
  _props$disabled = props.disabled,
28
- disabled = _props$disabled === void 0 ? false : _props$disabled;
31
+ disabled = _props$disabled === void 0 ? false : _props$disabled,
32
+ restProps = _objectWithoutProperties(props, _excluded);
33
+ var _useExtendedFormikCon = (0, _FormikWrapper.useExtendedFormikContext)(),
34
+ values = _useExtendedFormikCon.values,
35
+ errors = _useExtendedFormikCon.errors,
36
+ touched = _useExtendedFormikCon.touched,
37
+ displayRequiredIndicator = _useExtendedFormikCon.displayRequiredIndicator;
38
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
39
+ t = _useTranslation.t;
40
+ var isTouched = touched[fieldName];
41
+ var value = values[fieldName];
42
+ var error = errors[fieldName];
43
+ var handleValidation = function handleValidation(value) {
44
+ if (validation) {
45
+ return validation(value);
46
+ }
47
+ if (required && (value === undefined || value === null || value === '')) {
48
+ return t(['webform.components.textarea.required', 'webform.required', 'webform_required']);
49
+ }
50
+ };
29
51
  return /*#__PURE__*/_react.default.createElement(_GenericFormElement.default, {
30
52
  className: (0, _classnames.default)('Textarea', wrapperClassName),
31
53
  title: title,
32
54
  required: required,
33
55
  description: description,
34
56
  fieldName: fieldName,
35
- touched: touched,
57
+ touched: isTouched,
36
58
  error: error,
37
59
  displayRequiredIndicator: displayRequiredIndicator
38
- }, /*#__PURE__*/_react.default.createElement(_formik.Field, {
60
+ }, /*#__PURE__*/_react.default.createElement(_formik.Field, _extends({}, restProps, {
39
61
  className: (0, _classnames.default)(className, {
40
- 'error': error && touched
62
+ 'error': error && isTouched
41
63
  }),
42
64
  id: fieldName,
43
65
  name: fieldName,
@@ -45,9 +67,14 @@ var Textarea = function Textarea(props) {
45
67
  value: value,
46
68
  placeholder: placeholder,
47
69
  rows: rows,
48
- validate: validation,
49
- disabled: disabled
50
- }));
70
+ validate: handleValidation,
71
+ disabled: disabled,
72
+ onKeyUp: function onKeyUp(event) {
73
+ if (onChange) {
74
+ onChange(event);
75
+ }
76
+ }
77
+ })));
51
78
  };
52
79
  var _default = Textarea;
53
80
  exports.default = _default;
@@ -0,0 +1,13 @@
1
+ export { default as FormikWrapper } from "./FormikWrapper";
2
+ export { default as FormCheckbox } from "./Checkbox";
3
+ export { default as FormCheckboxes } from "./Checkboxes";
4
+ export { default as FormDate } from "./DateField";
5
+ export { default as FormDatePicker } from "./DatePicker";
6
+ export { default as FormDateSelect } from "./DateSelect";
7
+ export { default as FormEmail } from "./Email";
8
+ export { default as FormNumber } from "./Number";
9
+ export { default as FormRadioButtons } from "./RadioButtons";
10
+ export { default as FormSearchField } from "./SearchField";
11
+ export { default as FormSelect } from "./Select";
12
+ export { default as FormTextarea } from "./Textarea";
13
+ export { default as FormTextField } from "./TextField";
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "FormCheckbox", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _Checkbox.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "FormCheckboxes", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _Checkboxes.default;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "FormDate", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _DateField.default;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "FormDatePicker", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _DatePicker.default;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "FormDateSelect", {
31
+ enumerable: true,
32
+ get: function get() {
33
+ return _DateSelect.default;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "FormEmail", {
37
+ enumerable: true,
38
+ get: function get() {
39
+ return _Email.default;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "FormNumber", {
43
+ enumerable: true,
44
+ get: function get() {
45
+ return _Number.default;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "FormRadioButtons", {
49
+ enumerable: true,
50
+ get: function get() {
51
+ return _RadioButtons.default;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "FormSearchField", {
55
+ enumerable: true,
56
+ get: function get() {
57
+ return _SearchField.default;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "FormSelect", {
61
+ enumerable: true,
62
+ get: function get() {
63
+ return _Select.default;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "FormTextField", {
67
+ enumerable: true,
68
+ get: function get() {
69
+ return _TextField.default;
70
+ }
71
+ });
72
+ Object.defineProperty(exports, "FormTextarea", {
73
+ enumerable: true,
74
+ get: function get() {
75
+ return _Textarea.default;
76
+ }
77
+ });
78
+ Object.defineProperty(exports, "FormikWrapper", {
79
+ enumerable: true,
80
+ get: function get() {
81
+ return _FormikWrapper.default;
82
+ }
83
+ });
84
+ var _FormikWrapper = _interopRequireDefault(require("./FormikWrapper"));
85
+ var _Checkbox = _interopRequireDefault(require("./Checkbox"));
86
+ var _Checkboxes = _interopRequireDefault(require("./Checkboxes"));
87
+ var _DateField = _interopRequireDefault(require("./DateField"));
88
+ var _DatePicker = _interopRequireDefault(require("./DatePicker"));
89
+ var _DateSelect = _interopRequireDefault(require("./DateSelect"));
90
+ var _Email = _interopRequireDefault(require("./Email"));
91
+ var _Number = _interopRequireDefault(require("./Number"));
92
+ var _RadioButtons = _interopRequireDefault(require("./RadioButtons"));
93
+ var _SearchField = _interopRequireDefault(require("./SearchField"));
94
+ var _Select = _interopRequireDefault(require("./Select"));
95
+ var _Textarea = _interopRequireDefault(require("./Textarea"));
96
+ var _TextField = _interopRequireDefault(require("./TextField"));
97
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import './style.scss';
3
+ interface Props extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src'> {
4
+ src: string | string[];
5
+ onLoad: (e: any) => void;
6
+ objectFit?: 'fill' | 'contain' | 'cover' | 'none' | 'scale-down';
7
+ aspectRatio?: number | string;
8
+ }
9
+ declare const AdaptivePicture: React.FC<Props>;
10
+ export default AdaptivePicture;
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _classnames = _interopRequireDefault(require("classnames"));
9
+ require("./style.scss");
10
+ var _helpers = require("../helpers");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
13
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
14
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
15
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
16
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
17
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
18
+ // extend html img props
19
+
20
+ var AdaptivePicture = function AdaptivePicture(_ref) {
21
+ var src = _ref.src,
22
+ _onLoad = _ref.onLoad,
23
+ alt = _ref.alt,
24
+ objectFit = _ref.objectFit,
25
+ _ref$aspectRatio = _ref.aspectRatio,
26
+ aspectRatio = _ref$aspectRatio === void 0 ? 1 : _ref$aspectRatio;
27
+ var sourcesAsArray = Array.isArray(src) ? src : [src];
28
+ var validatedSources = sourcesAsArray.filter(_helpers.isValidImage);
29
+ var fallbackImage = validatedSources[0];
30
+ var imageRef = _react.default.useRef(null);
31
+ var style = {
32
+ objectFit: objectFit,
33
+ aspectRatio: aspectRatio
34
+ };
35
+ var _React$useState = _react.default.useState('PENDING'),
36
+ _React$useState2 = _slicedToArray(_React$useState, 2),
37
+ status = _React$useState2[0],
38
+ setStatus = _React$useState2[1];
39
+ var _React$useState3 = _react.default.useState(fallbackImage),
40
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
41
+ targetSrc = _React$useState4[0],
42
+ setTargetSrc = _React$useState4[1];
43
+ _react.default.useEffect(function () {
44
+ // @ts-ignore
45
+ if (global.ssr) return;
46
+ if (!imageRef.current) return;
47
+ var image = imageRef.current;
48
+ // get parent of image element
49
+ var container = image.parentElement;
50
+ if (!container) return;
51
+ var resizeObserver = new ResizeObserver(function (entries) {
52
+ var widthAfterResize = entries[0].contentRect.width;
53
+ if (image.width < widthAfterResize) {
54
+ var newTargetSrc = (0, _helpers.calculateTargetSrc)(image.width, validatedSources, fallbackImage);
55
+ if (targetSrc !== newTargetSrc) {
56
+ setTargetSrc(newTargetSrc);
57
+ }
58
+ } else {
59
+ var _newTargetSrc = (0, _helpers.calculateTargetSrc)(widthAfterResize, validatedSources, fallbackImage);
60
+ if (targetSrc !== _newTargetSrc) {
61
+ setTargetSrc(_newTargetSrc);
62
+ }
63
+ }
64
+ if (status === 'PENDING') {
65
+ setStatus('INITIAL_BREAKPOINT_CALCULATED');
66
+ }
67
+ });
68
+ resizeObserver.observe(container);
69
+
70
+ // eslint-disable-next-line consistent-return
71
+ return function () {
72
+ resizeObserver.unobserve(container);
73
+ };
74
+ }, [fallbackImage, status, targetSrc, validatedSources]);
75
+ var loadedUrl = (0, _helpers.useImageLoader)(fallbackImage, targetSrc, imageRef);
76
+ function onErrorFallback(e) {
77
+ if (e.target.src !== fallbackImage) {
78
+ e.target.src = fallbackImage;
79
+ }
80
+ }
81
+ var classes = (0, _classnames.default)('AdaptivePicture', {
82
+ 'AdaptivePicture--initiallyLoaded': status === 'INITIAL_LOADED'
83
+ });
84
+ if (!validatedSources.length) {
85
+ return null;
86
+ }
87
+ return /*#__PURE__*/_react.default.createElement("img", {
88
+ style: style,
89
+ className: classes,
90
+ onError: onErrorFallback,
91
+ onLoad: function onLoad(e) {
92
+ if (_onLoad) {
93
+ _onLoad(e);
94
+ }
95
+ if (status === 'INITIAL_BREAKPOINT_CALCULATED' && e.target.src === targetSrc) {
96
+ setStatus('INITIAL_LOADED');
97
+ }
98
+ },
99
+ src: loadedUrl,
100
+ ref: imageRef,
101
+ alt: alt
102
+ });
103
+ };
104
+ var _default = AdaptivePicture;
105
+ exports.default = _default;
@@ -0,0 +1,7 @@
1
+ .AdaptivePicture {
2
+ width: 100%;
3
+ }
4
+
5
+ .AdaptivePicture:not(.AdaptivePicture--initiallyLoaded) {
6
+ filter: blur(1.5rem);
7
+ }
@@ -10,6 +10,7 @@ var _path = _interopRequireDefault(require("path"));
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
  var _extToMimeTypes = _interopRequireDefault(require("./data/ext-to-mime-types.json"));
12
12
  require("./style.scss");
13
+ var _helpers = require("../helpers");
13
14
  var _excluded = ["src", "className", "onLoad", "imageRef", "includeWebP"];
14
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
16
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
@@ -35,21 +36,10 @@ var Picture = function Picture(_ref) {
35
36
  alt: alt,
36
37
  title: title
37
38
  };
38
- var getImageExtension = function getImageExtension(url) {
39
- var sanitizedUrl = url.replace(/\?.*/, '');
40
- return _path.default.extname(sanitizedUrl).toLowerCase();
41
- };
42
39
  var getMimeType = function getMimeType(url) {
43
- var extension = getImageExtension(url);
40
+ var extension = (0, _helpers.getImageExtension)(url);
44
41
  return _extToMimeTypes.default[extension] ? _extToMimeTypes.default[extension] : FALLBACK_MIME_TYPE;
45
42
  };
46
- var isValidImage = function isValidImage(url) {
47
- if (!url) {
48
- return false;
49
- }
50
- var extension = getImageExtension(url);
51
- return Object.keys(_extToMimeTypes.default).includes(extension);
52
- };
53
43
  if (_immutable.default.Iterable.isIterable(_immutable.default.fromJS(src))) {
54
44
  // Sources have to be defined in a descending order.
55
45
  // We sort them from best to worst quality.
@@ -57,7 +47,7 @@ var Picture = function Picture(_ref) {
57
47
  return parseInt(breakpoint);
58
48
  }).reverse();
59
49
  var sources = sourcesAll.map(function (url) {
60
- if (isValidImage(url)) {
50
+ if ((0, _helpers.isValidImage)(url)) {
61
51
  return url;
62
52
  }
63
53
  }).filter(function (image) {
@@ -105,7 +95,7 @@ var Picture = function Picture(_ref) {
105
95
  src: fallback
106
96
  })));
107
97
  }
108
- if (src && isValidImage(src)) {
98
+ if (src && (0, _helpers.isValidImage)(src)) {
109
99
  if (includeWebP) {
110
100
  var webpUrl = src.replace(/\.(png|gif|jp(e?)g)/, '.webp');
111
101
  return /*#__PURE__*/_react.default.createElement("picture", {
@@ -0,0 +1,10 @@
1
+ import { RefObject } from 'react';
2
+ export declare function getImageExtension(url: string): string;
3
+ /**
4
+ * Check if the image that belongs to an url is a valid image.
5
+ *
6
+ * @param {string} url
7
+ */
8
+ export declare function isValidImage(url: string): boolean;
9
+ export declare function useImageLoader(initialSrc: string, targetSrc: string, imageRef: RefObject<HTMLImageElement>): string;
10
+ export declare function calculateTargetSrc(referenceWidth: number, sources: string[], fallbackImage: string): string;