@uncinc/uncinc-react-kitchen-sink 2.6.5 → 2.6.7

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.
@@ -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;
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.calculateTargetSrc = calculateTargetSrc;
7
+ exports.getImageExtension = getImageExtension;
8
+ exports.isValidImage = isValidImage;
9
+ exports.useImageLoader = useImageLoader;
10
+ var _path = _interopRequireDefault(require("path"));
11
+ var _react = require("react");
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
14
+ 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."); }
15
+ 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); }
16
+ 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; }
17
+ 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; } }
18
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
19
+ var breakpoints = [0, 256, 512, 1024, 2048];
20
+ var mimeTypes = {
21
+ '.gif': 'image/gif',
22
+ '.png': 'image/png',
23
+ '.jpe': 'image/jpeg',
24
+ '.jpeg': 'image/jpeg',
25
+ '.jpg': 'image/jpeg',
26
+ '.webp': 'image/webp',
27
+ '.svg': 'image/svg+xml'
28
+ };
29
+ function getImageExtension(url) {
30
+ var sanitizedUrl = url.replace(/\?.*/, '');
31
+ return _path.default.extname(sanitizedUrl).toLowerCase();
32
+ }
33
+
34
+ /**
35
+ * Check if the image that belongs to an url is a valid image.
36
+ *
37
+ * @param {string} url
38
+ */
39
+ function isValidImage(url) {
40
+ if (!url) {
41
+ return false;
42
+ }
43
+ var extension = getImageExtension(url);
44
+ return Object.keys(mimeTypes).includes(extension);
45
+ }
46
+ function useImageLoader(initialSrc, targetSrc, imageRef) {
47
+ var _useState = (0, _react.useState)(initialSrc),
48
+ _useState2 = _slicedToArray(_useState, 2),
49
+ src = _useState2[0],
50
+ setSrc = _useState2[1];
51
+ var _useState3 = (0, _react.useState)(false),
52
+ _useState4 = _slicedToArray(_useState3, 2),
53
+ isInViewport = _useState4[0],
54
+ setIsInViewport = _useState4[1];
55
+ (0, _react.useEffect)(function () {
56
+ // @ts-ignore
57
+ if (global.ssr) return;
58
+ if (!imageRef.current) return;
59
+ var image = imageRef.current;
60
+ var observer = new IntersectionObserver(function (_ref) {
61
+ var _ref2 = _slicedToArray(_ref, 1),
62
+ entry = _ref2[0];
63
+ if (entry.intersectionRatio > 0) {
64
+ setIsInViewport(true);
65
+ } else {
66
+ setIsInViewport(false);
67
+ }
68
+ }, {
69
+ root: null,
70
+ // 10% of the image must be visible to trigger the callback
71
+ // note that an edge case may occur if the image is so large
72
+ // that even 10% of it exceeds the viewport's height
73
+ threshold: 0.1
74
+ });
75
+ observer.observe(image);
76
+
77
+ // eslint-disable-next-line consistent-return
78
+ return function () {
79
+ observer.unobserve(image);
80
+ };
81
+ }, [imageRef, isInViewport, setIsInViewport]);
82
+ (0, _react.useEffect)(function () {
83
+ if (initialSrc === targetSrc) return;
84
+ if (!isInViewport) return;
85
+ var img = new Image();
86
+ img.onload = function () {
87
+ return setSrc(targetSrc);
88
+ };
89
+ img.src = targetSrc;
90
+ }, [targetSrc, initialSrc, isInViewport]);
91
+ return src;
92
+ }
93
+ function calculateTargetSrc(referenceWidth, sources, fallbackImage) {
94
+ var breakpoint = breakpoints.find(function (bp) {
95
+ return bp >= referenceWidth;
96
+ }) || breakpoints[breakpoints.length - 1];
97
+
98
+ // get the index of breakpoint
99
+ var index = breakpoints.indexOf(breakpoint);
100
+ return findClosestIndex(sources, index, fallbackImage);
101
+ }
102
+
103
+ /**
104
+ * Find the item in an array that is closest to the specified index.
105
+ * If the item at the index is not defined, the function will search for
106
+ * the closest item higher than the index, and if not found, it will
107
+ * search for the closest item lower than the index. If no item is found,
108
+ * the fallback value will be returned.
109
+ */
110
+ function findClosestIndex(arr, targetIndex, fallback) {
111
+ if (arr.length === 0) return fallback;
112
+ if (arr[targetIndex] !== undefined) return arr[targetIndex];
113
+ var upperIndex = targetIndex + 1;
114
+ var lowerIndex = targetIndex - 1;
115
+ while (upperIndex < arr.length) {
116
+ if (arr[upperIndex] !== undefined) return arr[upperIndex];
117
+ upperIndex += 1;
118
+ }
119
+ while (lowerIndex >= 0) {
120
+ if (arr[lowerIndex] !== undefined) return arr[lowerIndex];
121
+ lowerIndex -= 1;
122
+ }
123
+ return fallback;
124
+ }
@@ -5,10 +5,20 @@ declare namespace Image {
5
5
  onLoad: PropTypes.Requireable<(...args: any[]) => any>;
6
6
  alt: PropTypes.Requireable<string>;
7
7
  src: PropTypes.Validator<{}>;
8
+ dimensions: PropTypes.Requireable<NonNullable<PropTypes.InferProps<{
9
+ width: PropTypes.Requireable<number>;
10
+ height: PropTypes.Requireable<number>;
11
+ aspectRatio: PropTypes.Requireable<number>;
12
+ }> | (PropTypes.InferProps<{
13
+ width: PropTypes.Requireable<number>;
14
+ height: PropTypes.Requireable<number>;
15
+ aspectRatio: PropTypes.Requireable<number>;
16
+ }> | null | undefined)[] | null | undefined>>;
8
17
  lazyload: PropTypes.Requireable<boolean>;
9
18
  };
10
19
  namespace defaultProps {
11
20
  let lazyload: boolean;
21
+ let dimensions: {};
12
22
  }
13
23
  }
14
24
  import React from 'react';
@@ -9,6 +9,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _reactImmutableProptypes = _interopRequireDefault(require("react-immutable-proptypes"));
10
10
  var _LazyLoadWrapper = _interopRequireDefault(require("./LazyLoadWrapper"));
11
11
  var _Picture = _interopRequireDefault(require("./Picture"));
12
+ var _AdaptivePicture = _interopRequireDefault(require("./AdaptivePicture"));
12
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
14
15
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -18,19 +19,27 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _ty
18
19
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
19
20
  var Image = function Image(props) {
20
21
  var lazyload = props.lazyload;
22
+ var PictureComponent = Array.isArray(props.src) ? _AdaptivePicture.default : _Picture.default;
21
23
  if (lazyload) {
22
24
  return /*#__PURE__*/_react.default.createElement(_LazyLoadWrapper.default, {
23
25
  lazyload: lazyload
24
- }, /*#__PURE__*/_react.default.createElement(_Picture.default, props));
26
+ }, /*#__PURE__*/_react.default.createElement(PictureComponent, props));
25
27
  }
26
- return /*#__PURE__*/_react.default.createElement(_Picture.default, props);
28
+ return /*#__PURE__*/_react.default.createElement(PictureComponent, props);
27
29
  };
30
+ var dimensionsPropType = _propTypes.default.shape({
31
+ width: _propTypes.default.number,
32
+ height: _propTypes.default.number,
33
+ aspectRatio: _propTypes.default.number
34
+ });
28
35
  Image.propTypes = _objectSpread({
29
- src: _propTypes.default.oneOfType([_propTypes.default.string, _reactImmutableProptypes.default.map]).isRequired,
36
+ src: _propTypes.default.oneOfType([_propTypes.default.string, _reactImmutableProptypes.default.map, _propTypes.default.arrayOf(_propTypes.default.string)]).isRequired,
37
+ dimensions: _propTypes.default.oneOfType([dimensionsPropType, _propTypes.default.arrayOf(dimensionsPropType)]),
30
38
  lazyload: _propTypes.default.bool
31
39
  }, _Picture.default.propTypes);
32
40
  Image.defaultProps = {
33
- lazyload: true
41
+ lazyload: true,
42
+ dimensions: {}
34
43
  };
35
44
  var _default = Image;
36
45
  exports.default = _default;
@@ -1,3 +1,4 @@
1
+ @use 'sass:map';
1
2
  @import '../../../styles/assets/mixins';
2
3
  @import '../../../styles/assets/grid';
3
4
 
@@ -20,7 +21,20 @@
20
21
  .container--fluid {
21
22
  // Enlarge side paddings to equal 1 gutter size.
22
23
  @include make-container;
23
- @include make-container-max-widths;
24
+
25
+ max-width: map.get($container-max-widths, sm);
26
+ @media #{$tablet} {
27
+ max-width: map.get($container-max-widths, md);
28
+ }
29
+ @media #{$normal} {
30
+ max-width: map.get($container-max-widths, lg);
31
+ }
32
+ @media #{$wide} {
33
+ max-width: map.get($container-max-widths, xl);
34
+ }
35
+ @media #{$huge} {
36
+ max-width: map.get($container-max-widths, xxl);
37
+ }
24
38
  }
25
39
 
26
40
  .container--fluid {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import './style.scss';
3
3
  export interface TableRenderProps {
4
- html: string;
4
+ element: React.ReactElement;
5
5
  mobileCards?: boolean;
6
6
  mobileCardsBreakpoint?: number;
7
7
  transposeOnMobile?: boolean;
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
- var _reactHtmlParser = _interopRequireDefault(require("react-html-parser"));
10
9
  var _classnames = _interopRequireDefault(require("classnames"));
11
10
  var _useWindowDimensions2 = _interopRequireDefault(require("../../hooks/useWindowDimensions"));
12
11
  var _constants = require("../../config/constants");
@@ -15,7 +14,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
15
14
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
15
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
16
  var TableRender = function TableRender(_ref) {
18
- var html = _ref.html,
17
+ var element = _ref.element,
19
18
  _ref$mobileCards = _ref.mobileCards,
20
19
  mobileCards = _ref$mobileCards === void 0 ? false : _ref$mobileCards,
21
20
  _ref$mobileCardsBreak = _ref.mobileCardsBreakpoint,
@@ -26,7 +25,6 @@ var TableRender = function TableRender(_ref) {
26
25
  width = _useWindowDimensions.width;
27
26
  var isMobile = width < mobileCardsBreakpoint;
28
27
  var tableRef = (0, _react.useRef)(null);
29
- var table = (0, _reactHtmlParser.default)(html);
30
28
  (0, _react.useEffect)(function () {
31
29
  if (isMobile && mobileCards && tableRef.current) {
32
30
  var headerArr = [];
@@ -60,7 +58,7 @@ var TableRender = function TableRender(_ref) {
60
58
  return /*#__PURE__*/_react.default.createElement("div", {
61
59
  ref: tableRef,
62
60
  className: tableClassNames
63
- }, table);
61
+ }, element);
64
62
  };
65
63
  var _default = TableRender;
66
64
  exports.default = _default;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import './style.scss';
3
+ export interface TagProps {
4
+ name: string;
5
+ removable?: boolean;
6
+ stretchClickableArea?: boolean;
7
+ deleteButtonAriaLabel?: string;
8
+ className?: string;
9
+ onDelete?: (name: string) => void;
10
+ }
11
+ declare const Tag: React.FC<TagProps>;
12
+ export default Tag;
@@ -0,0 +1,43 @@
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
+ var _reactI18next = require("react-i18next");
10
+ require("./style.scss");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ var Tag = function Tag(props) {
13
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
14
+ t = _useTranslation.t;
15
+ var name = props.name,
16
+ removable = props.removable,
17
+ stretchClickableArea = props.stretchClickableArea,
18
+ deleteButtonAriaLabel = props.deleteButtonAriaLabel,
19
+ className = props.className,
20
+ onDelete = props.onDelete;
21
+ var classNames = (0, _classnames.default)('Tag', {
22
+ 'Tag--stretch-clickable-area': stretchClickableArea
23
+ }, className);
24
+ return /*#__PURE__*/_react.default.createElement("div", {
25
+ className: classNames
26
+ }, /*#__PURE__*/_react.default.createElement("span", {
27
+ className: "Tag__name"
28
+ }, name), removable && onDelete && /*#__PURE__*/_react.default.createElement("button", {
29
+ className: "Tag__delete-button icon-after icon-cross icon-variant-1",
30
+ type: "button",
31
+ "aria-label": deleteButtonAriaLabel || t('atoms.tag.delete'),
32
+ onClick: function onClick() {
33
+ return onDelete(name);
34
+ }
35
+ }));
36
+ };
37
+ Tag.defaultProps = {
38
+ removable: true,
39
+ stretchClickableArea: true,
40
+ onDelete: function onDelete() {}
41
+ };
42
+ var _default = Tag;
43
+ exports.default = _default;
@@ -0,0 +1,27 @@
1
+ @import '../../styles/assets/mixins';
2
+
3
+ .Tag {
4
+ position: relative;
5
+ display: inline-flex;
6
+ flex-wrap: nowrap;
7
+ align-items: center;
8
+
9
+ &__delete-button {
10
+ // Expanding the clickable area by adding padding,
11
+ // and compensating this, using negative margin.
12
+ margin: -10px;
13
+ border: 0;
14
+ padding: 10px;
15
+ background-color: transparent;
16
+ cursor: pointer;
17
+ }
18
+
19
+ &--stretch-clickable-area .Tag__delete-button {
20
+ margin: 0;
21
+ padding: 0;
22
+
23
+ &:before {
24
+ @include block-content;
25
+ }
26
+ }
27
+ }
@@ -26,6 +26,11 @@
26
26
  "searchkit": {
27
27
  "reset_search": "Reconfigure search"
28
28
  },
29
+ "atoms": {
30
+ "tag": {
31
+ "delete": "Delete tag"
32
+ }
33
+ },
29
34
  "organisms": {
30
35
  "media_player": {
31
36
  "not_supported_message": "The current file cannot be played."
@@ -26,6 +26,11 @@
26
26
  "searchkit": {
27
27
  "reset_search": "Zoeken opnieuw instellen"
28
28
  },
29
+ "atoms": {
30
+ "tag": {
31
+ "delete": "Verwijder tag"
32
+ }
33
+ },
29
34
  "organisms": {
30
35
  "media_player": {
31
36
  "not_supported_message": "Het huidige bestand kan niet worden afgespeeld."
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export { default as Image } from "./components/Image";
8
8
  export { default as ImageBackground } from "./components/Image/Background";
9
9
  export { default as Lottie } from "./components/Lottie";
10
10
  export { default as LottieAnimationWithMousePosition } from "./components/Lottie/LottieAnimationWithMousePosition";
11
+ export { default as Tag } from "./components/Tag";
11
12
  export { default as WysiwygField } from "./components/WysiwygField";
12
13
  export { default as CallToAction } from "./components/CallToAction";
13
14
  export { default as ChipFacet } from "./components/SearchKit/Facets/ChipFacet";
package/dist/index.js CHANGED
@@ -345,6 +345,12 @@ Object.defineProperty(exports, "TableRender", {
345
345
  return _TableRender.default;
346
346
  }
347
347
  });
348
+ Object.defineProperty(exports, "Tag", {
349
+ enumerable: true,
350
+ get: function get() {
351
+ return _Tag.default;
352
+ }
353
+ });
348
354
  Object.defineProperty(exports, "Text", {
349
355
  enumerable: true,
350
356
  get: function get() {
@@ -469,6 +475,7 @@ var _Image = _interopRequireDefault(require("./components/Image"));
469
475
  var _Background = _interopRequireDefault(require("./components/Image/Background"));
470
476
  var _Lottie = _interopRequireDefault(require("./components/Lottie"));
471
477
  var _LottieAnimationWithMousePosition = _interopRequireDefault(require("./components/Lottie/LottieAnimationWithMousePosition"));
478
+ var _Tag = _interopRequireDefault(require("./components/Tag"));
472
479
  var _WysiwygField = _interopRequireDefault(require("./components/WysiwygField"));
473
480
  var _CallToAction = _interopRequireDefault(require("./components/CallToAction"));
474
481
  var _ChipFacet = _interopRequireDefault(require("./components/SearchKit/Facets/ChipFacet"));
@@ -103,3 +103,12 @@
103
103
  line-height: $desktop--line-height--body--large;
104
104
  }
105
105
  }
106
+
107
+ // Other mixins
108
+
109
+ // Useful for stretching the clickable area of links or buttons around its parent block.
110
+ @mixin block-content {
111
+ content: '';
112
+ position: absolute;
113
+ inset: 0;
114
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uncinc/uncinc-react-kitchen-sink",
3
- "version": "2.6.5",
3
+ "version": "2.6.7",
4
4
  "description": "Default React components that are easily extended.",
5
5
  "author": "uncinc",
6
6
  "license": "MIT",
@@ -1,14 +0,0 @@
1
- /**
2
- * Recursively converts an element object to an HTML string.
3
- *
4
- * @param {Object} element - The element object representing an HTML element.
5
- * @param {string} element.name - The HTML tag name.
6
- * @param {Object} [element.attribs] - Attributes associated with the HTML element.
7
- * @param {Array|Object} [element.children] - Child elements or strings.
8
- * @returns {string} The HTML string representation of the element and its children.
9
- */
10
- export function elementToHtml(element: {
11
- name: string;
12
- attribs?: Object | undefined;
13
- children?: Object | any[] | undefined;
14
- }): string;
@@ -1,31 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.elementToHtml = elementToHtml;
7
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
8
- /**
9
- * Recursively converts an element object to an HTML string.
10
- *
11
- * @param {Object} element - The element object representing an HTML element.
12
- * @param {string} element.name - The HTML tag name.
13
- * @param {Object} [element.attribs] - Attributes associated with the HTML element.
14
- * @param {Array|Object} [element.children] - Child elements or strings.
15
- * @returns {string} The HTML string representation of the element and its children.
16
- */
17
- function elementToHtml(element) {
18
- var attributes = Object.keys(element.attribs || {}).map(function (key) {
19
- return "".concat(key, "=\"").concat(element.attribs[key], "\"");
20
- }).join(' ');
21
- var childrenHtml = (element.children || []).map(function (child) {
22
- if (typeof child.data === 'string') {
23
- return child.data;
24
- } else if (_typeof(child) === 'object') {
25
- return elementToHtml(child);
26
- } else {
27
- return '';
28
- }
29
- }).join('');
30
- return "<".concat(element.name, " ").concat(attributes, ">").concat(childrenHtml, "</").concat(element.name, ">");
31
- }