@blaze-cms/react-page-builder 0.118.0-alpha.0 → 0.118.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,44 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [0.118.0](https://github.com/thebyte9/blaze/compare/v0.118.0-alpha.3...v0.118.0) (2022-01-25)
7
+
8
+ **Note:** Version bump only for package @blaze-cms/react-page-builder
9
+
10
+
11
+
12
+
13
+
14
+ # [0.118.0-alpha.3](https://github.com/thebyte9/blaze/compare/v0.118.0-alpha.2...v0.118.0-alpha.3) (2022-01-24)
15
+
16
+ **Note:** Version bump only for package @blaze-cms/react-page-builder
17
+
18
+
19
+
20
+
21
+
22
+ # [0.118.0-alpha.2](https://github.com/thebyte9/blaze/compare/v0.118.0-alpha.1...v0.118.0-alpha.2) (2022-01-14)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * set correct funciton type for video image onload ([6df1060](https://github.com/thebyte9/blaze/commit/6df1060a7a3d0ba18f49d6d7e757ae1c79a7509d))
28
+
29
+
30
+
31
+
32
+
33
+ # [0.118.0-alpha.1](https://github.com/thebyte9/blaze/compare/v0.118.0-alpha.0...v0.118.0-alpha.1) (2022-01-14)
34
+
35
+
36
+ ### Bug Fixes
37
+
38
+ * added youtube facade lazy loading ([#3243](https://github.com/thebyte9/blaze/issues/3243)) ([7f2bef9](https://github.com/thebyte9/blaze/commit/7f2bef9269333aa7c248dce18e06a459ad7a3572))
39
+
40
+
41
+
42
+
43
+
6
44
  # [0.118.0-alpha.0](https://github.com/thebyte9/blaze/compare/v0.117.0...v0.118.0-alpha.0) (2022-01-13)
7
45
 
8
46
  **Note:** Version bump only for package @blaze-cms/react-page-builder
@@ -27,6 +27,8 @@ require("core-js/modules/es.array.concat.js");
27
27
 
28
28
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
29
29
 
30
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
31
+
30
32
  var _react = _interopRequireWildcard(require("react"));
31
33
 
32
34
  var _propTypes = _interopRequireDefault(require("prop-types"));
@@ -39,6 +41,8 @@ var _hooks = require("../../hooks");
39
41
 
40
42
  var _constants = require("../../constants");
41
43
 
44
+ var _excluded = ["children", "collapse", "modifier", "mobileMenuModifier", "mobileMenuChildrenModifier", "mobileIconAlignment", "mobileButtonModifier", "hamburgerIconModifier", "closeIconModifier"];
45
+
42
46
  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); }
43
47
 
44
48
  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; }
@@ -46,7 +50,14 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
46
50
  var Menu = function Menu(_ref) {
47
51
  var children = _ref.children,
48
52
  collapse = _ref.collapse,
49
- modifier = _ref.modifier;
53
+ modifier = _ref.modifier,
54
+ mobileMenuModifier = _ref.mobileMenuModifier,
55
+ mobileMenuChildrenModifier = _ref.mobileMenuChildrenModifier,
56
+ mobileIconAlignment = _ref.mobileIconAlignment,
57
+ mobileButtonModifier = _ref.mobileButtonModifier,
58
+ hamburgerIconModifier = _ref.hamburgerIconModifier,
59
+ closeIconModifier = _ref.closeIconModifier,
60
+ rest = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
50
61
  var isMobile = (0, _hooks.useCheckMobileScreen)();
51
62
 
52
63
  var _useState = (0, _react.useState)(false),
@@ -55,25 +66,47 @@ var Menu = function Menu(_ref) {
55
66
  setShowMobileMenu = _useState2[1];
56
67
 
57
68
  var shouldDisplayCollapsed = collapse && isMobile;
58
- var mobileButtonClass = shouldDisplayCollapsed && isMobile ? '' : _constants.HIDDEN;
69
+ var mobileButtonClass = shouldDisplayCollapsed && isMobile ? mobileButtonModifier : _constants.HIDDEN;
59
70
  var shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;
60
- var childrenDisplayClass = shouldDisplayChildren ? modifier : "".concat(modifier, " ").concat(_constants.HIDDEN);
61
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, collapse && /*#__PURE__*/_react["default"].createElement(_button["default"], {
71
+ var childrenDesktopModifier = shouldDisplayChildren && !isMobile ? modifier : "".concat(modifier, " ").concat(_constants.HIDDEN);
72
+ var childrenMobileModifier = shouldDisplayChildren && isMobile ? "".concat(mobileMenuChildrenModifier) : " ".concat(_constants.HIDDEN);
73
+ var isMobileMenuExpanded = showMobileMenu ? "".concat(mobileMenuModifier) : '';
74
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, collapse && /*#__PURE__*/_react["default"].createElement("div", {
75
+ className: "top-0 absolute z-50"
76
+ }, /*#__PURE__*/_react["default"].createElement("div", {
77
+ className: "flex w-screen z-50 justify-".concat(mobileIconAlignment, " ").concat(isMobileMenuExpanded)
78
+ }, /*#__PURE__*/_react["default"].createElement(_button["default"], {
62
79
  className: mobileButtonClass,
63
80
  onClick: function onClick() {
64
81
  return setShowMobileMenu(!showMobileMenu);
65
82
  }
66
- }, /*#__PURE__*/_react["default"].createElement("i", null, /*#__PURE__*/_react["default"].createElement(_md.MdMenu, null))), /*#__PURE__*/_react["default"].createElement("ul", {
67
- className: childrenDisplayClass
83
+ }, /*#__PURE__*/_react["default"].createElement("i", null, showMobileMenu ? /*#__PURE__*/_react["default"].createElement(_md.MdClose, {
84
+ className: closeIconModifier
85
+ }) : /*#__PURE__*/_react["default"].createElement(_md.MdMenu, {
86
+ className: hamburgerIconModifier
87
+ }))))), /*#__PURE__*/_react["default"].createElement("ul", {
88
+ className: isMobile ? childrenMobileModifier : childrenDesktopModifier
68
89
  }, children));
69
90
  };
70
91
 
71
92
  Menu.propTypes = {
72
93
  collapse: _propTypes["default"].bool.isRequired,
94
+ hamburgerIconModifier: _propTypes["default"].string,
95
+ closeIconModifier: _propTypes["default"].string,
96
+ mobileButtonModifier: _propTypes["default"].string,
97
+ mobileMenuModifier: _propTypes["default"].string,
98
+ mobileMenuChildrenModifier: _propTypes["default"].string,
73
99
  modifier: _propTypes["default"].string,
100
+ mobileIconAlignment: _propTypes["default"].string,
74
101
  children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node])
75
102
  };
76
103
  Menu.defaultProps = {
104
+ hamburgerIconModifier: '',
105
+ closeIconModifier: '',
106
+ mobileButtonModifier: '',
107
+ mobileIconAlignment: '',
108
+ mobileMenuModifier: '',
109
+ mobileMenuChildrenModifier: '',
77
110
  modifier: '',
78
111
  children: []
79
112
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Menu/Menu.js"],"names":["Menu","children","collapse","modifier","isMobile","showMobileMenu","setShowMobileMenu","shouldDisplayCollapsed","mobileButtonClass","HIDDEN","shouldDisplayChildren","childrenDisplayClass","propTypes","PropTypes","bool","isRequired","string","oneOfType","arrayOf","node","defaultProps"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,IAAI,GAAG,SAAPA,IAAO,OAAsC;AAAA,MAAnCC,QAAmC,QAAnCA,QAAmC;AAAA,MAAzBC,QAAyB,QAAzBA,QAAyB;AAAA,MAAfC,QAAe,QAAfA,QAAe;AACjD,MAAMC,QAAQ,GAAG,kCAAjB;;AACA,kBAA4C,qBAAS,KAAT,CAA5C;AAAA;AAAA,MAAOC,cAAP;AAAA,MAAuBC,iBAAvB;;AAEA,MAAMC,sBAAsB,GAAGL,QAAQ,IAAIE,QAA3C;AACA,MAAMI,iBAAiB,GAAGD,sBAAsB,IAAIH,QAA1B,GAAqC,EAArC,GAA0CK,iBAApE;AACA,MAAMC,qBAAqB,GAAGH,sBAAsB,GAAGF,cAAH,GAAoB,IAAxE;AACA,MAAMM,oBAAoB,GAAGD,qBAAqB,GAAGP,QAAH,aAAiBA,QAAjB,cAA6BM,iBAA7B,CAAlD;AAEA,sBACE,kEACGP,QAAQ,iBACP,gCAAC,kBAAD;AACE,IAAA,SAAS,EAAEM,iBADb;AAEE,IAAA,OAAO,EAAE;AAAA,aAAMF,iBAAiB,CAAC,CAACD,cAAF,CAAvB;AAAA;AAFX,kBAGE,wDACE,gCAAC,UAAD,OADF,CAHF,CAFJ,eAUE;AAAI,IAAA,SAAS,EAAEM;AAAf,KAAsCV,QAAtC,CAVF,CADF;AAcD,CAvBD;;AAyBAD,IAAI,CAACY,SAAL,GAAiB;AACfV,EAAAA,QAAQ,EAAEW,sBAAUC,IAAV,CAAeC,UADV;AAEfZ,EAAAA,QAAQ,EAAEU,sBAAUG,MAFL;AAGff,EAAAA,QAAQ,EAAEY,sBAAUI,SAAV,CAAoB,CAACJ,sBAAUK,OAAV,CAAkBL,sBAAUM,IAA5B,CAAD,EAAoCN,sBAAUM,IAA9C,CAApB;AAHK,CAAjB;AAMAnB,IAAI,CAACoB,YAAL,GAAoB;AAClBjB,EAAAA,QAAQ,EAAE,EADQ;AAElBF,EAAAA,QAAQ,EAAE;AAFQ,CAApB;eAKeD,I","sourcesContent":["import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport BlazeButton from '@blaze-react/button';\nimport { MdMenu } from 'react-icons/md';\nimport { useCheckMobileScreen } from '../../hooks';\nimport { HIDDEN } from '../../constants';\n\nconst Menu = ({ children, collapse, modifier }) => {\n const isMobile = useCheckMobileScreen();\n const [showMobileMenu, setShowMobileMenu] = useState(false);\n\n const shouldDisplayCollapsed = collapse && isMobile;\n const mobileButtonClass = shouldDisplayCollapsed && isMobile ? '' : HIDDEN;\n const shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;\n const childrenDisplayClass = shouldDisplayChildren ? modifier : `${modifier} ${HIDDEN}`;\n\n return (\n <>\n {collapse && (\n <BlazeButton\n className={mobileButtonClass}\n onClick={() => setShowMobileMenu(!showMobileMenu)}>\n <i>\n <MdMenu />\n </i>\n </BlazeButton>\n )}\n <ul className={childrenDisplayClass}>{children}</ul>\n </>\n );\n};\n\nMenu.propTypes = {\n collapse: PropTypes.bool.isRequired,\n modifier: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])\n};\n\nMenu.defaultProps = {\n modifier: '',\n children: []\n};\n\nexport default Menu;\n"],"file":"Menu.js"}
1
+ {"version":3,"sources":["../../../src/components/Menu/Menu.js"],"names":["Menu","children","collapse","modifier","mobileMenuModifier","mobileMenuChildrenModifier","mobileIconAlignment","mobileButtonModifier","hamburgerIconModifier","closeIconModifier","rest","isMobile","showMobileMenu","setShowMobileMenu","shouldDisplayCollapsed","mobileButtonClass","HIDDEN","shouldDisplayChildren","childrenDesktopModifier","childrenMobileModifier","isMobileMenuExpanded","propTypes","PropTypes","bool","isRequired","string","oneOfType","arrayOf","node","defaultProps"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport BlazeButton from '@blaze-react/button';\nimport { MdMenu, MdClose } from 'react-icons/md';\nimport { useCheckMobileScreen } from '../../hooks';\nimport { HIDDEN } from '../../constants';\n\nconst Menu = ({\n children,\n collapse,\n modifier,\n mobileMenuModifier,\n mobileMenuChildrenModifier,\n mobileIconAlignment,\n mobileButtonModifier,\n hamburgerIconModifier,\n closeIconModifier,\n ...rest\n}) => {\n const isMobile = useCheckMobileScreen();\n const [showMobileMenu, setShowMobileMenu] = useState(false);\n\n const shouldDisplayCollapsed = collapse && isMobile;\n const mobileButtonClass = shouldDisplayCollapsed && isMobile ? mobileButtonModifier : HIDDEN;\n const shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;\n const childrenDesktopModifier =\n shouldDisplayChildren && !isMobile ? modifier : `${modifier} ${HIDDEN}`;\n\n const childrenMobileModifier =\n shouldDisplayChildren && isMobile ? `${mobileMenuChildrenModifier}` : ` ${HIDDEN}`;\n\n const isMobileMenuExpanded = showMobileMenu ? `${mobileMenuModifier}` : '';\n\n return (\n <>\n {collapse && (\n <div className=\"top-0 absolute z-50\">\n <div\n className={`flex w-screen z-50 justify-${mobileIconAlignment} ${isMobileMenuExpanded}`}>\n <BlazeButton\n className={mobileButtonClass}\n onClick={() => setShowMobileMenu(!showMobileMenu)}>\n <i>\n {showMobileMenu ? (\n <MdClose className={closeIconModifier} />\n ) : (\n <MdMenu className={hamburgerIconModifier} />\n )}\n </i>\n </BlazeButton>\n </div>\n </div>\n )}\n <ul className={isMobile ? childrenMobileModifier : childrenDesktopModifier}>{children}</ul>\n </>\n );\n};\n\nMenu.propTypes = {\n collapse: PropTypes.bool.isRequired,\n hamburgerIconModifier: PropTypes.string,\n closeIconModifier: PropTypes.string,\n mobileButtonModifier: PropTypes.string,\n mobileMenuModifier: PropTypes.string,\n mobileMenuChildrenModifier: PropTypes.string,\n modifier: PropTypes.string,\n mobileIconAlignment: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])\n};\n\nMenu.defaultProps = {\n hamburgerIconModifier: '',\n closeIconModifier: '',\n mobileButtonModifier: '',\n mobileIconAlignment: '',\n mobileMenuModifier: '',\n mobileMenuChildrenModifier: '',\n modifier: '',\n children: []\n};\n\nexport default Menu;\n"],"file":"Menu.js"}
@@ -13,7 +13,7 @@ var _react = _interopRequireDefault(require("react"));
13
13
 
14
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
15
15
 
16
- var _reactYoutube = _interopRequireDefault(require("react-youtube"));
16
+ var _YoutubeEmbeded = _interopRequireDefault(require("./YoutubeEmbeded"));
17
17
 
18
18
  var _helpers = require("./helpers");
19
19
 
@@ -25,17 +25,14 @@ var YouTubeProvider = function YouTubeProvider(_ref) {
25
25
  loop = _ref.loop;
26
26
  var videoId = (0, _helpers.getYouTubeID)(url);
27
27
  if (!videoId) return null;
28
- var opts = {
29
- playerVars: {
30
- autoplay: (0, _helpers.booleanToNumber)(autoplay),
31
- loop: (0, _helpers.booleanToNumber)(loop)
32
- }
33
- };
34
- return /*#__PURE__*/_react["default"].createElement(_reactYoutube["default"], {
28
+ var params = "loop=".concat((0, _helpers.booleanToNumber)(loop));
29
+ return /*#__PURE__*/_react["default"].createElement("div", {
30
+ className: _constants.VIDEO_WRAPPER_CLASS_NAME
31
+ }, /*#__PURE__*/_react["default"].createElement(_YoutubeEmbeded["default"], {
32
+ autoplay: autoplay,
35
33
  videoId: videoId,
36
- containerClassName: _constants.VIDEO_WRAPPER_CLASS_NAME,
37
- opts: opts
38
- });
34
+ params: params
35
+ }));
39
36
  };
40
37
 
41
38
  YouTubeProvider.propTypes = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/Video/providers/YouTube/YouTubeProvider.js"],"names":["YouTubeProvider","url","autoplay","loop","videoId","opts","playerVars","VIDEO_WRAPPER_CLASS_NAME","propTypes","PropTypes","string","isRequired","bool","defaultProps"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,OAA6B;AAAA,MAA1BC,GAA0B,QAA1BA,GAA0B;AAAA,MAArBC,QAAqB,QAArBA,QAAqB;AAAA,MAAXC,IAAW,QAAXA,IAAW;AACnD,MAAMC,OAAO,GAAG,2BAAaH,GAAb,CAAhB;AAEA,MAAI,CAACG,OAAL,EAAc,OAAO,IAAP;AAEd,MAAMC,IAAI,GAAG;AACXC,IAAAA,UAAU,EAAE;AACVJ,MAAAA,QAAQ,EAAE,8BAAgBA,QAAhB,CADA;AAEVC,MAAAA,IAAI,EAAE,8BAAgBA,IAAhB;AAFI;AADD,GAAb;AAOA,sBAAO,gCAAC,wBAAD;AAAS,IAAA,OAAO,EAAEC,OAAlB;AAA2B,IAAA,kBAAkB,EAAEG,mCAA/C;AAAyE,IAAA,IAAI,EAAEF;AAA/E,IAAP;AACD,CAbD;;AAeAL,eAAe,CAACQ,SAAhB,GAA4B;AAC1BP,EAAAA,GAAG,EAAEQ,sBAAUC,MAAV,CAAiBC,UADI;AAE1BT,EAAAA,QAAQ,EAAEO,sBAAUG,IAFM;AAG1BT,EAAAA,IAAI,EAAEM,sBAAUG;AAHU,CAA5B;AAMAZ,eAAe,CAACa,YAAhB,GAA+B;AAC7BX,EAAAA,QAAQ,EAAE,KADmB;AAE7BC,EAAAA,IAAI,EAAE;AAFuB,CAA/B;eAKeH,e","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport YouTube from 'react-youtube';\nimport { getYouTubeID, booleanToNumber } from './helpers';\nimport { VIDEO_WRAPPER_CLASS_NAME } from '../../../../constants';\n\nconst YouTubeProvider = ({ url, autoplay, loop }) => {\n const videoId = getYouTubeID(url);\n\n if (!videoId) return null;\n\n const opts = {\n playerVars: {\n autoplay: booleanToNumber(autoplay),\n loop: booleanToNumber(loop)\n }\n };\n\n return <YouTube videoId={videoId} containerClassName={VIDEO_WRAPPER_CLASS_NAME} opts={opts} />;\n};\n\nYouTubeProvider.propTypes = {\n url: PropTypes.string.isRequired,\n autoplay: PropTypes.bool,\n loop: PropTypes.bool\n};\n\nYouTubeProvider.defaultProps = {\n autoplay: false,\n loop: false\n};\n\nexport default YouTubeProvider;\n"],"file":"YouTubeProvider.js"}
1
+ {"version":3,"sources":["../../../../../src/components/Video/providers/YouTube/YouTubeProvider.js"],"names":["YouTubeProvider","url","autoplay","loop","videoId","params","VIDEO_WRAPPER_CLASS_NAME","propTypes","PropTypes","string","isRequired","bool","defaultProps"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,OAA6B;AAAA,MAA1BC,GAA0B,QAA1BA,GAA0B;AAAA,MAArBC,QAAqB,QAArBA,QAAqB;AAAA,MAAXC,IAAW,QAAXA,IAAW;AACnD,MAAMC,OAAO,GAAG,2BAAaH,GAAb,CAAhB;AAEA,MAAI,CAACG,OAAL,EAAc,OAAO,IAAP;AACd,MAAMC,MAAM,kBAAW,8BAAgBF,IAAhB,CAAX,CAAZ;AAEA,sBACE;AAAK,IAAA,SAAS,EAAEG;AAAhB,kBACE,gCAAC,0BAAD;AAAgB,IAAA,QAAQ,EAAEJ,QAA1B;AAAoC,IAAA,OAAO,EAAEE,OAA7C;AAAsD,IAAA,MAAM,EAAEC;AAA9D,IADF,CADF;AAKD,CAXD;;AAaAL,eAAe,CAACO,SAAhB,GAA4B;AAC1BN,EAAAA,GAAG,EAAEO,sBAAUC,MAAV,CAAiBC,UADI;AAE1BR,EAAAA,QAAQ,EAAEM,sBAAUG,IAFM;AAG1BR,EAAAA,IAAI,EAAEK,sBAAUG;AAHU,CAA5B;AAMAX,eAAe,CAACY,YAAhB,GAA+B;AAC7BV,EAAAA,QAAQ,EAAE,KADmB;AAE7BC,EAAAA,IAAI,EAAE;AAFuB,CAA/B;eAKeH,e","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport YoutubeEmbeded from './YoutubeEmbeded';\nimport { getYouTubeID, booleanToNumber } from './helpers';\nimport { VIDEO_WRAPPER_CLASS_NAME } from '../../../../constants';\n\nconst YouTubeProvider = ({ url, autoplay, loop }) => {\n const videoId = getYouTubeID(url);\n\n if (!videoId) return null;\n const params = `loop=${booleanToNumber(loop)}`;\n\n return (\n <div className={VIDEO_WRAPPER_CLASS_NAME}>\n <YoutubeEmbeded autoplay={autoplay} videoId={videoId} params={params} />\n </div>\n );\n};\n\nYouTubeProvider.propTypes = {\n url: PropTypes.string.isRequired,\n autoplay: PropTypes.bool,\n loop: PropTypes.bool\n};\n\nYouTubeProvider.defaultProps = {\n autoplay: false,\n loop: false\n};\n\nexport default YouTubeProvider;\n"],"file":"YouTubeProvider.js"}
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.array.iterator.js");
4
+
5
+ require("core-js/modules/es.object.to-string.js");
6
+
7
+ require("core-js/modules/es.string.iterator.js");
8
+
9
+ require("core-js/modules/es.weak-map.js");
10
+
11
+ require("core-js/modules/web.dom-collections.iterator.js");
12
+
13
+ require("core-js/modules/es.object.define-property.js");
14
+
15
+ require("core-js/modules/es.object.get-own-property-descriptor.js");
16
+
17
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
18
+
19
+ var _typeof = require("@babel/runtime/helpers/typeof");
20
+
21
+ Object.defineProperty(exports, "__esModule", {
22
+ value: true
23
+ });
24
+ exports["default"] = void 0;
25
+
26
+ require("core-js/modules/es.array.concat.js");
27
+
28
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
29
+
30
+ var _react = _interopRequireWildcard(require("react"));
31
+
32
+ var _propTypes = _interopRequireDefault(require("prop-types"));
33
+
34
+ var _customHooks = require("@blaze-react/utils/lib/customHooks");
35
+
36
+ var _constants = require("../../../../constants");
37
+
38
+ 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); }
39
+
40
+ 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; }
41
+
42
+ var YT_HQ_FORMAT = 'hqdefault';
43
+ var YT_IMAGE_URL = 'https://i.ytimg.com';
44
+
45
+ var YoutubeEmbeded = function YoutubeEmbeded(_ref) {
46
+ var autoplay = _ref.autoplay,
47
+ videoId = _ref.videoId,
48
+ playlistCoverId = _ref.playlistCoverId,
49
+ videoTitle = _ref.videoTitle,
50
+ poster = _ref.poster,
51
+ videoParams = _ref.videoParams,
52
+ announce = _ref.announce,
53
+ noCookie = _ref.noCookie,
54
+ webp = _ref.webp,
55
+ playlist = _ref.playlist,
56
+ onIframeAdded = _ref.onIframeAdded,
57
+ muted = _ref.muted,
58
+ adNetwork = _ref.adNetwork,
59
+ iframeClass = _ref.iframeClass,
60
+ priority = _ref.priority;
61
+
62
+ var _useInView = (0, _customHooks.useInView)(_constants.IN_VIEW_CONFIG),
63
+ _useInView2 = (0, _slicedToArray2["default"])(_useInView, 2),
64
+ isIntersecting = _useInView2[0],
65
+ outerRef = _useInView2[1];
66
+
67
+ var _useState = (0, _react.useState)(false),
68
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
69
+ preconnected = _useState2[0],
70
+ setPreconnected = _useState2[1];
71
+
72
+ var _useState3 = (0, _react.useState)(!!autoplay),
73
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
74
+ renderIframe = _useState4[0],
75
+ setRenderIframe = _useState4[1];
76
+
77
+ var _useState5 = (0, _react.useState)({
78
+ imageSize: poster,
79
+ displayImage: priority
80
+ }),
81
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
82
+ _useState6$ = _useState6[0],
83
+ imageSize = _useState6$.imageSize,
84
+ displayImage = _useState6$.displayImage,
85
+ setImageDetails = _useState6[1];
86
+
87
+ var encodedId = encodeURIComponent(videoId);
88
+ var videoPlaylisCovertId = typeof playlistCoverId === 'string' ? encodeURIComponent(playlistCoverId) : null;
89
+ var paramsImp = videoParams ? "&".concat(videoParams) : '';
90
+ var format = webp ? 'webp' : 'jpg';
91
+ var vi = webp ? 'vi_webp' : 'vi';
92
+ var posterUrl = !playlist ? "".concat(YT_IMAGE_URL, "/").concat(vi, "/").concat(encodedId, "/").concat(imageSize, ".").concat(format) : "".concat(YT_IMAGE_URL, "/").concat(vi, "/").concat(videoPlaylisCovertId, "/").concat(imageSize, ".").concat(format);
93
+ var ytUrl = noCookie ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com';
94
+ var mutedValue = muted ? '&mute=1' : '';
95
+ var iframeSrc = !playlist ? "".concat(ytUrl, "/embed/").concat(encodedId, "?autoplay=1").concat(mutedValue).concat(paramsImp) : "".concat(ytUrl, "/embed/videoseries?autoplay=1").concat(mutedValue, "&list=").concat(encodedId).concat(paramsImp);
96
+ var parsedWrapperClassname = "yt-facade ".concat(renderIframe ? 'yt-activated' : '');
97
+ (0, _react.useEffect)(function () {
98
+ if (!priority && !isIntersecting || imageSize === YT_HQ_FORMAT) return;
99
+ var img = new Image(); // eslint-disable-next-line func-names
100
+
101
+ img.onload = function () {
102
+ var newImageSize = imageSize;
103
+ if (this && this.width === 120) newImageSize = YT_HQ_FORMAT;
104
+ setImageDetails({
105
+ imageSize: newImageSize,
106
+ displayImage: true
107
+ });
108
+ };
109
+
110
+ img.src = posterUrl;
111
+ }, [imageSize, isIntersecting, posterUrl, priority]);
112
+
113
+ var warmConnections = function warmConnections() {
114
+ if (preconnected) return;
115
+ setPreconnected(true);
116
+ };
117
+
118
+ var addIframe = function addIframe() {
119
+ if (renderIframe) return;
120
+ onIframeAdded();
121
+ setRenderIframe(true);
122
+ };
123
+
124
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, preconnected && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("link", {
125
+ rel: "preconnect",
126
+ href: YT_IMAGE_URL
127
+ }), /*#__PURE__*/_react["default"].createElement("link", {
128
+ rel: "preconnect",
129
+ href: ytUrl
130
+ }), /*#__PURE__*/_react["default"].createElement("link", {
131
+ rel: "preconnect",
132
+ href: "https://www.google.com"
133
+ }), adNetwork && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("link", {
134
+ rel: "preconnect",
135
+ href: "https://static.doubleclick.net"
136
+ }), /*#__PURE__*/_react["default"].createElement("link", {
137
+ rel: "preconnect",
138
+ href: "https://googleads.g.doubleclick.net"
139
+ }))), /*#__PURE__*/_react["default"].createElement("div", {
140
+ ref: outerRef,
141
+ role: "button",
142
+ onPointerOver: warmConnections,
143
+ onClick: addIframe,
144
+ className: parsedWrapperClassname,
145
+ "data-title": videoTitle,
146
+ style: {
147
+ backgroundImage: "url(".concat(displayImage ? posterUrl : '', ")")
148
+ }
149
+ }, /*#__PURE__*/_react["default"].createElement("div", {
150
+ type: "button",
151
+ className: "yt-facade-button-wrapper",
152
+ "aria-label": "".concat(announce, " ").concat(videoTitle)
153
+ }, /*#__PURE__*/_react["default"].createElement("div", {
154
+ className: "yt-facade-button"
155
+ })), renderIframe && /*#__PURE__*/_react["default"].createElement("iframe", {
156
+ className: iframeClass,
157
+ title: videoTitle,
158
+ allow: "accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",
159
+ allowFullScreen: true,
160
+ src: iframeSrc
161
+ })));
162
+ };
163
+
164
+ YoutubeEmbeded.propTypes = {
165
+ priority: _propTypes["default"].bool,
166
+ onIframeAdded: _propTypes["default"].func,
167
+ adNetwork: _propTypes["default"].bool,
168
+ autoplay: _propTypes["default"].bool,
169
+ playlist: _propTypes["default"].bool,
170
+ muted: _propTypes["default"].bool,
171
+ webp: _propTypes["default"].bool,
172
+ noCookie: _propTypes["default"].bool,
173
+ videoId: _propTypes["default"].string,
174
+ iframeClass: _propTypes["default"].string,
175
+ poster: _propTypes["default"].string,
176
+ announce: _propTypes["default"].string,
177
+ playlistCoverId: _propTypes["default"].string,
178
+ videoParams: _propTypes["default"].string,
179
+ videoTitle: _propTypes["default"].string
180
+ };
181
+ YoutubeEmbeded.defaultProps = {
182
+ priority: true,
183
+ onIframeAdded: function onIframeAdded() {},
184
+ adNetwork: false,
185
+ autoplay: false,
186
+ playlist: false,
187
+ muted: false,
188
+ webp: false,
189
+ noCookie: false,
190
+ iframeClass: '',
191
+ poster: 'sddefault',
192
+ announce: 'Watch',
193
+ videoId: '',
194
+ playlistCoverId: '',
195
+ videoParams: '',
196
+ videoTitle: ''
197
+ };
198
+ var _default = YoutubeEmbeded;
199
+ exports["default"] = _default;
200
+ //# sourceMappingURL=YoutubeEmbeded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/Video/providers/YouTube/YoutubeEmbeded.js"],"names":["YT_HQ_FORMAT","YT_IMAGE_URL","YoutubeEmbeded","autoplay","videoId","playlistCoverId","videoTitle","poster","videoParams","announce","noCookie","webp","playlist","onIframeAdded","muted","adNetwork","iframeClass","priority","IN_VIEW_CONFIG","isIntersecting","outerRef","preconnected","setPreconnected","renderIframe","setRenderIframe","imageSize","displayImage","setImageDetails","encodedId","encodeURIComponent","videoPlaylisCovertId","paramsImp","format","vi","posterUrl","ytUrl","mutedValue","iframeSrc","parsedWrapperClassname","img","Image","onload","newImageSize","width","src","warmConnections","addIframe","backgroundImage","propTypes","PropTypes","bool","func","string","defaultProps"],"mappings":"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","sourcesContent":["import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useInView } from '@blaze-react/utils/lib/customHooks';\nimport { IN_VIEW_CONFIG } from '../../../../constants';\n\nconst YT_HQ_FORMAT = 'hqdefault';\nconst YT_IMAGE_URL = 'https://i.ytimg.com';\n\nconst YoutubeEmbeded = ({\n autoplay,\n videoId,\n playlistCoverId,\n videoTitle,\n poster,\n videoParams,\n announce,\n noCookie,\n webp,\n playlist,\n onIframeAdded,\n muted,\n adNetwork,\n iframeClass,\n priority\n}) => {\n const [isIntersecting, outerRef] = useInView(IN_VIEW_CONFIG);\n const [preconnected, setPreconnected] = useState(false);\n const [renderIframe, setRenderIframe] = useState(!!autoplay);\n const [{ imageSize, displayImage }, setImageDetails] = useState({\n imageSize: poster,\n displayImage: priority\n });\n\n const encodedId = encodeURIComponent(videoId);\n const videoPlaylisCovertId =\n typeof playlistCoverId === 'string' ? encodeURIComponent(playlistCoverId) : null;\n const paramsImp = videoParams ? `&${videoParams}` : '';\n const format = webp ? 'webp' : 'jpg';\n const vi = webp ? 'vi_webp' : 'vi';\n const posterUrl = !playlist\n ? `${YT_IMAGE_URL}/${vi}/${encodedId}/${imageSize}.${format}`\n : `${YT_IMAGE_URL}/${vi}/${videoPlaylisCovertId}/${imageSize}.${format}`;\n const ytUrl = noCookie ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com';\n\n const mutedValue = muted ? '&mute=1' : '';\n const iframeSrc = !playlist\n ? `${ytUrl}/embed/${encodedId}?autoplay=1${mutedValue}${paramsImp}`\n : `${ytUrl}/embed/videoseries?autoplay=1${mutedValue}&list=${encodedId}${paramsImp}`;\n const parsedWrapperClassname = `yt-facade ${renderIframe ? 'yt-activated' : ''}`;\n\n useEffect(\n () => {\n if ((!priority && !isIntersecting) || imageSize === YT_HQ_FORMAT) return;\n\n const img = new Image();\n // eslint-disable-next-line func-names\n img.onload = function() {\n let newImageSize = imageSize;\n if (this && this.width === 120) newImageSize = YT_HQ_FORMAT;\n setImageDetails({ imageSize: newImageSize, displayImage: true });\n };\n\n img.src = posterUrl;\n },\n [imageSize, isIntersecting, posterUrl, priority]\n );\n\n const warmConnections = () => {\n if (preconnected) return;\n setPreconnected(true);\n };\n\n const addIframe = () => {\n if (renderIframe) return;\n onIframeAdded();\n setRenderIframe(true);\n };\n\n return (\n <>\n {preconnected && (\n <>\n <link rel=\"preconnect\" href={YT_IMAGE_URL} />\n <link rel=\"preconnect\" href={ytUrl} />\n <link rel=\"preconnect\" href=\"https://www.google.com\" />\n {adNetwork && (\n <>\n <link rel=\"preconnect\" href=\"https://static.doubleclick.net\" />\n <link rel=\"preconnect\" href=\"https://googleads.g.doubleclick.net\" />\n </>\n )}\n </>\n )}\n <div\n ref={outerRef}\n role=\"button\"\n onPointerOver={warmConnections}\n onClick={addIframe}\n className={parsedWrapperClassname}\n data-title={videoTitle}\n style={{\n backgroundImage: `url(${displayImage ? posterUrl : ''})`\n }}>\n <div\n type=\"button\"\n className=\"yt-facade-button-wrapper\"\n aria-label={`${announce} ${videoTitle}`}>\n <div className=\"yt-facade-button\" />\n </div>\n {renderIframe && (\n <iframe\n className={iframeClass}\n title={videoTitle}\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={iframeSrc}\n />\n )}\n </div>\n </>\n );\n};\n\nYoutubeEmbeded.propTypes = {\n priority: PropTypes.bool,\n onIframeAdded: PropTypes.func,\n adNetwork: PropTypes.bool,\n autoplay: PropTypes.bool,\n playlist: PropTypes.bool,\n muted: PropTypes.bool,\n webp: PropTypes.bool,\n noCookie: PropTypes.bool,\n videoId: PropTypes.string,\n iframeClass: PropTypes.string,\n poster: PropTypes.string,\n announce: PropTypes.string,\n playlistCoverId: PropTypes.string,\n videoParams: PropTypes.string,\n videoTitle: PropTypes.string\n};\n\nYoutubeEmbeded.defaultProps = {\n priority: true,\n onIframeAdded: () => {},\n adNetwork: false,\n autoplay: false,\n playlist: false,\n muted: false,\n webp: false,\n noCookie: false,\n iframeClass: '',\n poster: 'sddefault',\n announce: 'Watch',\n videoId: '',\n playlistCoverId: '',\n videoParams: '',\n videoTitle: ''\n};\n\nexport default YoutubeEmbeded;\n"],"file":"YoutubeEmbeded.js"}
@@ -1,35 +1,68 @@
1
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
2
+ const _excluded = ["children", "collapse", "modifier", "mobileMenuModifier", "mobileMenuChildrenModifier", "mobileIconAlignment", "mobileButtonModifier", "hamburgerIconModifier", "closeIconModifier"];
1
3
  import React, { useState } from 'react';
2
4
  import PropTypes from 'prop-types';
3
5
  import BlazeButton from '@blaze-react/button';
4
- import { MdMenu } from 'react-icons/md';
6
+ import { MdMenu, MdClose } from 'react-icons/md';
5
7
  import { useCheckMobileScreen } from '../../hooks';
6
8
  import { HIDDEN } from '../../constants';
7
9
 
8
- const Menu = ({
9
- children,
10
- collapse,
11
- modifier
12
- }) => {
10
+ const Menu = _ref => {
11
+ let {
12
+ children,
13
+ collapse,
14
+ modifier,
15
+ mobileMenuModifier,
16
+ mobileMenuChildrenModifier,
17
+ mobileIconAlignment,
18
+ mobileButtonModifier,
19
+ hamburgerIconModifier,
20
+ closeIconModifier
21
+ } = _ref,
22
+ rest = _objectWithoutProperties(_ref, _excluded);
23
+
13
24
  const isMobile = useCheckMobileScreen();
14
25
  const [showMobileMenu, setShowMobileMenu] = useState(false);
15
26
  const shouldDisplayCollapsed = collapse && isMobile;
16
- const mobileButtonClass = shouldDisplayCollapsed && isMobile ? '' : HIDDEN;
27
+ const mobileButtonClass = shouldDisplayCollapsed && isMobile ? mobileButtonModifier : HIDDEN;
17
28
  const shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;
18
- const childrenDisplayClass = shouldDisplayChildren ? modifier : `${modifier} ${HIDDEN}`;
19
- return /*#__PURE__*/React.createElement(React.Fragment, null, collapse && /*#__PURE__*/React.createElement(BlazeButton, {
29
+ const childrenDesktopModifier = shouldDisplayChildren && !isMobile ? modifier : `${modifier} ${HIDDEN}`;
30
+ const childrenMobileModifier = shouldDisplayChildren && isMobile ? `${mobileMenuChildrenModifier}` : ` ${HIDDEN}`;
31
+ const isMobileMenuExpanded = showMobileMenu ? `${mobileMenuModifier}` : '';
32
+ return /*#__PURE__*/React.createElement(React.Fragment, null, collapse && /*#__PURE__*/React.createElement("div", {
33
+ className: "top-0 absolute z-50"
34
+ }, /*#__PURE__*/React.createElement("div", {
35
+ className: `flex w-screen z-50 justify-${mobileIconAlignment} ${isMobileMenuExpanded}`
36
+ }, /*#__PURE__*/React.createElement(BlazeButton, {
20
37
  className: mobileButtonClass,
21
38
  onClick: () => setShowMobileMenu(!showMobileMenu)
22
- }, /*#__PURE__*/React.createElement("i", null, /*#__PURE__*/React.createElement(MdMenu, null))), /*#__PURE__*/React.createElement("ul", {
23
- className: childrenDisplayClass
39
+ }, /*#__PURE__*/React.createElement("i", null, showMobileMenu ? /*#__PURE__*/React.createElement(MdClose, {
40
+ className: closeIconModifier
41
+ }) : /*#__PURE__*/React.createElement(MdMenu, {
42
+ className: hamburgerIconModifier
43
+ }))))), /*#__PURE__*/React.createElement("ul", {
44
+ className: isMobile ? childrenMobileModifier : childrenDesktopModifier
24
45
  }, children));
25
46
  };
26
47
 
27
48
  Menu.propTypes = {
28
49
  collapse: PropTypes.bool.isRequired,
50
+ hamburgerIconModifier: PropTypes.string,
51
+ closeIconModifier: PropTypes.string,
52
+ mobileButtonModifier: PropTypes.string,
53
+ mobileMenuModifier: PropTypes.string,
54
+ mobileMenuChildrenModifier: PropTypes.string,
29
55
  modifier: PropTypes.string,
56
+ mobileIconAlignment: PropTypes.string,
30
57
  children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])
31
58
  };
32
59
  Menu.defaultProps = {
60
+ hamburgerIconModifier: '',
61
+ closeIconModifier: '',
62
+ mobileButtonModifier: '',
63
+ mobileIconAlignment: '',
64
+ mobileMenuModifier: '',
65
+ mobileMenuChildrenModifier: '',
33
66
  modifier: '',
34
67
  children: []
35
68
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Menu/Menu.js"],"names":["React","useState","PropTypes","BlazeButton","MdMenu","useCheckMobileScreen","HIDDEN","Menu","children","collapse","modifier","isMobile","showMobileMenu","setShowMobileMenu","shouldDisplayCollapsed","mobileButtonClass","shouldDisplayChildren","childrenDisplayClass","propTypes","bool","isRequired","string","oneOfType","arrayOf","node","defaultProps"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,QAAhB,QAAgC,OAAhC;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,WAAP,MAAwB,qBAAxB;AACA,SAASC,MAAT,QAAuB,gBAAvB;AACA,SAASC,oBAAT,QAAqC,aAArC;AACA,SAASC,MAAT,QAAuB,iBAAvB;;AAEA,MAAMC,IAAI,GAAG,CAAC;AAAEC,EAAAA,QAAF;AAAYC,EAAAA,QAAZ;AAAsBC,EAAAA;AAAtB,CAAD,KAAsC;AACjD,QAAMC,QAAQ,GAAGN,oBAAoB,EAArC;AACA,QAAM,CAACO,cAAD,EAAiBC,iBAAjB,IAAsCZ,QAAQ,CAAC,KAAD,CAApD;AAEA,QAAMa,sBAAsB,GAAGL,QAAQ,IAAIE,QAA3C;AACA,QAAMI,iBAAiB,GAAGD,sBAAsB,IAAIH,QAA1B,GAAqC,EAArC,GAA0CL,MAApE;AACA,QAAMU,qBAAqB,GAAGF,sBAAsB,GAAGF,cAAH,GAAoB,IAAxE;AACA,QAAMK,oBAAoB,GAAGD,qBAAqB,GAAGN,QAAH,GAAe,GAAEA,QAAS,IAAGJ,MAAO,EAAtF;AAEA,sBACE,0CACGG,QAAQ,iBACP,oBAAC,WAAD;AACE,IAAA,SAAS,EAAEM,iBADb;AAEE,IAAA,OAAO,EAAE,MAAMF,iBAAiB,CAAC,CAACD,cAAF;AAFlC,kBAGE,4CACE,oBAAC,MAAD,OADF,CAHF,CAFJ,eAUE;AAAI,IAAA,SAAS,EAAEK;AAAf,KAAsCT,QAAtC,CAVF,CADF;AAcD,CAvBD;;AAyBAD,IAAI,CAACW,SAAL,GAAiB;AACfT,EAAAA,QAAQ,EAAEP,SAAS,CAACiB,IAAV,CAAeC,UADV;AAEfV,EAAAA,QAAQ,EAAER,SAAS,CAACmB,MAFL;AAGfb,EAAAA,QAAQ,EAAEN,SAAS,CAACoB,SAAV,CAAoB,CAACpB,SAAS,CAACqB,OAAV,CAAkBrB,SAAS,CAACsB,IAA5B,CAAD,EAAoCtB,SAAS,CAACsB,IAA9C,CAApB;AAHK,CAAjB;AAMAjB,IAAI,CAACkB,YAAL,GAAoB;AAClBf,EAAAA,QAAQ,EAAE,EADQ;AAElBF,EAAAA,QAAQ,EAAE;AAFQ,CAApB;AAKA,eAAeD,IAAf","sourcesContent":["import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport BlazeButton from '@blaze-react/button';\nimport { MdMenu } from 'react-icons/md';\nimport { useCheckMobileScreen } from '../../hooks';\nimport { HIDDEN } from '../../constants';\n\nconst Menu = ({ children, collapse, modifier }) => {\n const isMobile = useCheckMobileScreen();\n const [showMobileMenu, setShowMobileMenu] = useState(false);\n\n const shouldDisplayCollapsed = collapse && isMobile;\n const mobileButtonClass = shouldDisplayCollapsed && isMobile ? '' : HIDDEN;\n const shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;\n const childrenDisplayClass = shouldDisplayChildren ? modifier : `${modifier} ${HIDDEN}`;\n\n return (\n <>\n {collapse && (\n <BlazeButton\n className={mobileButtonClass}\n onClick={() => setShowMobileMenu(!showMobileMenu)}>\n <i>\n <MdMenu />\n </i>\n </BlazeButton>\n )}\n <ul className={childrenDisplayClass}>{children}</ul>\n </>\n );\n};\n\nMenu.propTypes = {\n collapse: PropTypes.bool.isRequired,\n modifier: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])\n};\n\nMenu.defaultProps = {\n modifier: '',\n children: []\n};\n\nexport default Menu;\n"],"file":"Menu.js"}
1
+ {"version":3,"sources":["../../../src/components/Menu/Menu.js"],"names":["React","useState","PropTypes","BlazeButton","MdMenu","MdClose","useCheckMobileScreen","HIDDEN","Menu","children","collapse","modifier","mobileMenuModifier","mobileMenuChildrenModifier","mobileIconAlignment","mobileButtonModifier","hamburgerIconModifier","closeIconModifier","rest","isMobile","showMobileMenu","setShowMobileMenu","shouldDisplayCollapsed","mobileButtonClass","shouldDisplayChildren","childrenDesktopModifier","childrenMobileModifier","isMobileMenuExpanded","propTypes","bool","isRequired","string","oneOfType","arrayOf","node","defaultProps"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport BlazeButton from '@blaze-react/button';\nimport { MdMenu, MdClose } from 'react-icons/md';\nimport { useCheckMobileScreen } from '../../hooks';\nimport { HIDDEN } from '../../constants';\n\nconst Menu = ({\n children,\n collapse,\n modifier,\n mobileMenuModifier,\n mobileMenuChildrenModifier,\n mobileIconAlignment,\n mobileButtonModifier,\n hamburgerIconModifier,\n closeIconModifier,\n ...rest\n}) => {\n const isMobile = useCheckMobileScreen();\n const [showMobileMenu, setShowMobileMenu] = useState(false);\n\n const shouldDisplayCollapsed = collapse && isMobile;\n const mobileButtonClass = shouldDisplayCollapsed && isMobile ? mobileButtonModifier : HIDDEN;\n const shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;\n const childrenDesktopModifier =\n shouldDisplayChildren && !isMobile ? modifier : `${modifier} ${HIDDEN}`;\n\n const childrenMobileModifier =\n shouldDisplayChildren && isMobile ? `${mobileMenuChildrenModifier}` : ` ${HIDDEN}`;\n\n const isMobileMenuExpanded = showMobileMenu ? `${mobileMenuModifier}` : '';\n\n return (\n <>\n {collapse && (\n <div className=\"top-0 absolute z-50\">\n <div\n className={`flex w-screen z-50 justify-${mobileIconAlignment} ${isMobileMenuExpanded}`}>\n <BlazeButton\n className={mobileButtonClass}\n onClick={() => setShowMobileMenu(!showMobileMenu)}>\n <i>\n {showMobileMenu ? (\n <MdClose className={closeIconModifier} />\n ) : (\n <MdMenu className={hamburgerIconModifier} />\n )}\n </i>\n </BlazeButton>\n </div>\n </div>\n )}\n <ul className={isMobile ? childrenMobileModifier : childrenDesktopModifier}>{children}</ul>\n </>\n );\n};\n\nMenu.propTypes = {\n collapse: PropTypes.bool.isRequired,\n hamburgerIconModifier: PropTypes.string,\n closeIconModifier: PropTypes.string,\n mobileButtonModifier: PropTypes.string,\n mobileMenuModifier: PropTypes.string,\n mobileMenuChildrenModifier: PropTypes.string,\n modifier: PropTypes.string,\n mobileIconAlignment: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])\n};\n\nMenu.defaultProps = {\n hamburgerIconModifier: '',\n closeIconModifier: '',\n mobileButtonModifier: '',\n mobileIconAlignment: '',\n mobileMenuModifier: '',\n mobileMenuChildrenModifier: '',\n modifier: '',\n children: []\n};\n\nexport default Menu;\n"],"file":"Menu.js"}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import YouTube from 'react-youtube';
3
+ import YoutubeEmbeded from './YoutubeEmbeded';
4
4
  import { getYouTubeID, booleanToNumber } from './helpers';
5
5
  import { VIDEO_WRAPPER_CLASS_NAME } from '../../../../constants';
6
6
 
@@ -11,17 +11,14 @@ const YouTubeProvider = ({
11
11
  }) => {
12
12
  const videoId = getYouTubeID(url);
13
13
  if (!videoId) return null;
14
- const opts = {
15
- playerVars: {
16
- autoplay: booleanToNumber(autoplay),
17
- loop: booleanToNumber(loop)
18
- }
19
- };
20
- return /*#__PURE__*/React.createElement(YouTube, {
14
+ const params = `loop=${booleanToNumber(loop)}`;
15
+ return /*#__PURE__*/React.createElement("div", {
16
+ className: VIDEO_WRAPPER_CLASS_NAME
17
+ }, /*#__PURE__*/React.createElement(YoutubeEmbeded, {
18
+ autoplay: autoplay,
21
19
  videoId: videoId,
22
- containerClassName: VIDEO_WRAPPER_CLASS_NAME,
23
- opts: opts
24
- });
20
+ params: params
21
+ }));
25
22
  };
26
23
 
27
24
  YouTubeProvider.propTypes = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/Video/providers/YouTube/YouTubeProvider.js"],"names":["React","PropTypes","YouTube","getYouTubeID","booleanToNumber","VIDEO_WRAPPER_CLASS_NAME","YouTubeProvider","url","autoplay","loop","videoId","opts","playerVars","propTypes","string","isRequired","bool","defaultProps"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,OAAP,MAAoB,eAApB;AACA,SAASC,YAAT,EAAuBC,eAAvB,QAA8C,WAA9C;AACA,SAASC,wBAAT,QAAyC,uBAAzC;;AAEA,MAAMC,eAAe,GAAG,CAAC;AAAEC,EAAAA,GAAF;AAAOC,EAAAA,QAAP;AAAiBC,EAAAA;AAAjB,CAAD,KAA6B;AACnD,QAAMC,OAAO,GAAGP,YAAY,CAACI,GAAD,CAA5B;AAEA,MAAI,CAACG,OAAL,EAAc,OAAO,IAAP;AAEd,QAAMC,IAAI,GAAG;AACXC,IAAAA,UAAU,EAAE;AACVJ,MAAAA,QAAQ,EAAEJ,eAAe,CAACI,QAAD,CADf;AAEVC,MAAAA,IAAI,EAAEL,eAAe,CAACK,IAAD;AAFX;AADD,GAAb;AAOA,sBAAO,oBAAC,OAAD;AAAS,IAAA,OAAO,EAAEC,OAAlB;AAA2B,IAAA,kBAAkB,EAAEL,wBAA/C;AAAyE,IAAA,IAAI,EAAEM;AAA/E,IAAP;AACD,CAbD;;AAeAL,eAAe,CAACO,SAAhB,GAA4B;AAC1BN,EAAAA,GAAG,EAAEN,SAAS,CAACa,MAAV,CAAiBC,UADI;AAE1BP,EAAAA,QAAQ,EAAEP,SAAS,CAACe,IAFM;AAG1BP,EAAAA,IAAI,EAAER,SAAS,CAACe;AAHU,CAA5B;AAMAV,eAAe,CAACW,YAAhB,GAA+B;AAC7BT,EAAAA,QAAQ,EAAE,KADmB;AAE7BC,EAAAA,IAAI,EAAE;AAFuB,CAA/B;AAKA,eAAeH,eAAf","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport YouTube from 'react-youtube';\nimport { getYouTubeID, booleanToNumber } from './helpers';\nimport { VIDEO_WRAPPER_CLASS_NAME } from '../../../../constants';\n\nconst YouTubeProvider = ({ url, autoplay, loop }) => {\n const videoId = getYouTubeID(url);\n\n if (!videoId) return null;\n\n const opts = {\n playerVars: {\n autoplay: booleanToNumber(autoplay),\n loop: booleanToNumber(loop)\n }\n };\n\n return <YouTube videoId={videoId} containerClassName={VIDEO_WRAPPER_CLASS_NAME} opts={opts} />;\n};\n\nYouTubeProvider.propTypes = {\n url: PropTypes.string.isRequired,\n autoplay: PropTypes.bool,\n loop: PropTypes.bool\n};\n\nYouTubeProvider.defaultProps = {\n autoplay: false,\n loop: false\n};\n\nexport default YouTubeProvider;\n"],"file":"YouTubeProvider.js"}
1
+ {"version":3,"sources":["../../../../../src/components/Video/providers/YouTube/YouTubeProvider.js"],"names":["React","PropTypes","YoutubeEmbeded","getYouTubeID","booleanToNumber","VIDEO_WRAPPER_CLASS_NAME","YouTubeProvider","url","autoplay","loop","videoId","params","propTypes","string","isRequired","bool","defaultProps"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,cAAP,MAA2B,kBAA3B;AACA,SAASC,YAAT,EAAuBC,eAAvB,QAA8C,WAA9C;AACA,SAASC,wBAAT,QAAyC,uBAAzC;;AAEA,MAAMC,eAAe,GAAG,CAAC;AAAEC,EAAAA,GAAF;AAAOC,EAAAA,QAAP;AAAiBC,EAAAA;AAAjB,CAAD,KAA6B;AACnD,QAAMC,OAAO,GAAGP,YAAY,CAACI,GAAD,CAA5B;AAEA,MAAI,CAACG,OAAL,EAAc,OAAO,IAAP;AACd,QAAMC,MAAM,GAAI,QAAOP,eAAe,CAACK,IAAD,CAAO,EAA7C;AAEA,sBACE;AAAK,IAAA,SAAS,EAAEJ;AAAhB,kBACE,oBAAC,cAAD;AAAgB,IAAA,QAAQ,EAAEG,QAA1B;AAAoC,IAAA,OAAO,EAAEE,OAA7C;AAAsD,IAAA,MAAM,EAAEC;AAA9D,IADF,CADF;AAKD,CAXD;;AAaAL,eAAe,CAACM,SAAhB,GAA4B;AAC1BL,EAAAA,GAAG,EAAEN,SAAS,CAACY,MAAV,CAAiBC,UADI;AAE1BN,EAAAA,QAAQ,EAAEP,SAAS,CAACc,IAFM;AAG1BN,EAAAA,IAAI,EAAER,SAAS,CAACc;AAHU,CAA5B;AAMAT,eAAe,CAACU,YAAhB,GAA+B;AAC7BR,EAAAA,QAAQ,EAAE,KADmB;AAE7BC,EAAAA,IAAI,EAAE;AAFuB,CAA/B;AAKA,eAAeH,eAAf","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport YoutubeEmbeded from './YoutubeEmbeded';\nimport { getYouTubeID, booleanToNumber } from './helpers';\nimport { VIDEO_WRAPPER_CLASS_NAME } from '../../../../constants';\n\nconst YouTubeProvider = ({ url, autoplay, loop }) => {\n const videoId = getYouTubeID(url);\n\n if (!videoId) return null;\n const params = `loop=${booleanToNumber(loop)}`;\n\n return (\n <div className={VIDEO_WRAPPER_CLASS_NAME}>\n <YoutubeEmbeded autoplay={autoplay} videoId={videoId} params={params} />\n </div>\n );\n};\n\nYouTubeProvider.propTypes = {\n url: PropTypes.string.isRequired,\n autoplay: PropTypes.bool,\n loop: PropTypes.bool\n};\n\nYouTubeProvider.defaultProps = {\n autoplay: false,\n loop: false\n};\n\nexport default YouTubeProvider;\n"],"file":"YouTubeProvider.js"}
@@ -0,0 +1,147 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useInView } from '@blaze-react/utils/lib/customHooks';
4
+ import { IN_VIEW_CONFIG } from '../../../../constants';
5
+ const YT_HQ_FORMAT = 'hqdefault';
6
+ const YT_IMAGE_URL = 'https://i.ytimg.com';
7
+
8
+ const YoutubeEmbeded = ({
9
+ autoplay,
10
+ videoId,
11
+ playlistCoverId,
12
+ videoTitle,
13
+ poster,
14
+ videoParams,
15
+ announce,
16
+ noCookie,
17
+ webp,
18
+ playlist,
19
+ onIframeAdded,
20
+ muted,
21
+ adNetwork,
22
+ iframeClass,
23
+ priority
24
+ }) => {
25
+ const [isIntersecting, outerRef] = useInView(IN_VIEW_CONFIG);
26
+ const [preconnected, setPreconnected] = useState(false);
27
+ const [renderIframe, setRenderIframe] = useState(!!autoplay);
28
+ const [{
29
+ imageSize,
30
+ displayImage
31
+ }, setImageDetails] = useState({
32
+ imageSize: poster,
33
+ displayImage: priority
34
+ });
35
+ const encodedId = encodeURIComponent(videoId);
36
+ const videoPlaylisCovertId = typeof playlistCoverId === 'string' ? encodeURIComponent(playlistCoverId) : null;
37
+ const paramsImp = videoParams ? `&${videoParams}` : '';
38
+ const format = webp ? 'webp' : 'jpg';
39
+ const vi = webp ? 'vi_webp' : 'vi';
40
+ const posterUrl = !playlist ? `${YT_IMAGE_URL}/${vi}/${encodedId}/${imageSize}.${format}` : `${YT_IMAGE_URL}/${vi}/${videoPlaylisCovertId}/${imageSize}.${format}`;
41
+ const ytUrl = noCookie ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com';
42
+ const mutedValue = muted ? '&mute=1' : '';
43
+ const iframeSrc = !playlist ? `${ytUrl}/embed/${encodedId}?autoplay=1${mutedValue}${paramsImp}` : `${ytUrl}/embed/videoseries?autoplay=1${mutedValue}&list=${encodedId}${paramsImp}`;
44
+ const parsedWrapperClassname = `yt-facade ${renderIframe ? 'yt-activated' : ''}`;
45
+ useEffect(() => {
46
+ if (!priority && !isIntersecting || imageSize === YT_HQ_FORMAT) return;
47
+ const img = new Image(); // eslint-disable-next-line func-names
48
+
49
+ img.onload = function () {
50
+ let newImageSize = imageSize;
51
+ if (this && this.width === 120) newImageSize = YT_HQ_FORMAT;
52
+ setImageDetails({
53
+ imageSize: newImageSize,
54
+ displayImage: true
55
+ });
56
+ };
57
+
58
+ img.src = posterUrl;
59
+ }, [imageSize, isIntersecting, posterUrl, priority]);
60
+
61
+ const warmConnections = () => {
62
+ if (preconnected) return;
63
+ setPreconnected(true);
64
+ };
65
+
66
+ const addIframe = () => {
67
+ if (renderIframe) return;
68
+ onIframeAdded();
69
+ setRenderIframe(true);
70
+ };
71
+
72
+ return /*#__PURE__*/React.createElement(React.Fragment, null, preconnected && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("link", {
73
+ rel: "preconnect",
74
+ href: YT_IMAGE_URL
75
+ }), /*#__PURE__*/React.createElement("link", {
76
+ rel: "preconnect",
77
+ href: ytUrl
78
+ }), /*#__PURE__*/React.createElement("link", {
79
+ rel: "preconnect",
80
+ href: "https://www.google.com"
81
+ }), adNetwork && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("link", {
82
+ rel: "preconnect",
83
+ href: "https://static.doubleclick.net"
84
+ }), /*#__PURE__*/React.createElement("link", {
85
+ rel: "preconnect",
86
+ href: "https://googleads.g.doubleclick.net"
87
+ }))), /*#__PURE__*/React.createElement("div", {
88
+ ref: outerRef,
89
+ role: "button",
90
+ onPointerOver: warmConnections,
91
+ onClick: addIframe,
92
+ className: parsedWrapperClassname,
93
+ "data-title": videoTitle,
94
+ style: {
95
+ backgroundImage: `url(${displayImage ? posterUrl : ''})`
96
+ }
97
+ }, /*#__PURE__*/React.createElement("div", {
98
+ type: "button",
99
+ className: "yt-facade-button-wrapper",
100
+ "aria-label": `${announce} ${videoTitle}`
101
+ }, /*#__PURE__*/React.createElement("div", {
102
+ className: "yt-facade-button"
103
+ })), renderIframe && /*#__PURE__*/React.createElement("iframe", {
104
+ className: iframeClass,
105
+ title: videoTitle,
106
+ allow: "accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",
107
+ allowFullScreen: true,
108
+ src: iframeSrc
109
+ })));
110
+ };
111
+
112
+ YoutubeEmbeded.propTypes = {
113
+ priority: PropTypes.bool,
114
+ onIframeAdded: PropTypes.func,
115
+ adNetwork: PropTypes.bool,
116
+ autoplay: PropTypes.bool,
117
+ playlist: PropTypes.bool,
118
+ muted: PropTypes.bool,
119
+ webp: PropTypes.bool,
120
+ noCookie: PropTypes.bool,
121
+ videoId: PropTypes.string,
122
+ iframeClass: PropTypes.string,
123
+ poster: PropTypes.string,
124
+ announce: PropTypes.string,
125
+ playlistCoverId: PropTypes.string,
126
+ videoParams: PropTypes.string,
127
+ videoTitle: PropTypes.string
128
+ };
129
+ YoutubeEmbeded.defaultProps = {
130
+ priority: true,
131
+ onIframeAdded: () => {},
132
+ adNetwork: false,
133
+ autoplay: false,
134
+ playlist: false,
135
+ muted: false,
136
+ webp: false,
137
+ noCookie: false,
138
+ iframeClass: '',
139
+ poster: 'sddefault',
140
+ announce: 'Watch',
141
+ videoId: '',
142
+ playlistCoverId: '',
143
+ videoParams: '',
144
+ videoTitle: ''
145
+ };
146
+ export default YoutubeEmbeded;
147
+ //# sourceMappingURL=YoutubeEmbeded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/Video/providers/YouTube/YoutubeEmbeded.js"],"names":["React","useState","useEffect","PropTypes","useInView","IN_VIEW_CONFIG","YT_HQ_FORMAT","YT_IMAGE_URL","YoutubeEmbeded","autoplay","videoId","playlistCoverId","videoTitle","poster","videoParams","announce","noCookie","webp","playlist","onIframeAdded","muted","adNetwork","iframeClass","priority","isIntersecting","outerRef","preconnected","setPreconnected","renderIframe","setRenderIframe","imageSize","displayImage","setImageDetails","encodedId","encodeURIComponent","videoPlaylisCovertId","paramsImp","format","vi","posterUrl","ytUrl","mutedValue","iframeSrc","parsedWrapperClassname","img","Image","onload","newImageSize","width","src","warmConnections","addIframe","backgroundImage","propTypes","bool","func","string","defaultProps"],"mappings":"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","sourcesContent":["import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useInView } from '@blaze-react/utils/lib/customHooks';\nimport { IN_VIEW_CONFIG } from '../../../../constants';\n\nconst YT_HQ_FORMAT = 'hqdefault';\nconst YT_IMAGE_URL = 'https://i.ytimg.com';\n\nconst YoutubeEmbeded = ({\n autoplay,\n videoId,\n playlistCoverId,\n videoTitle,\n poster,\n videoParams,\n announce,\n noCookie,\n webp,\n playlist,\n onIframeAdded,\n muted,\n adNetwork,\n iframeClass,\n priority\n}) => {\n const [isIntersecting, outerRef] = useInView(IN_VIEW_CONFIG);\n const [preconnected, setPreconnected] = useState(false);\n const [renderIframe, setRenderIframe] = useState(!!autoplay);\n const [{ imageSize, displayImage }, setImageDetails] = useState({\n imageSize: poster,\n displayImage: priority\n });\n\n const encodedId = encodeURIComponent(videoId);\n const videoPlaylisCovertId =\n typeof playlistCoverId === 'string' ? encodeURIComponent(playlistCoverId) : null;\n const paramsImp = videoParams ? `&${videoParams}` : '';\n const format = webp ? 'webp' : 'jpg';\n const vi = webp ? 'vi_webp' : 'vi';\n const posterUrl = !playlist\n ? `${YT_IMAGE_URL}/${vi}/${encodedId}/${imageSize}.${format}`\n : `${YT_IMAGE_URL}/${vi}/${videoPlaylisCovertId}/${imageSize}.${format}`;\n const ytUrl = noCookie ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com';\n\n const mutedValue = muted ? '&mute=1' : '';\n const iframeSrc = !playlist\n ? `${ytUrl}/embed/${encodedId}?autoplay=1${mutedValue}${paramsImp}`\n : `${ytUrl}/embed/videoseries?autoplay=1${mutedValue}&list=${encodedId}${paramsImp}`;\n const parsedWrapperClassname = `yt-facade ${renderIframe ? 'yt-activated' : ''}`;\n\n useEffect(\n () => {\n if ((!priority && !isIntersecting) || imageSize === YT_HQ_FORMAT) return;\n\n const img = new Image();\n // eslint-disable-next-line func-names\n img.onload = function() {\n let newImageSize = imageSize;\n if (this && this.width === 120) newImageSize = YT_HQ_FORMAT;\n setImageDetails({ imageSize: newImageSize, displayImage: true });\n };\n\n img.src = posterUrl;\n },\n [imageSize, isIntersecting, posterUrl, priority]\n );\n\n const warmConnections = () => {\n if (preconnected) return;\n setPreconnected(true);\n };\n\n const addIframe = () => {\n if (renderIframe) return;\n onIframeAdded();\n setRenderIframe(true);\n };\n\n return (\n <>\n {preconnected && (\n <>\n <link rel=\"preconnect\" href={YT_IMAGE_URL} />\n <link rel=\"preconnect\" href={ytUrl} />\n <link rel=\"preconnect\" href=\"https://www.google.com\" />\n {adNetwork && (\n <>\n <link rel=\"preconnect\" href=\"https://static.doubleclick.net\" />\n <link rel=\"preconnect\" href=\"https://googleads.g.doubleclick.net\" />\n </>\n )}\n </>\n )}\n <div\n ref={outerRef}\n role=\"button\"\n onPointerOver={warmConnections}\n onClick={addIframe}\n className={parsedWrapperClassname}\n data-title={videoTitle}\n style={{\n backgroundImage: `url(${displayImage ? posterUrl : ''})`\n }}>\n <div\n type=\"button\"\n className=\"yt-facade-button-wrapper\"\n aria-label={`${announce} ${videoTitle}`}>\n <div className=\"yt-facade-button\" />\n </div>\n {renderIframe && (\n <iframe\n className={iframeClass}\n title={videoTitle}\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={iframeSrc}\n />\n )}\n </div>\n </>\n );\n};\n\nYoutubeEmbeded.propTypes = {\n priority: PropTypes.bool,\n onIframeAdded: PropTypes.func,\n adNetwork: PropTypes.bool,\n autoplay: PropTypes.bool,\n playlist: PropTypes.bool,\n muted: PropTypes.bool,\n webp: PropTypes.bool,\n noCookie: PropTypes.bool,\n videoId: PropTypes.string,\n iframeClass: PropTypes.string,\n poster: PropTypes.string,\n announce: PropTypes.string,\n playlistCoverId: PropTypes.string,\n videoParams: PropTypes.string,\n videoTitle: PropTypes.string\n};\n\nYoutubeEmbeded.defaultProps = {\n priority: true,\n onIframeAdded: () => {},\n adNetwork: false,\n autoplay: false,\n playlist: false,\n muted: false,\n webp: false,\n noCookie: false,\n iframeClass: '',\n poster: 'sddefault',\n announce: 'Watch',\n videoId: '',\n playlistCoverId: '',\n videoParams: '',\n videoTitle: ''\n};\n\nexport default YoutubeEmbeded;\n"],"file":"YoutubeEmbeded.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blaze-cms/react-page-builder",
3
- "version": "0.118.0-alpha.0",
3
+ "version": "0.118.0",
4
4
  "description": "Blaze react page builder",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-es/index.js",
@@ -27,12 +27,12 @@
27
27
  },
28
28
  "license": "GPL-3.0",
29
29
  "dependencies": {
30
- "@blaze-cms/core-auth-ui": "^0.118.0-alpha.0",
31
- "@blaze-cms/core-errors": "^0.118.0-alpha.0",
30
+ "@blaze-cms/core-auth-ui": "^0.118.0",
31
+ "@blaze-cms/core-errors": "^0.118.0",
32
32
  "@blaze-cms/image-cdn-react": "^0.2.0",
33
- "@blaze-cms/nextjs-components": "^0.118.0-alpha.0",
33
+ "@blaze-cms/nextjs-components": "^0.118.0",
34
34
  "@blaze-cms/setup-ui": "^0.92.0",
35
- "@blaze-cms/utils": "^0.118.0-alpha.0",
35
+ "@blaze-cms/utils": "^0.118.0",
36
36
  "@blaze-react/button": "0.5.19",
37
37
  "@blaze-react/checkboxes": "0.5.31",
38
38
  "@blaze-react/input": "0.5.30",
@@ -58,7 +58,6 @@
58
58
  "react-html-parser": "2.0.2",
59
59
  "react-jw-player": "^1.19.1",
60
60
  "react-waypoint": "^9.0.2",
61
- "react-youtube": "7.11.3",
62
61
  "regenerator-runtime": "^0.13.3",
63
62
  "uuid": "^3.3.3",
64
63
  "video-react": "0.14.1"
@@ -88,5 +87,5 @@
88
87
  "lib/*",
89
88
  "lib-es/*"
90
89
  ],
91
- "gitHead": "f12d8141dc829f454e5ed5712ba4901b038447db"
90
+ "gitHead": "6814f1366b463d508604959b0f688c9dc170ccf8"
92
91
  }
@@ -1,42 +1,80 @@
1
1
  import React, { useState } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import BlazeButton from '@blaze-react/button';
4
- import { MdMenu } from 'react-icons/md';
4
+ import { MdMenu, MdClose } from 'react-icons/md';
5
5
  import { useCheckMobileScreen } from '../../hooks';
6
6
  import { HIDDEN } from '../../constants';
7
7
 
8
- const Menu = ({ children, collapse, modifier }) => {
8
+ const Menu = ({
9
+ children,
10
+ collapse,
11
+ modifier,
12
+ mobileMenuModifier,
13
+ mobileMenuChildrenModifier,
14
+ mobileIconAlignment,
15
+ mobileButtonModifier,
16
+ hamburgerIconModifier,
17
+ closeIconModifier,
18
+ ...rest
19
+ }) => {
9
20
  const isMobile = useCheckMobileScreen();
10
21
  const [showMobileMenu, setShowMobileMenu] = useState(false);
11
22
 
12
23
  const shouldDisplayCollapsed = collapse && isMobile;
13
- const mobileButtonClass = shouldDisplayCollapsed && isMobile ? '' : HIDDEN;
24
+ const mobileButtonClass = shouldDisplayCollapsed && isMobile ? mobileButtonModifier : HIDDEN;
14
25
  const shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;
15
- const childrenDisplayClass = shouldDisplayChildren ? modifier : `${modifier} ${HIDDEN}`;
26
+ const childrenDesktopModifier =
27
+ shouldDisplayChildren && !isMobile ? modifier : `${modifier} ${HIDDEN}`;
28
+
29
+ const childrenMobileModifier =
30
+ shouldDisplayChildren && isMobile ? `${mobileMenuChildrenModifier}` : ` ${HIDDEN}`;
31
+
32
+ const isMobileMenuExpanded = showMobileMenu ? `${mobileMenuModifier}` : '';
16
33
 
17
34
  return (
18
35
  <>
19
36
  {collapse && (
20
- <BlazeButton
21
- className={mobileButtonClass}
22
- onClick={() => setShowMobileMenu(!showMobileMenu)}>
23
- <i>
24
- <MdMenu />
25
- </i>
26
- </BlazeButton>
37
+ <div className="top-0 absolute z-50">
38
+ <div
39
+ className={`flex w-screen z-50 justify-${mobileIconAlignment} ${isMobileMenuExpanded}`}>
40
+ <BlazeButton
41
+ className={mobileButtonClass}
42
+ onClick={() => setShowMobileMenu(!showMobileMenu)}>
43
+ <i>
44
+ {showMobileMenu ? (
45
+ <MdClose className={closeIconModifier} />
46
+ ) : (
47
+ <MdMenu className={hamburgerIconModifier} />
48
+ )}
49
+ </i>
50
+ </BlazeButton>
51
+ </div>
52
+ </div>
27
53
  )}
28
- <ul className={childrenDisplayClass}>{children}</ul>
54
+ <ul className={isMobile ? childrenMobileModifier : childrenDesktopModifier}>{children}</ul>
29
55
  </>
30
56
  );
31
57
  };
32
58
 
33
59
  Menu.propTypes = {
34
60
  collapse: PropTypes.bool.isRequired,
61
+ hamburgerIconModifier: PropTypes.string,
62
+ closeIconModifier: PropTypes.string,
63
+ mobileButtonModifier: PropTypes.string,
64
+ mobileMenuModifier: PropTypes.string,
65
+ mobileMenuChildrenModifier: PropTypes.string,
35
66
  modifier: PropTypes.string,
67
+ mobileIconAlignment: PropTypes.string,
36
68
  children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])
37
69
  };
38
70
 
39
71
  Menu.defaultProps = {
72
+ hamburgerIconModifier: '',
73
+ closeIconModifier: '',
74
+ mobileButtonModifier: '',
75
+ mobileIconAlignment: '',
76
+ mobileMenuModifier: '',
77
+ mobileMenuChildrenModifier: '',
40
78
  modifier: '',
41
79
  children: []
42
80
  };
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import YouTube from 'react-youtube';
3
+ import YoutubeEmbeded from './YoutubeEmbeded';
4
4
  import { getYouTubeID, booleanToNumber } from './helpers';
5
5
  import { VIDEO_WRAPPER_CLASS_NAME } from '../../../../constants';
6
6
 
@@ -8,15 +8,13 @@ const YouTubeProvider = ({ url, autoplay, loop }) => {
8
8
  const videoId = getYouTubeID(url);
9
9
 
10
10
  if (!videoId) return null;
11
+ const params = `loop=${booleanToNumber(loop)}`;
11
12
 
12
- const opts = {
13
- playerVars: {
14
- autoplay: booleanToNumber(autoplay),
15
- loop: booleanToNumber(loop)
16
- }
17
- };
18
-
19
- return <YouTube videoId={videoId} containerClassName={VIDEO_WRAPPER_CLASS_NAME} opts={opts} />;
13
+ return (
14
+ <div className={VIDEO_WRAPPER_CLASS_NAME}>
15
+ <YoutubeEmbeded autoplay={autoplay} videoId={videoId} params={params} />
16
+ </div>
17
+ );
20
18
  };
21
19
 
22
20
  YouTubeProvider.propTypes = {
@@ -0,0 +1,160 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useInView } from '@blaze-react/utils/lib/customHooks';
4
+ import { IN_VIEW_CONFIG } from '../../../../constants';
5
+
6
+ const YT_HQ_FORMAT = 'hqdefault';
7
+ const YT_IMAGE_URL = 'https://i.ytimg.com';
8
+
9
+ const YoutubeEmbeded = ({
10
+ autoplay,
11
+ videoId,
12
+ playlistCoverId,
13
+ videoTitle,
14
+ poster,
15
+ videoParams,
16
+ announce,
17
+ noCookie,
18
+ webp,
19
+ playlist,
20
+ onIframeAdded,
21
+ muted,
22
+ adNetwork,
23
+ iframeClass,
24
+ priority
25
+ }) => {
26
+ const [isIntersecting, outerRef] = useInView(IN_VIEW_CONFIG);
27
+ const [preconnected, setPreconnected] = useState(false);
28
+ const [renderIframe, setRenderIframe] = useState(!!autoplay);
29
+ const [{ imageSize, displayImage }, setImageDetails] = useState({
30
+ imageSize: poster,
31
+ displayImage: priority
32
+ });
33
+
34
+ const encodedId = encodeURIComponent(videoId);
35
+ const videoPlaylisCovertId =
36
+ typeof playlistCoverId === 'string' ? encodeURIComponent(playlistCoverId) : null;
37
+ const paramsImp = videoParams ? `&${videoParams}` : '';
38
+ const format = webp ? 'webp' : 'jpg';
39
+ const vi = webp ? 'vi_webp' : 'vi';
40
+ const posterUrl = !playlist
41
+ ? `${YT_IMAGE_URL}/${vi}/${encodedId}/${imageSize}.${format}`
42
+ : `${YT_IMAGE_URL}/${vi}/${videoPlaylisCovertId}/${imageSize}.${format}`;
43
+ const ytUrl = noCookie ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com';
44
+
45
+ const mutedValue = muted ? '&mute=1' : '';
46
+ const iframeSrc = !playlist
47
+ ? `${ytUrl}/embed/${encodedId}?autoplay=1${mutedValue}${paramsImp}`
48
+ : `${ytUrl}/embed/videoseries?autoplay=1${mutedValue}&list=${encodedId}${paramsImp}`;
49
+ const parsedWrapperClassname = `yt-facade ${renderIframe ? 'yt-activated' : ''}`;
50
+
51
+ useEffect(
52
+ () => {
53
+ if ((!priority && !isIntersecting) || imageSize === YT_HQ_FORMAT) return;
54
+
55
+ const img = new Image();
56
+ // eslint-disable-next-line func-names
57
+ img.onload = function() {
58
+ let newImageSize = imageSize;
59
+ if (this && this.width === 120) newImageSize = YT_HQ_FORMAT;
60
+ setImageDetails({ imageSize: newImageSize, displayImage: true });
61
+ };
62
+
63
+ img.src = posterUrl;
64
+ },
65
+ [imageSize, isIntersecting, posterUrl, priority]
66
+ );
67
+
68
+ const warmConnections = () => {
69
+ if (preconnected) return;
70
+ setPreconnected(true);
71
+ };
72
+
73
+ const addIframe = () => {
74
+ if (renderIframe) return;
75
+ onIframeAdded();
76
+ setRenderIframe(true);
77
+ };
78
+
79
+ return (
80
+ <>
81
+ {preconnected && (
82
+ <>
83
+ <link rel="preconnect" href={YT_IMAGE_URL} />
84
+ <link rel="preconnect" href={ytUrl} />
85
+ <link rel="preconnect" href="https://www.google.com" />
86
+ {adNetwork && (
87
+ <>
88
+ <link rel="preconnect" href="https://static.doubleclick.net" />
89
+ <link rel="preconnect" href="https://googleads.g.doubleclick.net" />
90
+ </>
91
+ )}
92
+ </>
93
+ )}
94
+ <div
95
+ ref={outerRef}
96
+ role="button"
97
+ onPointerOver={warmConnections}
98
+ onClick={addIframe}
99
+ className={parsedWrapperClassname}
100
+ data-title={videoTitle}
101
+ style={{
102
+ backgroundImage: `url(${displayImage ? posterUrl : ''})`
103
+ }}>
104
+ <div
105
+ type="button"
106
+ className="yt-facade-button-wrapper"
107
+ aria-label={`${announce} ${videoTitle}`}>
108
+ <div className="yt-facade-button" />
109
+ </div>
110
+ {renderIframe && (
111
+ <iframe
112
+ className={iframeClass}
113
+ title={videoTitle}
114
+ allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
115
+ allowFullScreen
116
+ src={iframeSrc}
117
+ />
118
+ )}
119
+ </div>
120
+ </>
121
+ );
122
+ };
123
+
124
+ YoutubeEmbeded.propTypes = {
125
+ priority: PropTypes.bool,
126
+ onIframeAdded: PropTypes.func,
127
+ adNetwork: PropTypes.bool,
128
+ autoplay: PropTypes.bool,
129
+ playlist: PropTypes.bool,
130
+ muted: PropTypes.bool,
131
+ webp: PropTypes.bool,
132
+ noCookie: PropTypes.bool,
133
+ videoId: PropTypes.string,
134
+ iframeClass: PropTypes.string,
135
+ poster: PropTypes.string,
136
+ announce: PropTypes.string,
137
+ playlistCoverId: PropTypes.string,
138
+ videoParams: PropTypes.string,
139
+ videoTitle: PropTypes.string
140
+ };
141
+
142
+ YoutubeEmbeded.defaultProps = {
143
+ priority: true,
144
+ onIframeAdded: () => {},
145
+ adNetwork: false,
146
+ autoplay: false,
147
+ playlist: false,
148
+ muted: false,
149
+ webp: false,
150
+ noCookie: false,
151
+ iframeClass: '',
152
+ poster: 'sddefault',
153
+ announce: 'Watch',
154
+ videoId: '',
155
+ playlistCoverId: '',
156
+ videoParams: '',
157
+ videoTitle: ''
158
+ };
159
+
160
+ export default YoutubeEmbeded;
@@ -5,10 +5,6 @@ import YouTubeProvider from '../../../../../../../src/components/Video/providers
5
5
  describe('YouTubeProvider component', () => {
6
6
  const props = { url: 'https://www.youtube.com/watch?v=mockedID', modifier: 'mocked-modifier' };
7
7
 
8
- it('should be defined', () => {
9
- expect(YouTubeProvider).toBeDefined();
10
- });
11
-
12
8
  it('should render without throwing error and match snapshot', async () => {
13
9
  const { asFragment } = render(YouTubeProvider, props);
14
10
  expect(asFragment()).toMatchSnapshot();
@@ -5,7 +5,22 @@ exports[`YouTubeProvider component should render without throwing error and matc
5
5
  <div
6
6
  class="video__wrapper"
7
7
  >
8
- <div />
8
+ <div
9
+ class="yt-facade "
10
+ data-title=""
11
+ role="button"
12
+ style="background-image: url(https://i.ytimg.com/vi/mockedID/sddefault.jpg);"
13
+ >
14
+ <div
15
+ aria-label="Watch "
16
+ class="yt-facade-button-wrapper"
17
+ type="button"
18
+ >
19
+ <div
20
+ class="yt-facade-button"
21
+ />
22
+ </div>
23
+ </div>
9
24
  </div>
10
25
  </DocumentFragment>
11
26
  `;