@edx/frontend-plugin-advertisements 1.2.0 → 1.4.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.
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ var _rosie = require("rosie");
4
+ // eslint-disable-line import/no-extraneous-dependencies
5
+
6
+ _rosie.Factory.define('experimentalUpgradeNotificationData').option('host', 'http://localhost:18000').option('dateBlocks', []).option('offer', null).option('userTimezone', null).option('contentTypeGatingEnabled', false).attr('courseId', 'course-v1:edX+DemoX+Demo_Course').attr('upsellPageName', 'test').attr('verifiedMode', ['host'], host => ({
7
+ access_expiration_date: '2050-01-01T12:00:00',
8
+ currency: 'USD',
9
+ currencySymbol: '$',
10
+ price: 149,
11
+ sku: 'ABCD1234',
12
+ upgradeUrl: `${host}/dashboard`
13
+ })).attr('org', 'edX').attrs({
14
+ accessExpiration: {
15
+ expiration_date: '1950-07-13T02:04:49.040006Z'
16
+ }
17
+ }).attr('timeOffsetMillis', 0);
18
+ //# sourceMappingURL=experimentalUpgradeNotificationData.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experimentalUpgradeNotificationData.factory.js","names":["_rosie","require","Factory","define","option","attr","host","access_expiration_date","currency","currencySymbol","price","sku","upgradeUrl","attrs","accessExpiration","expiration_date"],"sources":["../../../src/data/__factories__/experimentalUpgradeNotificationData.factory.js"],"sourcesContent":["import { Factory } from 'rosie'; // eslint-disable-line import/no-extraneous-dependencies\n\nFactory.define('experimentalUpgradeNotificationData')\n .option('host', 'http://localhost:18000')\n .option('dateBlocks', [])\n .option('offer', null)\n .option('userTimezone', null)\n .option('contentTypeGatingEnabled', false)\n .attr('courseId', 'course-v1:edX+DemoX+Demo_Course')\n .attr('upsellPageName', 'test')\n .attr('verifiedMode', ['host'], (host) => ({\n access_expiration_date: '2050-01-01T12:00:00',\n currency: 'USD',\n currencySymbol: '$',\n price: 149,\n sku: 'ABCD1234',\n upgradeUrl: `${host}/dashboard`,\n }))\n .attr('org', 'edX')\n .attrs({\n accessExpiration: {\n expiration_date: '1950-07-13T02:04:49.040006Z',\n },\n })\n .attr('timeOffsetMillis', 0);\n"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAAiC;;AAEjCC,cAAO,CAACC,MAAM,CAAC,qCAAqC,CAAC,CAClDC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CACxCA,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CACxBA,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CACrBA,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAC5BA,MAAM,CAAC,0BAA0B,EAAE,KAAK,CAAC,CACzCC,IAAI,CAAC,UAAU,EAAE,iCAAiC,CAAC,CACnDA,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAC9BA,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAGC,IAAI,KAAM;EACzCC,sBAAsB,EAAE,qBAAqB;EAC7CC,QAAQ,EAAE,KAAK;EACfC,cAAc,EAAE,GAAG;EACnBC,KAAK,EAAE,GAAG;EACVC,GAAG,EAAE,UAAU;EACfC,UAAU,EAAG,GAAEN,IAAK;AACtB,CAAC,CAAC,CAAC,CACFD,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAClBQ,KAAK,CAAC;EACLC,gBAAgB,EAAE;IAChBC,eAAe,EAAE;EACnB;AACF,CAAC,CAAC,CACDV,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ require("./experimentalUpgradeNotificationData.factory");
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["require"],"sources":["../../../src/data/__factories__/index.js"],"sourcesContent":["import './experimentalUpgradeNotificationData.factory';\n"],"mappings":";;AAAAA,OAAA","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "OPTIMIZELY_VTR_EXPERIMENT_KEY", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _optimizely.OPTIMIZELY_VTR_EXPERIMENT_KEY;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "optimizely", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _optimizely.optimizely;
16
+ }
17
+ });
18
+ var _optimizely = require("./optimizely");
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_optimizely","require"],"sources":["../../src/data/index.jsx"],"sourcesContent":["export { optimizely, OPTIMIZELY_VTR_EXPERIMENT_KEY } from './optimizely';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.optimizely = exports.OPTIMIZELY_VTR_EXPERIMENT_KEY = void 0;
7
+ var _reactSdk = require("@optimizely/react-sdk");
8
+ var _frontendPlatform = require("@edx/frontend-platform");
9
+ const OPTIMIZELY_SDK_KEY = (0, _frontendPlatform.getConfig)().OPTIMIZELY_FEATURE_EXPERIMENTATION_SDK_KEY;
10
+ const optimizely = exports.optimizely = (0, _reactSdk.createInstance)({
11
+ sdkKey: OPTIMIZELY_SDK_KEY
12
+ });
13
+ const OPTIMIZELY_VTR_EXPERIMENT_KEY = exports.OPTIMIZELY_VTR_EXPERIMENT_KEY = 'verified_take_rate_experimentation';
14
+ //# sourceMappingURL=optimizely.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimizely.js","names":["_reactSdk","require","_frontendPlatform","OPTIMIZELY_SDK_KEY","getConfig","OPTIMIZELY_FEATURE_EXPERIMENTATION_SDK_KEY","optimizely","exports","createInstance","sdkKey","OPTIMIZELY_VTR_EXPERIMENT_KEY"],"sources":["../../src/data/optimizely.js"],"sourcesContent":["import { createInstance } from '@optimizely/react-sdk';\n\nimport { getConfig } from '@edx/frontend-platform';\n\nconst OPTIMIZELY_SDK_KEY = getConfig().OPTIMIZELY_FEATURE_EXPERIMENTATION_SDK_KEY;\n\nconst optimizely = createInstance({\n sdkKey: OPTIMIZELY_SDK_KEY,\n});\n\nconst OPTIMIZELY_VTR_EXPERIMENT_KEY = 'verified_take_rate_experimentation';\n\nexport { optimizely, OPTIMIZELY_VTR_EXPERIMENT_KEY };\n"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,iBAAA,GAAAD,OAAA;AAEA,MAAME,kBAAkB,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,0CAA0C;AAEjF,MAAMC,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG,IAAAE,wBAAc,EAAC;EAChCC,MAAM,EAAEN;AACV,CAAC,CAAC;AAEF,MAAMO,6BAA6B,GAAAH,OAAA,CAAAG,6BAAA,GAAG,oCAAoC","ignoreList":[]}
package/dist/index.js CHANGED
@@ -12,10 +12,15 @@ Object.defineProperty(exports, "DefaultLockPaywall", {
12
12
  Object.defineProperty(exports, "DefaultUpgradeNotification", {
13
13
  enumerable: true,
14
14
  get: function () {
15
- return _DefaultUpgradeNotification.default;
15
+ return _upgradeNotification.DefaultUpgradeNotification;
16
16
  }
17
17
  });
18
- var _DefaultUpgradeNotification = _interopRequireDefault(require("./upgrade-notification/DefaultUpgradeNotification"));
18
+ Object.defineProperty(exports, "ExperimentalUpgradeNotification", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _upgradeNotification.ExperimentalUpgradeNotification;
22
+ }
23
+ });
24
+ var _upgradeNotification = require("./upgrade-notification");
19
25
  var _paywall = require("./paywall");
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_DefaultUpgradeNotification","_interopRequireDefault","require","_paywall","obj","__esModule","default"],"sources":["../src/index.jsx"],"sourcesContent":["export { default as DefaultUpgradeNotification } from './upgrade-notification/DefaultUpgradeNotification';\nexport { DefaultLockPaywall } from './paywall';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,2BAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAA+C,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_upgradeNotification","require","_paywall"],"sources":["../src/index.jsx"],"sourcesContent":["export { DefaultUpgradeNotification, ExperimentalUpgradeNotification } from './upgrade-notification';\nexport { DefaultLockPaywall } from './paywall';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA","ignoreList":[]}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _propTypes = _interopRequireDefault(require("prop-types"));
8
+ var _auth = require("@edx/frontend-platform/auth");
9
+ var _reactSdk = require("@optimizely/react-sdk");
10
+ var _optimizely = require("../data/optimizely");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ const _excluded = ["defaultComponent", "experimentalComponent", "defaultVariationKey", "experimentKey"];
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
18
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
19
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
20
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
21
+ const OptimizelyExperimentController = ( // Use defaultVariationKey if your experiment is set to target less than 100% of traffic
22
+ // and you have a variation for users not included in the experiment.
23
+ _ref) => {
24
+ let {
25
+ defaultComponent: DefaultComponent,
26
+ experimentalComponent: ExperimentalComponent,
27
+ defaultVariationKey,
28
+ experimentKey
29
+ } = _ref,
30
+ props = _objectWithoutProperties(_ref, _excluded);
31
+ const [decision] = (0, _reactSdk.useDecision)(experimentKey);
32
+ const {
33
+ enabled,
34
+ variationKey
35
+ } = decision;
36
+ const showDefault = !enabled || defaultVariationKey && defaultVariationKey === variationKey;
37
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
38
+ children: showDefault ? /*#__PURE__*/(0, _jsxRuntime.jsx)(DefaultComponent, _objectSpread({}, props)) : /*#__PURE__*/(0, _jsxRuntime.jsx)(ExperimentalComponent, _objectSpread({}, props))
39
+ });
40
+ };
41
+ OptimizelyExperimentController.propTypes = {
42
+ defaultComponent: _propTypes.default.elementType.isRequired,
43
+ experimentalComponent: _propTypes.default.elementType.isRequired,
44
+ defaultVariationKey: _propTypes.default.string,
45
+ experimentKey: _propTypes.default.string.isRequired
46
+ };
47
+ OptimizelyExperimentController.defaultProps = {
48
+ defaultVariationKey: null
49
+ };
50
+ const OptimizelyExperiment = props => {
51
+ const {
52
+ userId
53
+ } = (0, _auth.getAuthenticatedUser)();
54
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactSdk.OptimizelyProvider, {
55
+ optimizely: _optimizely.optimizely,
56
+ user: {
57
+ id: userId
58
+ },
59
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(OptimizelyExperimentController, _objectSpread({}, props))
60
+ });
61
+ };
62
+ var _default = exports.default = OptimizelyExperiment;
63
+ //# sourceMappingURL=Optimizely.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Optimizely.js","names":["_propTypes","_interopRequireDefault","require","_auth","_reactSdk","_optimizely","_jsxRuntime","_excluded","obj","__esModule","default","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","value","_toPropertyKey","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","_objectWithoutProperties","source","excluded","target","_objectWithoutPropertiesLoose","sourceSymbolKeys","indexOf","prototype","propertyIsEnumerable","sourceKeys","OptimizelyExperimentController","_ref","defaultComponent","DefaultComponent","experimentalComponent","ExperimentalComponent","defaultVariationKey","experimentKey","props","decision","useDecision","enabled","variationKey","showDefault","jsx","children","propTypes","PropTypes","elementType","isRequired","string","defaultProps","OptimizelyExperiment","userId","getAuthenticatedUser","OptimizelyProvider","optimizely","user","id","_default","exports"],"sources":["../../src/optimizely/Optimizely.jsx"],"sourcesContent":["import PropTypes from 'prop-types';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { OptimizelyProvider, useDecision } from '@optimizely/react-sdk';\n\nimport { optimizely } from '../data/optimizely';\n\nconst OptimizelyExperimentController = (\n // Use defaultVariationKey if your experiment is set to target less than 100% of traffic\n // and you have a variation for users not included in the experiment.\n {\n defaultComponent: DefaultComponent,\n experimentalComponent: ExperimentalComponent,\n defaultVariationKey,\n experimentKey,\n ...props\n },\n) => {\n const [decision] = useDecision(experimentKey);\n const { enabled, variationKey } = decision;\n\n const showDefault = !enabled || (defaultVariationKey && defaultVariationKey === variationKey);\n\n return (\n <div>\n {showDefault ? <DefaultComponent {...props} /> : <ExperimentalComponent {...props} />}\n </div>\n );\n};\n\nOptimizelyExperimentController.propTypes = {\n defaultComponent: PropTypes.elementType.isRequired,\n experimentalComponent: PropTypes.elementType.isRequired,\n defaultVariationKey: PropTypes.string,\n experimentKey: PropTypes.string.isRequired,\n};\n\nOptimizelyExperimentController.defaultProps = {\n defaultVariationKey: null,\n};\n\nconst OptimizelyExperiment = (props) => {\n const { userId } = getAuthenticatedUser();\n return (\n <OptimizelyProvider optimizely={optimizely} user={{ id: userId }}>\n <OptimizelyExperimentController {...props} />\n </OptimizelyProvider>\n );\n};\n\nexport default OptimizelyExperiment;\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAH,OAAA;AAAgD,IAAAI,WAAA,GAAAJ,OAAA;AAAA,MAAAK,SAAA;AAAA,SAAAN,uBAAAO,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,IAAAe,eAAA,CAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAgB,gBAAApB,GAAA,EAAAwB,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAxB,GAAA,IAAAO,MAAA,CAAAgB,cAAA,CAAAvB,GAAA,EAAAwB,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAZ,UAAA,QAAAc,YAAA,QAAAC,QAAA,oBAAA5B,GAAA,CAAAwB,GAAA,IAAAC,KAAA,WAAAzB,GAAA;AAAA,SAAA0B,eAAApB,CAAA,QAAAuB,CAAA,GAAAC,YAAA,CAAAxB,CAAA,uCAAAuB,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAxB,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAyB,MAAA,CAAAC,WAAA,kBAAA5B,CAAA,QAAAyB,CAAA,GAAAzB,CAAA,CAAA6B,IAAA,CAAA3B,CAAA,EAAAD,CAAA,uCAAAwB,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAA7B,CAAA,GAAA8B,MAAA,GAAAC,MAAA,EAAA9B,CAAA;AAAA,SAAA+B,yBAAAC,MAAA,EAAAC,QAAA,QAAAD,MAAA,yBAAAE,MAAA,GAAAC,6BAAA,CAAAH,MAAA,EAAAC,QAAA,OAAAf,GAAA,EAAAK,CAAA,MAAAtB,MAAA,CAAAE,qBAAA,QAAAiC,gBAAA,GAAAnC,MAAA,CAAAE,qBAAA,CAAA6B,MAAA,QAAAT,CAAA,MAAAA,CAAA,GAAAa,gBAAA,CAAAxB,MAAA,EAAAW,CAAA,MAAAL,GAAA,GAAAkB,gBAAA,CAAAb,CAAA,OAAAU,QAAA,CAAAI,OAAA,CAAAnB,GAAA,uBAAAjB,MAAA,CAAAqC,SAAA,CAAAC,oBAAA,CAAAZ,IAAA,CAAAK,MAAA,EAAAd,GAAA,aAAAgB,MAAA,CAAAhB,GAAA,IAAAc,MAAA,CAAAd,GAAA,cAAAgB,MAAA;AAAA,SAAAC,8BAAAH,MAAA,EAAAC,QAAA,QAAAD,MAAA,yBAAAE,MAAA,WAAAM,UAAA,GAAAvC,MAAA,CAAAC,IAAA,CAAA8B,MAAA,OAAAd,GAAA,EAAAK,CAAA,OAAAA,CAAA,MAAAA,CAAA,GAAAiB,UAAA,CAAA5B,MAAA,EAAAW,CAAA,MAAAL,GAAA,GAAAsB,UAAA,CAAAjB,CAAA,OAAAU,QAAA,CAAAI,OAAA,CAAAnB,GAAA,kBAAAgB,MAAA,CAAAhB,GAAA,IAAAc,MAAA,CAAAd,GAAA,YAAAgB,MAAA;AAEhD,MAAMO,8BAA8B,GAAGA,CAAA,CACrC;AACA;AAAAC,IAAA,KAQG;EAAA,IAPH;MACEC,gBAAgB,EAAEC,gBAAgB;MAClCC,qBAAqB,EAAEC,qBAAqB;MAC5CC,mBAAmB;MACnBC;IAEF,CAAC,GAAAN,IAAA;IADIO,KAAK,GAAAlB,wBAAA,CAAAW,IAAA,EAAAjD,SAAA;EAGV,MAAM,CAACyD,QAAQ,CAAC,GAAG,IAAAC,qBAAW,EAACH,aAAa,CAAC;EAC7C,MAAM;IAAEI,OAAO;IAAEC;EAAa,CAAC,GAAGH,QAAQ;EAE1C,MAAMI,WAAW,GAAG,CAACF,OAAO,IAAKL,mBAAmB,IAAIA,mBAAmB,KAAKM,YAAa;EAE7F,oBACE,IAAA7D,WAAA,CAAA+D,GAAA;IAAAC,QAAA,EACGF,WAAW,gBAAG,IAAA9D,WAAA,CAAA+D,GAAA,EAACX,gBAAgB,EAAAlC,aAAA,KAAKuC,KAAK,CAAG,CAAC,gBAAG,IAAAzD,WAAA,CAAA+D,GAAA,EAACT,qBAAqB,EAAApC,aAAA,KAAKuC,KAAK,CAAG;EAAC,CAClF,CAAC;AAEV,CAAC;AAEDR,8BAA8B,CAACgB,SAAS,GAAG;EACzCd,gBAAgB,EAAEe,kBAAS,CAACC,WAAW,CAACC,UAAU;EAClDf,qBAAqB,EAAEa,kBAAS,CAACC,WAAW,CAACC,UAAU;EACvDb,mBAAmB,EAAEW,kBAAS,CAACG,MAAM;EACrCb,aAAa,EAAEU,kBAAS,CAACG,MAAM,CAACD;AAClC,CAAC;AAEDnB,8BAA8B,CAACqB,YAAY,GAAG;EAC5Cf,mBAAmB,EAAE;AACvB,CAAC;AAED,MAAMgB,oBAAoB,GAAId,KAAK,IAAK;EACtC,MAAM;IAAEe;EAAO,CAAC,GAAG,IAAAC,0BAAoB,EAAC,CAAC;EACzC,oBACE,IAAAzE,WAAA,CAAA+D,GAAA,EAACjE,SAAA,CAAA4E,kBAAkB;IAACC,UAAU,EAAEA,sBAAW;IAACC,IAAI,EAAE;MAAEC,EAAE,EAAEL;IAAO,CAAE;IAAAR,QAAA,eAC/D,IAAAhE,WAAA,CAAA+D,GAAA,EAACd,8BAA8B,EAAA/B,aAAA,KAAKuC,KAAK,CAAG;EAAC,CAC3B,CAAC;AAEzB,CAAC;AAAC,IAAAqB,QAAA,GAAAC,OAAA,CAAA3E,OAAA,GAEamE,oBAAoB","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _Optimizely = _interopRequireDefault(require("./Optimizely"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ var _default = exports.default = _Optimizely.default;
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_Optimizely","_interopRequireDefault","require","obj","__esModule","default","_default","exports","OptimizelyExperiment"],"sources":["../../src/optimizely/index.jsx"],"sourcesContent":["import OptimizelyExperiment from './Optimizely';\n\nexport default OptimizelyExperiment;\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAgD,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAEjCG,mBAAoB","ignoreList":[]}
@@ -10,7 +10,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
10
10
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
11
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
12
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
14
14
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // eslint-disable-line import/no-unresolved
15
15
  const DefaultLockPaywall = props => /*#__PURE__*/(0, _jsxRuntime.jsx)(_LockPaywall.default, _objectSpread({}, props));
16
16
  var _default = exports.default = DefaultLockPaywall;
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultLockPaywall.js","names":["_LockPaywall","_interopRequireDefault","require","_jsxRuntime","obj","__esModule","default","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","value","_toPropertyKey","configurable","writable","i","_toPrimitive","String","Symbol","toPrimitive","call","TypeError","Number","DefaultLockPaywall","props","jsx","_default","exports"],"sources":["../../src/paywall/DefaultLockPaywall.jsx"],"sourcesContent":["import LockPaywall from '@src/courseware/course/sequence/lock-paywall/LockPaywall'; // eslint-disable-line import/no-unresolved\n\nconst DefaultLockPaywall = (props) => (\n <LockPaywall {...props} />\n);\n\nexport default DefaultLockPaywall;\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAmF,IAAAC,WAAA,GAAAD,OAAA;AAAA,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,IAAAe,eAAA,CAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAgB,gBAAApB,GAAA,EAAAwB,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAxB,GAAA,IAAAO,MAAA,CAAAgB,cAAA,CAAAvB,GAAA,EAAAwB,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAZ,UAAA,QAAAc,YAAA,QAAAC,QAAA,oBAAA5B,GAAA,CAAAwB,GAAA,IAAAC,KAAA,WAAAzB,GAAA;AAAA,SAAA0B,eAAApB,CAAA,QAAAuB,CAAA,GAAAC,YAAA,CAAAxB,CAAA,uCAAAuB,CAAA,GAAAA,CAAA,GAAAE,MAAA,CAAAF,CAAA;AAAA,SAAAC,aAAAxB,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAA0B,MAAA,CAAAC,WAAA,kBAAA7B,CAAA,QAAAyB,CAAA,GAAAzB,CAAA,CAAA8B,IAAA,CAAA5B,CAAA,EAAAD,CAAA,uCAAAwB,CAAA,SAAAA,CAAA,YAAAM,SAAA,yEAAA9B,CAAA,GAAA0B,MAAA,GAAAK,MAAA,EAAA9B,CAAA,KAAC;AAEpF,MAAM+B,kBAAkB,GAAIC,KAAK,iBAC/B,IAAAvC,WAAA,CAAAwC,GAAA,EAAC3C,YAAA,CAAAM,OAAW,EAAAc,aAAA,KAAKsB,KAAK,CAAG,CAC1B;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAvC,OAAA,GAEamC,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"DefaultLockPaywall.js","names":["_LockPaywall","_interopRequireDefault","require","_jsxRuntime","obj","__esModule","default","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","value","_toPropertyKey","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","DefaultLockPaywall","props","jsx","_default","exports"],"sources":["../../src/paywall/DefaultLockPaywall.jsx"],"sourcesContent":["import LockPaywall from '@src/courseware/course/sequence/lock-paywall/LockPaywall'; // eslint-disable-line import/no-unresolved\n\nconst DefaultLockPaywall = (props) => (\n <LockPaywall {...props} />\n);\n\nexport default DefaultLockPaywall;\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAmF,IAAAC,WAAA,GAAAD,OAAA;AAAA,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,IAAAe,eAAA,CAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAgB,gBAAApB,GAAA,EAAAwB,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAxB,GAAA,IAAAO,MAAA,CAAAgB,cAAA,CAAAvB,GAAA,EAAAwB,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAZ,UAAA,QAAAc,YAAA,QAAAC,QAAA,oBAAA5B,GAAA,CAAAwB,GAAA,IAAAC,KAAA,WAAAzB,GAAA;AAAA,SAAA0B,eAAApB,CAAA,QAAAuB,CAAA,GAAAC,YAAA,CAAAxB,CAAA,uCAAAuB,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAxB,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAyB,MAAA,CAAAC,WAAA,kBAAA5B,CAAA,QAAAyB,CAAA,GAAAzB,CAAA,CAAA6B,IAAA,CAAA3B,CAAA,EAAAD,CAAA,uCAAAwB,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAA7B,CAAA,GAAA8B,MAAA,GAAAC,MAAA,EAAA9B,CAAA,KAAC;AAEpF,MAAM+B,kBAAkB,GAAIC,KAAK,iBAC/B,IAAAvC,WAAA,CAAAwC,GAAA,EAAC3C,YAAA,CAAAM,OAAW,EAAAc,aAAA,KAAKsB,KAAK,CAAG,CAC1B;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAvC,OAAA,GAEamC,kBAAkB","ignoreList":[]}
@@ -10,7 +10,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
10
10
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
11
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
12
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
14
14
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // eslint-disable-next-line import/no-unresolved
15
15
  const DefaultUpgradeNotification = props => /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpgradeNotification.default, _objectSpread({}, props));
16
16
  var _default = exports.default = DefaultUpgradeNotification;
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultUpgradeNotification.js","names":["_UpgradeNotification","_interopRequireDefault","require","_jsxRuntime","obj","__esModule","default","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","value","_toPropertyKey","configurable","writable","i","_toPrimitive","String","Symbol","toPrimitive","call","TypeError","Number","DefaultUpgradeNotification","props","jsx","_default","exports"],"sources":["../../src/upgrade-notification/DefaultUpgradeNotification.jsx"],"sourcesContent":["// eslint-disable-next-line import/no-unresolved\nimport UpgradeNotification from '@src/generic/upgrade-notification/UpgradeNotification';\n\nconst DefaultUpgradeNotification = (props) => (\n <UpgradeNotification {...props} />\n);\n\nexport default DefaultUpgradeNotification;\n"],"mappings":";;;;;;AACA,IAAAA,oBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAwF,IAAAC,WAAA,GAAAD,OAAA;AAAA,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,IAAAe,eAAA,CAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAgB,gBAAApB,GAAA,EAAAwB,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAxB,GAAA,IAAAO,MAAA,CAAAgB,cAAA,CAAAvB,GAAA,EAAAwB,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAZ,UAAA,QAAAc,YAAA,QAAAC,QAAA,oBAAA5B,GAAA,CAAAwB,GAAA,IAAAC,KAAA,WAAAzB,GAAA;AAAA,SAAA0B,eAAApB,CAAA,QAAAuB,CAAA,GAAAC,YAAA,CAAAxB,CAAA,uCAAAuB,CAAA,GAAAA,CAAA,GAAAE,MAAA,CAAAF,CAAA;AAAA,SAAAC,aAAAxB,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAA0B,MAAA,CAAAC,WAAA,kBAAA7B,CAAA,QAAAyB,CAAA,GAAAzB,CAAA,CAAA8B,IAAA,CAAA5B,CAAA,EAAAD,CAAA,uCAAAwB,CAAA,SAAAA,CAAA,YAAAM,SAAA,yEAAA9B,CAAA,GAAA0B,MAAA,GAAAK,MAAA,EAAA9B,CAAA,KADxF;AAGA,MAAM+B,0BAA0B,GAAIC,KAAK,iBACvC,IAAAvC,WAAA,CAAAwC,GAAA,EAAC3C,oBAAA,CAAAM,OAAmB,EAAAc,aAAA,KAAKsB,KAAK,CAAG,CAClC;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAvC,OAAA,GAEamC,0BAA0B","ignoreList":[]}
1
+ {"version":3,"file":"DefaultUpgradeNotification.js","names":["_UpgradeNotification","_interopRequireDefault","require","_jsxRuntime","obj","__esModule","default","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","value","_toPropertyKey","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","DefaultUpgradeNotification","props","jsx","_default","exports"],"sources":["../../src/upgrade-notification/DefaultUpgradeNotification.jsx"],"sourcesContent":["// eslint-disable-next-line import/no-unresolved\nimport UpgradeNotification from '@src/generic/upgrade-notification/UpgradeNotification';\n\nconst DefaultUpgradeNotification = (props) => (\n <UpgradeNotification {...props} />\n);\n\nexport default DefaultUpgradeNotification;\n"],"mappings":";;;;;;AACA,IAAAA,oBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAwF,IAAAC,WAAA,GAAAD,OAAA;AAAA,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,IAAAe,eAAA,CAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAgB,gBAAApB,GAAA,EAAAwB,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAxB,GAAA,IAAAO,MAAA,CAAAgB,cAAA,CAAAvB,GAAA,EAAAwB,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAZ,UAAA,QAAAc,YAAA,QAAAC,QAAA,oBAAA5B,GAAA,CAAAwB,GAAA,IAAAC,KAAA,WAAAzB,GAAA;AAAA,SAAA0B,eAAApB,CAAA,QAAAuB,CAAA,GAAAC,YAAA,CAAAxB,CAAA,uCAAAuB,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAxB,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAyB,MAAA,CAAAC,WAAA,kBAAA5B,CAAA,QAAAyB,CAAA,GAAAzB,CAAA,CAAA6B,IAAA,CAAA3B,CAAA,EAAAD,CAAA,uCAAAwB,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAA7B,CAAA,GAAA8B,MAAA,GAAAC,MAAA,EAAA9B,CAAA,KADxF;AAGA,MAAM+B,0BAA0B,GAAIC,KAAK,iBACvC,IAAAvC,WAAA,CAAAwC,GAAA,EAAC3C,oBAAA,CAAAM,OAAmB,EAAAc,aAAA,KAAKsB,KAAK,CAAG,CAClC;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAvC,OAAA,GAEamC,0BAA0B","ignoreList":[]}
@@ -0,0 +1,512 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _classnames = _interopRequireDefault(require("classnames"));
10
+ var _i18n = require("@edx/frontend-platform/i18n");
11
+ var _analytics = require("@edx/frontend-platform/analytics");
12
+ var _paragon = require("@openedx/paragon");
13
+ var _icons = require("@openedx/paragon/icons");
14
+ var _localStorage = require("@src/data/localStorage");
15
+ var _upgradeButton = require("@src/generic/upgrade-button");
16
+ var _UpsellBullets = require("@src/generic/upsell-bullets/UpsellBullets");
17
+ var _messages = _interopRequireDefault(require("@src/generic/messages"));
18
+ var _jsxRuntime = require("react/jsx-runtime");
19
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
21
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
22
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
25
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
26
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint import/no-unresolved: 0 */
27
+ const UpsellNoFBECardContent = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)("ul", {
28
+ className: "fa-ul upgrade-notification-ul pt-0",
29
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_UpsellBullets.VerifiedCertBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpsellBullets.SupportMissionBullet, {})]
30
+ });
31
+ const UpsellFBEFarAwayCardContent = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)("ul", {
32
+ className: "fa-ul upgrade-notification-ul",
33
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_UpsellBullets.VerifiedCertBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpsellBullets.UnlockGradedBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpsellBullets.FullAccessBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpsellBullets.SupportMissionBullet, {})]
34
+ });
35
+ const UpsellFBESoonCardContent = _ref => {
36
+ let {
37
+ accessExpirationDate,
38
+ timezoneFormatArgs
39
+ } = _ref;
40
+ const includingAnyProgress = /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
41
+ className: "font-weight-bold",
42
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
43
+ id: "learning.generic.upgradeNotification.expirationAccessLoss.progress",
44
+ defaultMessage: "including any progress"
45
+ })
46
+ });
47
+ const date = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedDate, _objectSpread({
48
+ day: "numeric",
49
+ month: "long",
50
+ value: new Date(accessExpirationDate)
51
+ }, timezoneFormatArgs), "accessDate");
52
+ const benefitsOfUpgrading = /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
53
+ className: "inline-link-underline font-weight-bold",
54
+ rel: "noopener noreferrer",
55
+ target: "_blank",
56
+ href: "https://support.edx.org/hc/en-us/articles/360013426573-What-are-the-differences-between-audit-free-and-verified-paid-courses-",
57
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
58
+ id: "learning.generic.upgradeNotification.expirationVerifiedCert.benefits",
59
+ defaultMessage: "benefits of upgrading"
60
+ })
61
+ });
62
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
63
+ className: "upgrade-notification-text",
64
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
65
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
66
+ id: "learning.generic.upgradeNotification.expirationAccessLoss",
67
+ defaultMessage: "You will lose all access to this course, {includingAnyProgress}, on {date}.",
68
+ values: {
69
+ includingAnyProgress,
70
+ date
71
+ }
72
+ })
73
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
74
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
75
+ id: "learning.generic.upgradeNotification.expirationVerifiedCert",
76
+ defaultMessage: "Upgrading your course enables you to pursue a verified certificate and unlocks numerous features. Learn more about the {benefitsOfUpgrading}.",
77
+ values: {
78
+ benefitsOfUpgrading
79
+ }
80
+ })
81
+ })]
82
+ });
83
+ };
84
+ UpsellFBESoonCardContent.propTypes = {
85
+ accessExpirationDate: _propTypes.default.PropTypes.instanceOf(Date).isRequired,
86
+ timezoneFormatArgs: _propTypes.default.shape({
87
+ timeZone: _propTypes.default.string
88
+ })
89
+ };
90
+ UpsellFBESoonCardContent.defaultProps = {
91
+ timezoneFormatArgs: {}
92
+ };
93
+ const PastExpirationCardContent = () => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
94
+ className: "upgrade-notification-text",
95
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
96
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
97
+ id: "learning.generic.upgradeNotification.pastExpiration.content",
98
+ defaultMessage: "The upgrade deadline for this course passed. To upgrade, enroll in the next available session."
99
+ })
100
+ })
101
+ });
102
+ const ExpirationCountdown = _ref2 => {
103
+ let {
104
+ courseId,
105
+ hoursToExpiration,
106
+ setupgradeNotificationCurrentState,
107
+ type
108
+ } = _ref2;
109
+ let expirationText;
110
+ if (hoursToExpiration >= 24) {
111
+ // More than 1 day left
112
+ // setupgradeNotificationCurrentState is available in NotificationTray (not course home)
113
+ if (setupgradeNotificationCurrentState) {
114
+ if (type === 'access') {
115
+ setupgradeNotificationCurrentState('accessDaysLeft');
116
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'accessDaysLeft');
117
+ }
118
+ if (type === 'offer') {
119
+ setupgradeNotificationCurrentState('FPDdaysLeft');
120
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'FPDdaysLeft');
121
+ }
122
+ }
123
+ expirationText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
124
+ id: "learning.generic.upgradeNotification.expirationDays",
125
+ defaultMessage: `{dayCount, number} {dayCount, plural,
126
+ one {day}
127
+ other {days}} left`,
128
+ values: {
129
+ dayCount: Math.floor(hoursToExpiration / 24)
130
+ }
131
+ });
132
+ } else if (hoursToExpiration >= 1) {
133
+ // More than 1 hour left
134
+ // setupgradeNotificationCurrentState is available in NotificationTray (not course home)
135
+ if (setupgradeNotificationCurrentState) {
136
+ if (type === 'access') {
137
+ setupgradeNotificationCurrentState('accessHoursLeft');
138
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'accessHoursLeft');
139
+ }
140
+ if (type === 'offer') {
141
+ setupgradeNotificationCurrentState('FPDHoursLeft');
142
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'FPDHoursLeft');
143
+ }
144
+ }
145
+ expirationText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
146
+ id: "learning.generic.upgradeNotification.expirationHours",
147
+ defaultMessage: `{hourCount, number} {hourCount, plural,
148
+ one {hour}
149
+ other {hours}} left`,
150
+ values: {
151
+ hourCount: hoursToExpiration
152
+ }
153
+ });
154
+ } else {
155
+ // Less than 1 hour
156
+ // setupgradeNotificationCurrentState is available in NotificationTray (not course home)
157
+ if (setupgradeNotificationCurrentState) {
158
+ if (type === 'access') {
159
+ setupgradeNotificationCurrentState('accessLastHour');
160
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'accessLastHour');
161
+ }
162
+ if (type === 'offer') {
163
+ setupgradeNotificationCurrentState('FPDLastHour');
164
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'FPDLastHour');
165
+ }
166
+ }
167
+ expirationText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
168
+ id: "learning.generic.upgradeNotification.expirationMinutes",
169
+ defaultMessage: "Less than 1 hour left"
170
+ });
171
+ }
172
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
173
+ className: "upsell-warning",
174
+ children: expirationText
175
+ });
176
+ };
177
+ ExpirationCountdown.propTypes = {
178
+ courseId: _propTypes.default.string.isRequired,
179
+ hoursToExpiration: _propTypes.default.number.isRequired,
180
+ setupgradeNotificationCurrentState: _propTypes.default.func,
181
+ type: _propTypes.default.string
182
+ };
183
+ ExpirationCountdown.defaultProps = {
184
+ setupgradeNotificationCurrentState: null,
185
+ type: null
186
+ };
187
+ const AccessExpirationDateBanner = _ref3 => {
188
+ let {
189
+ courseId,
190
+ accessExpirationDate,
191
+ timezoneFormatArgs,
192
+ setupgradeNotificationCurrentState
193
+ } = _ref3;
194
+ if (setupgradeNotificationCurrentState) {
195
+ setupgradeNotificationCurrentState('accessDateView');
196
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'accessDateView');
197
+ }
198
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
199
+ className: "upsell-warning-light",
200
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
201
+ id: "learning.generic.upgradeNotification.expiration",
202
+ defaultMessage: "Course access will expire {date}",
203
+ values: {
204
+ date: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedDate, _objectSpread({
205
+ day: "numeric",
206
+ month: "long",
207
+ value: accessExpirationDate
208
+ }, timezoneFormatArgs), "accessExpireDate")
209
+ }
210
+ })
211
+ });
212
+ };
213
+ AccessExpirationDateBanner.propTypes = {
214
+ courseId: _propTypes.default.string.isRequired,
215
+ accessExpirationDate: _propTypes.default.PropTypes.instanceOf(Date).isRequired,
216
+ timezoneFormatArgs: _propTypes.default.shape({
217
+ timeZone: _propTypes.default.string
218
+ }),
219
+ setupgradeNotificationCurrentState: _propTypes.default.func
220
+ };
221
+ AccessExpirationDateBanner.defaultProps = {
222
+ timezoneFormatArgs: {},
223
+ setupgradeNotificationCurrentState: null
224
+ };
225
+ const PastExpirationDateBanner = _ref4 => {
226
+ let {
227
+ courseId,
228
+ accessExpirationDate,
229
+ timezoneFormatArgs,
230
+ setupgradeNotificationCurrentState
231
+ } = _ref4;
232
+ if (setupgradeNotificationCurrentState) {
233
+ setupgradeNotificationCurrentState('PastExpirationDate');
234
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'PastExpirationDate');
235
+ }
236
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
237
+ className: "upsell-warning",
238
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
239
+ id: "learning.generic.upgradeNotification.pastExpiration.banner",
240
+ defaultMessage: "Upgrade deadline passed on {date}",
241
+ values: {
242
+ date: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedDate, _objectSpread({
243
+ day: "numeric",
244
+ month: "long",
245
+ value: accessExpirationDate
246
+ }, timezoneFormatArgs), "accessExpireDate")
247
+ }
248
+ })
249
+ });
250
+ };
251
+ PastExpirationDateBanner.propTypes = {
252
+ courseId: _propTypes.default.string.isRequired,
253
+ accessExpirationDate: _propTypes.default.PropTypes.instanceOf(Date).isRequired,
254
+ timezoneFormatArgs: _propTypes.default.shape({
255
+ timeZone: _propTypes.default.string
256
+ }),
257
+ setupgradeNotificationCurrentState: _propTypes.default.func
258
+ };
259
+ PastExpirationDateBanner.defaultProps = {
260
+ timezoneFormatArgs: {},
261
+ setupgradeNotificationCurrentState: null
262
+ };
263
+ const ExperimentalUpgradeNotification = _ref5 => {
264
+ let {
265
+ accessExpiration,
266
+ contentTypeGatingEnabled,
267
+ marketingUrl,
268
+ courseId,
269
+ offer,
270
+ org,
271
+ setupgradeNotificationCurrentState,
272
+ shouldDisplayBorder,
273
+ timeOffsetMillis,
274
+ upsellPageName,
275
+ userTimezone,
276
+ verifiedMode,
277
+ toggleSidebar
278
+ } = _ref5;
279
+ const intl = (0, _i18n.useIntl)();
280
+ const dateNow = Date.now();
281
+ const timezoneFormatArgs = userTimezone ? {
282
+ timeZone: userTimezone
283
+ } : {};
284
+ const correctedTime = new Date(dateNow + timeOffsetMillis);
285
+ const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;
286
+ const pastExpirationDeadline = accessExpiration ? new Date(dateNow) > accessExpirationDate : false;
287
+ const eventProperties = {
288
+ org_key: org,
289
+ courserun_key: courseId
290
+ };
291
+ const promotionEventProperties = _objectSpread({
292
+ creative: 'sidebarupsell',
293
+ name: 'In-Course Verification Prompt',
294
+ position: 'sidebar-message',
295
+ promotion_id: 'courseware_verified_certificate_upsell'
296
+ }, eventProperties);
297
+ (0, _react.useEffect)(() => {
298
+ (0, _analytics.sendTrackingLogEvent)('edx.bi.course.upgrade.sidebarupsell.displayed', eventProperties);
299
+ (0, _analytics.sendTrackEvent)('Promotion Viewed', promotionEventProperties);
300
+ // eslint-disable-next-line react-hooks/exhaustive-deps
301
+ }, []);
302
+ if (!verifiedMode) {
303
+ return null;
304
+ }
305
+ const logClick = () => {
306
+ (0, _analytics.sendTrackingLogEvent)('edx.bi.course.upgrade.sidebarupsell.clicked', eventProperties);
307
+ (0, _analytics.sendTrackingLogEvent)('edx.course.enrollment.upgrade.clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
308
+ location: 'sidebar-message'
309
+ }));
310
+ (0, _analytics.sendTrackEvent)('Promotion Clicked', promotionEventProperties);
311
+ (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
312
+ linkCategory: 'green_upgrade',
313
+ linkName: `${upsellPageName}_green`,
314
+ linkType: 'button',
315
+ pageName: upsellPageName
316
+ }));
317
+ };
318
+ const logClickPastExpiration = () => {
319
+ (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upgrade_notification.past_expiration.button_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
320
+ linkCategory: 'upgrade_notification',
321
+ linkName: `${upsellPageName}_course_details`,
322
+ linkType: 'button',
323
+ pageName: upsellPageName
324
+ }));
325
+ };
326
+
327
+ /*
328
+ There are 5 parts that change in the upgrade card:
329
+ upgradeNotificationHeaderText
330
+ expirationBanner
331
+ upsellMessage
332
+ callToActionButton
333
+ offerCode
334
+ */
335
+ let upgradeNotificationHeaderText;
336
+ let expirationBanner;
337
+ let upsellMessage;
338
+ let callToActionButton;
339
+ let offerCode;
340
+ if (!!accessExpiration && !!contentTypeGatingEnabled) {
341
+ const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);
342
+ if (hoursToAccessExpiration >= 7 * 24) {
343
+ if (offer) {
344
+ // countdown to the first purchase discount if there is one
345
+ const hoursToDiscountExpiration = Math.floor((new Date(offer.expirationDate) - correctedTime) / 1000 / 60 / 60);
346
+ upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
347
+ id: "learning.generic.upgradeNotification.firstTimeLearnerDiscount",
348
+ defaultMessage: "{percentage}% First-Time Learner Discount",
349
+ values: {
350
+ percentage: offer.percentage
351
+ }
352
+ });
353
+ expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(ExpirationCountdown, {
354
+ courseId: courseId,
355
+ hoursToExpiration: hoursToDiscountExpiration,
356
+ setupgradeNotificationCurrentState: setupgradeNotificationCurrentState,
357
+ type: "offer"
358
+ });
359
+ } else {
360
+ upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
361
+ id: "learning.generic.upgradeNotification.accessExpiration",
362
+ defaultMessage: "Upgrade your course today"
363
+ });
364
+ expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(AccessExpirationDateBanner, {
365
+ courseId: courseId,
366
+ accessExpirationDate: accessExpirationDate,
367
+ timezoneFormatArgs: timezoneFormatArgs,
368
+ setupgradeNotificationCurrentState: setupgradeNotificationCurrentState
369
+ });
370
+ }
371
+ upsellMessage = /*#__PURE__*/(0, _jsxRuntime.jsx)(UpsellFBEFarAwayCardContent, {});
372
+ } else if (hoursToAccessExpiration < 7 * 24 && hoursToAccessExpiration >= 0) {
373
+ // more urgent messaging if there's less than 7 days left to access expiration
374
+ upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
375
+ id: "learning.generic.upgradeNotification.accessExpirationUrgent",
376
+ defaultMessage: "Course Access Expiration"
377
+ });
378
+ expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(ExpirationCountdown, {
379
+ courseId: courseId,
380
+ hoursToExpiration: hoursToAccessExpiration,
381
+ setupgradeNotificationCurrentState: setupgradeNotificationCurrentState,
382
+ type: "access"
383
+ });
384
+ upsellMessage = /*#__PURE__*/(0, _jsxRuntime.jsx)(UpsellFBESoonCardContent, {
385
+ accessExpirationDate: accessExpirationDate,
386
+ timezoneFormatArgs: timezoneFormatArgs
387
+ });
388
+ } else {
389
+ // access expiration deadline has passed
390
+ upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
391
+ id: "learning.generic.upgradeNotification.accessExpirationPast",
392
+ defaultMessage: "Course Access Expiration"
393
+ });
394
+ expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(PastExpirationDateBanner, {
395
+ courseId: courseId,
396
+ accessExpirationDate: accessExpirationDate,
397
+ timezoneFormatArgs: timezoneFormatArgs,
398
+ setupgradeNotificationCurrentState: setupgradeNotificationCurrentState
399
+ });
400
+ upsellMessage = /*#__PURE__*/(0, _jsxRuntime.jsx)(PastExpirationCardContent, {});
401
+ }
402
+ } else {
403
+ // FBE is turned off
404
+ upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
405
+ id: "learning.generic.upgradeNotification.pursueAverifiedCertificate",
406
+ defaultMessage: "Pursue a verified certificate"
407
+ });
408
+ upsellMessage = /*#__PURE__*/(0, _jsxRuntime.jsx)(UpsellNoFBECardContent, {});
409
+ }
410
+ if (pastExpirationDeadline) {
411
+ callToActionButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
412
+ variant: "primary",
413
+ onClick: logClickPastExpiration,
414
+ href: marketingUrl,
415
+ block: true,
416
+ children: "View Course Details"
417
+ });
418
+ } else {
419
+ callToActionButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(_upgradeButton.UpgradeButton, {
420
+ offer: offer,
421
+ onClick: logClick,
422
+ verifiedMode: verifiedMode,
423
+ block: true
424
+ });
425
+ }
426
+ if (offer) {
427
+ // if there's a first purchase discount, message the code at the bottom
428
+ offerCode = /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
429
+ className: "text-center discount-info",
430
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
431
+ id: "learning.generic.upgradeNotification.code",
432
+ defaultMessage: "Use code {code} at checkout",
433
+ values: {
434
+ code: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
435
+ className: "font-weight-bold",
436
+ children: offer.code
437
+ })
438
+ }
439
+ })
440
+ });
441
+ }
442
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("section", {
443
+ className: (0, _classnames.default)('upgrade-notification small', {
444
+ 'card mb-4': shouldDisplayBorder
445
+ }),
446
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
447
+ id: "courseHome-upgradeNotification",
448
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("h2", {
449
+ className: (0, _classnames.default)('h5 upgrade-notification-header', {
450
+ 'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar
451
+ }),
452
+ id: "outline-sidebar-upgrade-header",
453
+ children: [upgradeNotificationHeaderText, !!toggleSidebar && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
454
+ className: "d-inline-flex ml-auto",
455
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.IconButton, {
456
+ src: _icons.Close,
457
+ size: "sm",
458
+ iconAs: _paragon.Icon,
459
+ onClick: toggleSidebar,
460
+ className: "icon-hover",
461
+ alt: intl.formatMessage(_messages.default.close)
462
+ })
463
+ })]
464
+ }), expirationBanner, /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
465
+ className: "upgrade-notification-message",
466
+ children: upsellMessage
467
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
468
+ className: "upgrade-notification-button",
469
+ children: callToActionButton
470
+ }), offerCode]
471
+ })
472
+ });
473
+ };
474
+ ExperimentalUpgradeNotification.propTypes = {
475
+ courseId: _propTypes.default.string.isRequired,
476
+ org: _propTypes.default.string.isRequired,
477
+ accessExpiration: _propTypes.default.shape({
478
+ expirationDate: _propTypes.default.string
479
+ }),
480
+ contentTypeGatingEnabled: _propTypes.default.bool,
481
+ marketingUrl: _propTypes.default.string,
482
+ offer: _propTypes.default.shape({
483
+ expirationDate: _propTypes.default.string,
484
+ percentage: _propTypes.default.number,
485
+ code: _propTypes.default.string
486
+ }),
487
+ toggleSidebar: _propTypes.default.func,
488
+ shouldDisplayBorder: _propTypes.default.bool,
489
+ setupgradeNotificationCurrentState: _propTypes.default.func,
490
+ timeOffsetMillis: _propTypes.default.number,
491
+ upsellPageName: _propTypes.default.string.isRequired,
492
+ userTimezone: _propTypes.default.string,
493
+ verifiedMode: _propTypes.default.shape({
494
+ currencySymbol: _propTypes.default.string.isRequired,
495
+ price: _propTypes.default.number.isRequired,
496
+ upgradeUrl: _propTypes.default.string.isRequired
497
+ })
498
+ };
499
+ ExperimentalUpgradeNotification.defaultProps = {
500
+ accessExpiration: null,
501
+ contentTypeGatingEnabled: false,
502
+ marketingUrl: null,
503
+ offer: null,
504
+ setupgradeNotificationCurrentState: null,
505
+ shouldDisplayBorder: null,
506
+ timeOffsetMillis: 0,
507
+ userTimezone: null,
508
+ verifiedMode: null,
509
+ toggleSidebar: null
510
+ };
511
+ var _default = exports.default = (0, _i18n.injectIntl)(ExperimentalUpgradeNotification);
512
+ //# sourceMappingURL=ExperimentalUpgradeNotification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExperimentalUpgradeNotification.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_analytics","_paragon","_icons","_localStorage","_upgradeButton","_UpsellBullets","_messages","_jsxRuntime","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","ownKeys","keys","getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","key","value","_toPropertyKey","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","UpsellNoFBECardContent","jsxs","className","children","jsx","VerifiedCertBullet","SupportMissionBullet","UpsellFBEFarAwayCardContent","UnlockGradedBullet","FullAccessBullet","UpsellFBESoonCardContent","_ref","accessExpirationDate","timezoneFormatArgs","includingAnyProgress","FormattedMessage","id","defaultMessage","date","FormattedDate","day","month","Date","benefitsOfUpgrading","rel","target","href","values","propTypes","PropTypes","instanceOf","isRequired","shape","timeZone","string","defaultProps","PastExpirationCardContent","ExpirationCountdown","_ref2","courseId","hoursToExpiration","setupgradeNotificationCurrentState","type","expirationText","setLocalStorage","dayCount","Math","floor","hourCount","number","func","AccessExpirationDateBanner","_ref3","PastExpirationDateBanner","_ref4","ExperimentalUpgradeNotification","_ref5","accessExpiration","contentTypeGatingEnabled","marketingUrl","offer","org","shouldDisplayBorder","timeOffsetMillis","upsellPageName","userTimezone","verifiedMode","toggleSidebar","intl","useIntl","dateNow","now","correctedTime","expirationDate","pastExpirationDeadline","eventProperties","org_key","courserun_key","promotionEventProperties","creative","name","position","promotion_id","useEffect","sendTrackingLogEvent","sendTrackEvent","logClick","location","linkCategory","linkName","linkType","pageName","logClickPastExpiration","upgradeNotificationHeaderText","expirationBanner","upsellMessage","callToActionButton","offerCode","hoursToAccessExpiration","hoursToDiscountExpiration","percentage","Button","variant","onClick","block","UpgradeButton","code","classNames","IconButton","src","Close","size","iconAs","Icon","alt","formatMessage","messages","close","bool","currencySymbol","price","upgradeUrl","_default","exports","injectIntl"],"sources":["../../src/upgrade-notification/ExperimentalUpgradeNotification.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport {\n useIntl, FormattedDate, FormattedMessage, injectIntl,\n} from '@edx/frontend-platform/i18n';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { Button, Icon, IconButton } from '@openedx/paragon';\nimport { Close } from '@openedx/paragon/icons';\n\nimport { setLocalStorage } from '@src/data/localStorage';\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport {\n VerifiedCertBullet,\n UnlockGradedBullet,\n FullAccessBullet,\n SupportMissionBullet,\n} from '@src/generic/upsell-bullets/UpsellBullets';\nimport messages from '@src/generic/messages';\n\nconst UpsellNoFBECardContent = () => (\n <ul className=\"fa-ul upgrade-notification-ul pt-0\">\n <VerifiedCertBullet />\n <SupportMissionBullet />\n </ul>\n);\n\nconst UpsellFBEFarAwayCardContent = () => (\n <ul className=\"fa-ul upgrade-notification-ul\">\n <VerifiedCertBullet />\n <UnlockGradedBullet />\n <FullAccessBullet />\n <SupportMissionBullet />\n </ul>\n);\n\nconst UpsellFBESoonCardContent = ({ accessExpirationDate, timezoneFormatArgs }) => {\n const includingAnyProgress = (\n <span className=\"font-weight-bold\">\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationAccessLoss.progress\"\n defaultMessage=\"including any progress\"\n />\n </span>\n );\n\n const date = (\n <FormattedDate\n key=\"accessDate\"\n day=\"numeric\"\n month=\"long\"\n value={new Date(accessExpirationDate)}\n {...timezoneFormatArgs}\n />\n );\n\n const benefitsOfUpgrading = (\n <a className=\"inline-link-underline font-weight-bold\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://support.edx.org/hc/en-us/articles/360013426573-What-are-the-differences-between-audit-free-and-verified-paid-courses-\">\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationVerifiedCert.benefits\"\n defaultMessage=\"benefits of upgrading\"\n />\n </a>\n );\n\n return (\n <div className=\"upgrade-notification-text\">\n <p>\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationAccessLoss\"\n defaultMessage=\"You will lose all access to this course, {includingAnyProgress}, on {date}.\"\n values={{\n includingAnyProgress,\n date,\n }}\n />\n </p>\n <p>\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationVerifiedCert\"\n defaultMessage=\"Upgrading your course enables you to pursue a verified certificate and unlocks numerous features. Learn more about the {benefitsOfUpgrading}.\"\n values={{ benefitsOfUpgrading }}\n />\n </p>\n </div>\n );\n};\n\nUpsellFBESoonCardContent.propTypes = {\n accessExpirationDate: PropTypes.PropTypes.instanceOf(Date).isRequired,\n timezoneFormatArgs: PropTypes.shape({\n timeZone: PropTypes.string,\n }),\n};\n\nUpsellFBESoonCardContent.defaultProps = {\n timezoneFormatArgs: {},\n};\n\nconst PastExpirationCardContent = () => (\n <div className=\"upgrade-notification-text\">\n <p>\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.pastExpiration.content\"\n defaultMessage=\"The upgrade deadline for this course passed. To upgrade, enroll in the next available session.\"\n />\n </p>\n </div>\n);\n\nconst ExpirationCountdown = ({\n courseId, hoursToExpiration, setupgradeNotificationCurrentState, type,\n}) => {\n let expirationText;\n if (hoursToExpiration >= 24) { // More than 1 day left\n // setupgradeNotificationCurrentState is available in NotificationTray (not course home)\n if (setupgradeNotificationCurrentState) {\n if (type === 'access') {\n setupgradeNotificationCurrentState('accessDaysLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessDaysLeft');\n }\n if (type === 'offer') {\n setupgradeNotificationCurrentState('FPDdaysLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'FPDdaysLeft');\n }\n }\n expirationText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationDays\"\n defaultMessage={`{dayCount, number} {dayCount, plural,\n one {day}\n other {days}} left`}\n values={{\n dayCount: (Math.floor(hoursToExpiration / 24)),\n }}\n />\n );\n } else if (hoursToExpiration >= 1) { // More than 1 hour left\n // setupgradeNotificationCurrentState is available in NotificationTray (not course home)\n if (setupgradeNotificationCurrentState) {\n if (type === 'access') {\n setupgradeNotificationCurrentState('accessHoursLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessHoursLeft');\n }\n if (type === 'offer') {\n setupgradeNotificationCurrentState('FPDHoursLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'FPDHoursLeft');\n }\n }\n expirationText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationHours\"\n defaultMessage={`{hourCount, number} {hourCount, plural,\n one {hour}\n other {hours}} left`}\n values={{\n hourCount: (hoursToExpiration),\n }}\n />\n );\n } else { // Less than 1 hour\n // setupgradeNotificationCurrentState is available in NotificationTray (not course home)\n if (setupgradeNotificationCurrentState) {\n if (type === 'access') {\n setupgradeNotificationCurrentState('accessLastHour');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessLastHour');\n }\n if (type === 'offer') {\n setupgradeNotificationCurrentState('FPDLastHour');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'FPDLastHour');\n }\n }\n expirationText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationMinutes\"\n defaultMessage=\"Less than 1 hour left\"\n />\n );\n }\n return (<div className=\"upsell-warning\">{expirationText}</div>);\n};\n\nExpirationCountdown.propTypes = {\n courseId: PropTypes.string.isRequired,\n hoursToExpiration: PropTypes.number.isRequired,\n setupgradeNotificationCurrentState: PropTypes.func,\n type: PropTypes.string,\n};\nExpirationCountdown.defaultProps = {\n setupgradeNotificationCurrentState: null,\n type: null,\n};\n\nconst AccessExpirationDateBanner = ({\n courseId, accessExpirationDate, timezoneFormatArgs, setupgradeNotificationCurrentState,\n}) => {\n if (setupgradeNotificationCurrentState) {\n setupgradeNotificationCurrentState('accessDateView');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessDateView');\n }\n return (\n <div className=\"upsell-warning-light\">\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expiration\"\n defaultMessage=\"Course access will expire {date}\"\n values={{\n date: (\n <FormattedDate\n key=\"accessExpireDate\"\n day=\"numeric\"\n month=\"long\"\n value={accessExpirationDate}\n {...timezoneFormatArgs}\n />\n ),\n }}\n />\n </div>\n );\n};\n\nAccessExpirationDateBanner.propTypes = {\n courseId: PropTypes.string.isRequired,\n accessExpirationDate: PropTypes.PropTypes.instanceOf(Date).isRequired,\n timezoneFormatArgs: PropTypes.shape({\n timeZone: PropTypes.string,\n }),\n setupgradeNotificationCurrentState: PropTypes.func,\n};\n\nAccessExpirationDateBanner.defaultProps = {\n timezoneFormatArgs: {},\n setupgradeNotificationCurrentState: null,\n};\n\nconst PastExpirationDateBanner = ({\n courseId, accessExpirationDate, timezoneFormatArgs, setupgradeNotificationCurrentState,\n}) => {\n if (setupgradeNotificationCurrentState) {\n setupgradeNotificationCurrentState('PastExpirationDate');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'PastExpirationDate');\n }\n return (\n <div className=\"upsell-warning\">\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.pastExpiration.banner\"\n defaultMessage=\"Upgrade deadline passed on {date}\"\n values={{\n date: (\n <FormattedDate\n key=\"accessExpireDate\"\n day=\"numeric\"\n month=\"long\"\n value={accessExpirationDate}\n {...timezoneFormatArgs}\n />\n ),\n }}\n />\n </div>\n );\n};\n\nPastExpirationDateBanner.propTypes = {\n courseId: PropTypes.string.isRequired,\n accessExpirationDate: PropTypes.PropTypes.instanceOf(Date).isRequired,\n timezoneFormatArgs: PropTypes.shape({\n timeZone: PropTypes.string,\n }),\n setupgradeNotificationCurrentState: PropTypes.func,\n};\n\nPastExpirationDateBanner.defaultProps = {\n timezoneFormatArgs: {},\n setupgradeNotificationCurrentState: null,\n};\n\nconst ExperimentalUpgradeNotification = ({\n accessExpiration,\n contentTypeGatingEnabled,\n marketingUrl,\n courseId,\n offer,\n org,\n setupgradeNotificationCurrentState,\n shouldDisplayBorder,\n timeOffsetMillis,\n upsellPageName,\n userTimezone,\n verifiedMode,\n toggleSidebar,\n}) => {\n const intl = useIntl();\n const dateNow = Date.now();\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n const correctedTime = new Date(dateNow + timeOffsetMillis);\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;\n const pastExpirationDeadline = accessExpiration ? new Date(dateNow) > accessExpirationDate : false;\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n\n const promotionEventProperties = {\n creative: 'sidebarupsell',\n name: 'In-Course Verification Prompt',\n position: 'sidebar-message',\n promotion_id: 'courseware_verified_certificate_upsell',\n ...eventProperties,\n };\n\n useEffect(() => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.displayed', eventProperties);\n sendTrackEvent('Promotion Viewed', promotionEventProperties);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!verifiedMode) {\n return null;\n }\n\n const logClick = () => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.clicked', eventProperties);\n sendTrackingLogEvent('edx.course.enrollment.upgrade.clicked', {\n ...eventProperties,\n location: 'sidebar-message',\n });\n sendTrackEvent('Promotion Clicked', promotionEventProperties);\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'green_upgrade',\n linkName: `${upsellPageName}_green`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.upgrade_notification.past_expiration.button_clicked', {\n ...eventProperties,\n linkCategory: 'upgrade_notification',\n linkName: `${upsellPageName}_course_details`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n /*\n There are 5 parts that change in the upgrade card:\n upgradeNotificationHeaderText\n expirationBanner\n upsellMessage\n callToActionButton\n offerCode\n */\n let upgradeNotificationHeaderText;\n let expirationBanner;\n let upsellMessage;\n let callToActionButton;\n let offerCode;\n\n if (!!accessExpiration && !!contentTypeGatingEnabled) {\n const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);\n\n if (hoursToAccessExpiration >= (7 * 24)) {\n if (offer) { // countdown to the first purchase discount if there is one\n const hoursToDiscountExpiration = Math.floor((new Date(offer.expirationDate) - correctedTime) / 1000 / 60 / 60);\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.firstTimeLearnerDiscount\"\n defaultMessage=\"{percentage}% First-Time Learner Discount\"\n values={{\n percentage: (offer.percentage),\n }}\n />\n );\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToDiscountExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"offer\"\n />\n );\n } else {\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.accessExpiration\"\n defaultMessage=\"Upgrade your course today\"\n />\n );\n expirationBanner = (\n <AccessExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n }\n upsellMessage = <UpsellFBEFarAwayCardContent />;\n } else if (hoursToAccessExpiration < (7 * 24) && hoursToAccessExpiration >= 0) {\n // more urgent messaging if there's less than 7 days left to access expiration\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.accessExpirationUrgent\"\n defaultMessage=\"Course Access Expiration\"\n />\n );\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToAccessExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"access\"\n />\n );\n upsellMessage = (\n <UpsellFBESoonCardContent\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n />\n );\n } else { // access expiration deadline has passed\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.accessExpirationPast\"\n defaultMessage=\"Course Access Expiration\"\n />\n );\n expirationBanner = (\n <PastExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n upsellMessage = (\n <PastExpirationCardContent />\n );\n }\n } else { // FBE is turned off\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.pursueAverifiedCertificate\"\n defaultMessage=\"Pursue a verified certificate\"\n />\n );\n upsellMessage = (<UpsellNoFBECardContent />);\n }\n\n if (pastExpirationDeadline) {\n callToActionButton = (\n <Button\n variant=\"primary\"\n onClick={logClickPastExpiration}\n href={marketingUrl}\n block\n >\n View Course Details\n </Button>\n );\n } else {\n callToActionButton = (\n <UpgradeButton\n offer={offer}\n onClick={logClick}\n verifiedMode={verifiedMode}\n block\n />\n );\n }\n\n if (offer) { // if there's a first purchase discount, message the code at the bottom\n offerCode = (\n <div className=\"text-center discount-info\">\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.code\"\n defaultMessage=\"Use code {code} at checkout\"\n values={{\n code: (<span className=\"font-weight-bold\">{offer.code}</span>),\n }}\n />\n </div>\n );\n }\n\n return (\n <section className={classNames('upgrade-notification small', { 'card mb-4': shouldDisplayBorder })}>\n <div id=\"courseHome-upgradeNotification\">\n <h2\n className={classNames('h5 upgrade-notification-header', {\n 'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar,\n })}\n id=\"outline-sidebar-upgrade-header\"\n >\n {upgradeNotificationHeaderText}\n {!!toggleSidebar && (\n <div className=\"d-inline-flex ml-auto\">\n <IconButton\n src={Close}\n size=\"sm\"\n iconAs={Icon}\n onClick={toggleSidebar}\n className=\"icon-hover\"\n alt={intl.formatMessage(messages.close)}\n />\n </div>\n )}\n </h2>\n {expirationBanner}\n <div className=\"upgrade-notification-message\">\n {upsellMessage}\n </div>\n <div className=\"upgrade-notification-button\">\n {callToActionButton}\n </div>\n {offerCode}\n </div>\n </section>\n );\n};\n\nExperimentalUpgradeNotification.propTypes = {\n courseId: PropTypes.string.isRequired,\n org: PropTypes.string.isRequired,\n accessExpiration: PropTypes.shape({\n expirationDate: PropTypes.string,\n }),\n contentTypeGatingEnabled: PropTypes.bool,\n marketingUrl: PropTypes.string,\n offer: PropTypes.shape({\n expirationDate: PropTypes.string,\n percentage: PropTypes.number,\n code: PropTypes.string,\n }),\n toggleSidebar: PropTypes.func,\n shouldDisplayBorder: PropTypes.bool,\n setupgradeNotificationCurrentState: PropTypes.func,\n timeOffsetMillis: PropTypes.number,\n upsellPageName: PropTypes.string.isRequired,\n userTimezone: PropTypes.string,\n verifiedMode: PropTypes.shape({\n currencySymbol: PropTypes.string.isRequired,\n price: PropTypes.number.isRequired,\n upgradeUrl: PropTypes.string.isRequired,\n }),\n};\n\nExperimentalUpgradeNotification.defaultProps = {\n accessExpiration: null,\n contentTypeGatingEnabled: false,\n marketingUrl: null,\n offer: null,\n setupgradeNotificationCurrentState: null,\n shouldDisplayBorder: null,\n timeOffsetMillis: 0,\n userTimezone: null,\n verifiedMode: null,\n toggleSidebar: null,\n};\n\nexport default injectIntl(ExperimentalUpgradeNotification);\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,WAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AAGA,IAAAK,UAAA,GAAAL,OAAA;AACA,IAAAM,QAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAP,OAAA;AAEA,IAAAQ,aAAA,GAAAR,OAAA;AACA,IAAAS,cAAA,GAAAT,OAAA;AACA,IAAAU,cAAA,GAAAV,OAAA;AAMA,IAAAW,SAAA,GAAAT,sBAAA,CAAAF,OAAA;AAA6C,IAAAY,WAAA,GAAAZ,OAAA;AAAA,SAAAE,uBAAAW,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAlB,wBAAAkB,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAH,UAAA,SAAAG,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAF,OAAA,EAAAE,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAC,GAAA,CAAAJ,CAAA,UAAAG,CAAA,CAAAE,GAAA,CAAAL,CAAA,OAAAM,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAZ,CAAA,oBAAAY,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAd,CAAA,EAAAY,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAX,CAAA,EAAAY,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAZ,CAAA,CAAAY,CAAA,YAAAN,CAAA,CAAAR,OAAA,GAAAE,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAa,GAAA,CAAAhB,CAAA,EAAAM,CAAA,GAAAA,CAAA;AAAA,SAAAW,QAAAjB,CAAA,EAAAE,CAAA,QAAAC,CAAA,GAAAM,MAAA,CAAAS,IAAA,CAAAlB,CAAA,OAAAS,MAAA,CAAAU,qBAAA,QAAAC,CAAA,GAAAX,MAAA,CAAAU,qBAAA,CAAAnB,CAAA,GAAAE,CAAA,KAAAkB,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAnB,CAAA,WAAAO,MAAA,CAAAE,wBAAA,CAAAX,CAAA,EAAAE,CAAA,EAAAoB,UAAA,OAAAnB,CAAA,CAAAoB,IAAA,CAAAC,KAAA,CAAArB,CAAA,EAAAiB,CAAA,YAAAjB,CAAA;AAAA,SAAAsB,cAAAzB,CAAA,aAAAE,CAAA,MAAAA,CAAA,GAAAwB,SAAA,CAAAC,MAAA,EAAAzB,CAAA,UAAAC,CAAA,WAAAuB,SAAA,CAAAxB,CAAA,IAAAwB,SAAA,CAAAxB,CAAA,QAAAA,CAAA,OAAAe,OAAA,CAAAR,MAAA,CAAAN,CAAA,OAAAyB,OAAA,WAAA1B,CAAA,IAAA2B,eAAA,CAAA7B,CAAA,EAAAE,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAO,MAAA,CAAAqB,yBAAA,GAAArB,MAAA,CAAAsB,gBAAA,CAAA/B,CAAA,EAAAS,MAAA,CAAAqB,yBAAA,CAAA3B,CAAA,KAAAc,OAAA,CAAAR,MAAA,CAAAN,CAAA,GAAAyB,OAAA,WAAA1B,CAAA,IAAAO,MAAA,CAAAC,cAAA,CAAAV,CAAA,EAAAE,CAAA,EAAAO,MAAA,CAAAE,wBAAA,CAAAR,CAAA,EAAAD,CAAA,iBAAAF,CAAA;AAAA,SAAA6B,gBAAAjC,GAAA,EAAAoC,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAApC,GAAA,IAAAa,MAAA,CAAAC,cAAA,CAAAd,GAAA,EAAAoC,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAX,UAAA,QAAAa,YAAA,QAAAC,QAAA,oBAAAxC,GAAA,CAAAoC,GAAA,IAAAC,KAAA,WAAArC,GAAA;AAAA,SAAAsC,eAAA/B,CAAA,QAAAY,CAAA,GAAAsB,YAAA,CAAAlC,CAAA,uCAAAY,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAsB,aAAAlC,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAH,CAAA,GAAAG,CAAA,CAAAmC,MAAA,CAAAC,WAAA,kBAAAvC,CAAA,QAAAe,CAAA,GAAAf,CAAA,CAAAc,IAAA,CAAAX,CAAA,EAAAD,CAAA,uCAAAa,CAAA,SAAAA,CAAA,YAAAyB,SAAA,yEAAAtC,CAAA,GAAAuC,MAAA,GAAAC,MAAA,EAAAvC,CAAA,KAnB7C;AAqBA,MAAMwC,sBAAsB,GAAGA,CAAA,kBAC7B,IAAAhD,WAAA,CAAAiD,IAAA;EAAIC,SAAS,EAAC,oCAAoC;EAAAC,QAAA,gBAChD,IAAAnD,WAAA,CAAAoD,GAAA,EAACtD,cAAA,CAAAuD,kBAAkB,IAAE,CAAC,eACtB,IAAArD,WAAA,CAAAoD,GAAA,EAACtD,cAAA,CAAAwD,oBAAoB,IAAE,CAAC;AAAA,CACtB,CACL;AAED,MAAMC,2BAA2B,GAAGA,CAAA,kBAClC,IAAAvD,WAAA,CAAAiD,IAAA;EAAIC,SAAS,EAAC,+BAA+B;EAAAC,QAAA,gBAC3C,IAAAnD,WAAA,CAAAoD,GAAA,EAACtD,cAAA,CAAAuD,kBAAkB,IAAE,CAAC,eACtB,IAAArD,WAAA,CAAAoD,GAAA,EAACtD,cAAA,CAAA0D,kBAAkB,IAAE,CAAC,eACtB,IAAAxD,WAAA,CAAAoD,GAAA,EAACtD,cAAA,CAAA2D,gBAAgB,IAAE,CAAC,eACpB,IAAAzD,WAAA,CAAAoD,GAAA,EAACtD,cAAA,CAAAwD,oBAAoB,IAAE,CAAC;AAAA,CACtB,CACL;AAED,MAAMI,wBAAwB,GAAGC,IAAA,IAAkD;EAAA,IAAjD;IAAEC,oBAAoB;IAAEC;EAAmB,CAAC,GAAAF,IAAA;EAC5E,MAAMG,oBAAoB,gBACxB,IAAA9D,WAAA,CAAAoD,GAAA;IAAMF,SAAS,EAAC,kBAAkB;IAAAC,QAAA,eAChC,IAAAnD,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;MACfC,EAAE,EAAC,oEAAoE;MACvEC,cAAc,EAAC;IAAwB,CACxC;EAAC,CACE,CACP;EAED,MAAMC,IAAI,gBACR,IAAAlE,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAA2E,aAAa,EAAArC,aAAA;IAEZsC,GAAG,EAAC,SAAS;IACbC,KAAK,EAAC,MAAM;IACZ/B,KAAK,EAAE,IAAIgC,IAAI,CAACV,oBAAoB;EAAE,GAClCC,kBAAkB,GAJlB,YAKL,CACF;EAED,MAAMU,mBAAmB,gBACvB,IAAAvE,WAAA,CAAAoD,GAAA;IAAGF,SAAS,EAAC,wCAAwC;IAACsB,GAAG,EAAC,qBAAqB;IAACC,MAAM,EAAC,QAAQ;IAACC,IAAI,EAAC,+HAA+H;IAAAvB,QAAA,eAClO,IAAAnD,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;MACfC,EAAE,EAAC,sEAAsE;MACzEC,cAAc,EAAC;IAAuB,CACvC;EAAC,CACD,CACJ;EAED,oBACE,IAAAjE,WAAA,CAAAiD,IAAA;IAAKC,SAAS,EAAC,2BAA2B;IAAAC,QAAA,gBACxC,IAAAnD,WAAA,CAAAoD,GAAA;MAAAD,QAAA,eACE,IAAAnD,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;QACfC,EAAE,EAAC,2DAA2D;QAC9DC,cAAc,EAAC,6EAA6E;QAC5FU,MAAM,EAAE;UACNb,oBAAoB;UACpBI;QACF;MAAE,CACH;IAAC,CACD,CAAC,eACJ,IAAAlE,WAAA,CAAAoD,GAAA;MAAAD,QAAA,eACE,IAAAnD,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;QACfC,EAAE,EAAC,6DAA6D;QAChEC,cAAc,EAAC,+IAA+I;QAC9JU,MAAM,EAAE;UAAEJ;QAAoB;MAAE,CACjC;IAAC,CACD,CAAC;EAAA,CACD,CAAC;AAEV,CAAC;AAEDb,wBAAwB,CAACkB,SAAS,GAAG;EACnChB,oBAAoB,EAAEiB,kBAAS,CAACA,SAAS,CAACC,UAAU,CAACR,IAAI,CAAC,CAACS,UAAU;EACrElB,kBAAkB,EAAEgB,kBAAS,CAACG,KAAK,CAAC;IAClCC,QAAQ,EAAEJ,kBAAS,CAACK;EACtB,CAAC;AACH,CAAC;AAEDxB,wBAAwB,CAACyB,YAAY,GAAG;EACtCtB,kBAAkB,EAAE,CAAC;AACvB,CAAC;AAED,MAAMuB,yBAAyB,GAAGA,CAAA,kBAChC,IAAApF,WAAA,CAAAoD,GAAA;EAAKF,SAAS,EAAC,2BAA2B;EAAAC,QAAA,eACxC,IAAAnD,WAAA,CAAAoD,GAAA;IAAAD,QAAA,eACE,IAAAnD,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;MACfC,EAAE,EAAC,6DAA6D;MAChEC,cAAc,EAAC;IAAgG,CAChH;EAAC,CACD;AAAC,CACD,CACN;AAED,MAAMoB,mBAAmB,GAAGC,KAAA,IAEtB;EAAA,IAFuB;IAC3BC,QAAQ;IAAEC,iBAAiB;IAAEC,kCAAkC;IAAEC;EACnE,CAAC,GAAAJ,KAAA;EACC,IAAIK,cAAc;EAClB,IAAIH,iBAAiB,IAAI,EAAE,EAAE;IAAE;IAC7B;IACA,IAAIC,kCAAkC,EAAE;MACtC,IAAIC,IAAI,KAAK,QAAQ,EAAE;QACrBD,kCAAkC,CAAC,gBAAgB,CAAC;QACpD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,gBAAgB,CAAC;MAClF;MACA,IAAIG,IAAI,KAAK,OAAO,EAAE;QACpBD,kCAAkC,CAAC,aAAa,CAAC;QACjD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,aAAa,CAAC;MAC/E;IACF;IACAI,cAAc,gBACZ,IAAA3F,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;MACfC,EAAE,EAAC,qDAAqD;MACxDC,cAAc,EAAG;AACzB;AACA,6BAA8B;MACtBU,MAAM,EAAE;QACNkB,QAAQ,EAAGC,IAAI,CAACC,KAAK,CAACP,iBAAiB,GAAG,EAAE;MAC9C;IAAE,CACH,CACF;EACH,CAAC,MAAM,IAAIA,iBAAiB,IAAI,CAAC,EAAE;IAAE;IACnC;IACA,IAAIC,kCAAkC,EAAE;MACtC,IAAIC,IAAI,KAAK,QAAQ,EAAE;QACrBD,kCAAkC,CAAC,iBAAiB,CAAC;QACrD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,iBAAiB,CAAC;MACnF;MACA,IAAIG,IAAI,KAAK,OAAO,EAAE;QACpBD,kCAAkC,CAAC,cAAc,CAAC;QAClD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,cAAc,CAAC;MAChF;IACF;IACAI,cAAc,gBACZ,IAAA3F,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;MACfC,EAAE,EAAC,sDAAsD;MACzDC,cAAc,EAAG;AACzB;AACA,8BAA+B;MACvBU,MAAM,EAAE;QACNqB,SAAS,EAAGR;MACd;IAAE,CACH,CACF;EACH,CAAC,MAAM;IAAE;IACP;IACA,IAAIC,kCAAkC,EAAE;MACtC,IAAIC,IAAI,KAAK,QAAQ,EAAE;QACrBD,kCAAkC,CAAC,gBAAgB,CAAC;QACpD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,gBAAgB,CAAC;MAClF;MACA,IAAIG,IAAI,KAAK,OAAO,EAAE;QACpBD,kCAAkC,CAAC,aAAa,CAAC;QACjD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,aAAa,CAAC;MAC/E;IACF;IACAI,cAAc,gBACZ,IAAA3F,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;MACfC,EAAE,EAAC,wDAAwD;MAC3DC,cAAc,EAAC;IAAuB,CACvC,CACF;EACH;EACA,oBAAQ,IAAAjE,WAAA,CAAAoD,GAAA;IAAKF,SAAS,EAAC,gBAAgB;IAAAC,QAAA,EAAEwC;EAAc,CAAM,CAAC;AAChE,CAAC;AAEDN,mBAAmB,CAACT,SAAS,GAAG;EAC9BW,QAAQ,EAAEV,kBAAS,CAACK,MAAM,CAACH,UAAU;EACrCS,iBAAiB,EAAEX,kBAAS,CAACoB,MAAM,CAAClB,UAAU;EAC9CU,kCAAkC,EAAEZ,kBAAS,CAACqB,IAAI;EAClDR,IAAI,EAAEb,kBAAS,CAACK;AAClB,CAAC;AACDG,mBAAmB,CAACF,YAAY,GAAG;EACjCM,kCAAkC,EAAE,IAAI;EACxCC,IAAI,EAAE;AACR,CAAC;AAED,MAAMS,0BAA0B,GAAGC,KAAA,IAE7B;EAAA,IAF8B;IAClCb,QAAQ;IAAE3B,oBAAoB;IAAEC,kBAAkB;IAAE4B;EACtD,CAAC,GAAAW,KAAA;EACC,IAAIX,kCAAkC,EAAE;IACtCA,kCAAkC,CAAC,gBAAgB,CAAC;IACpD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,gBAAgB,CAAC;EAClF;EACA,oBACE,IAAAvF,WAAA,CAAAoD,GAAA;IAAKF,SAAS,EAAC,sBAAsB;IAAAC,QAAA,eACnC,IAAAnD,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;MACfC,EAAE,EAAC,iDAAiD;MACpDC,cAAc,EAAC,kCAAkC;MACjDU,MAAM,EAAE;QACNT,IAAI,eACF,IAAAlE,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAA2E,aAAa,EAAArC,aAAA;UAEZsC,GAAG,EAAC,SAAS;UACbC,KAAK,EAAC,MAAM;UACZ/B,KAAK,EAAEsB;QAAqB,GACxBC,kBAAkB,GAJlB,kBAKL;MAEL;IAAE,CACH;EAAC,CACC,CAAC;AAEV,CAAC;AAEDsC,0BAA0B,CAACvB,SAAS,GAAG;EACrCW,QAAQ,EAAEV,kBAAS,CAACK,MAAM,CAACH,UAAU;EACrCnB,oBAAoB,EAAEiB,kBAAS,CAACA,SAAS,CAACC,UAAU,CAACR,IAAI,CAAC,CAACS,UAAU;EACrElB,kBAAkB,EAAEgB,kBAAS,CAACG,KAAK,CAAC;IAClCC,QAAQ,EAAEJ,kBAAS,CAACK;EACtB,CAAC,CAAC;EACFO,kCAAkC,EAAEZ,kBAAS,CAACqB;AAChD,CAAC;AAEDC,0BAA0B,CAAChB,YAAY,GAAG;EACxCtB,kBAAkB,EAAE,CAAC,CAAC;EACtB4B,kCAAkC,EAAE;AACtC,CAAC;AAED,MAAMY,wBAAwB,GAAGC,KAAA,IAE3B;EAAA,IAF4B;IAChCf,QAAQ;IAAE3B,oBAAoB;IAAEC,kBAAkB;IAAE4B;EACtD,CAAC,GAAAa,KAAA;EACC,IAAIb,kCAAkC,EAAE;IACtCA,kCAAkC,CAAC,oBAAoB,CAAC;IACxD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,oBAAoB,CAAC;EACtF;EACA,oBACE,IAAAvF,WAAA,CAAAoD,GAAA;IAAKF,SAAS,EAAC,gBAAgB;IAAAC,QAAA,eAC7B,IAAAnD,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;MACfC,EAAE,EAAC,4DAA4D;MAC/DC,cAAc,EAAC,mCAAmC;MAClDU,MAAM,EAAE;QACNT,IAAI,eACF,IAAAlE,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAA2E,aAAa,EAAArC,aAAA;UAEZsC,GAAG,EAAC,SAAS;UACbC,KAAK,EAAC,MAAM;UACZ/B,KAAK,EAAEsB;QAAqB,GACxBC,kBAAkB,GAJlB,kBAKL;MAEL;IAAE,CACH;EAAC,CACC,CAAC;AAEV,CAAC;AAEDwC,wBAAwB,CAACzB,SAAS,GAAG;EACnCW,QAAQ,EAAEV,kBAAS,CAACK,MAAM,CAACH,UAAU;EACrCnB,oBAAoB,EAAEiB,kBAAS,CAACA,SAAS,CAACC,UAAU,CAACR,IAAI,CAAC,CAACS,UAAU;EACrElB,kBAAkB,EAAEgB,kBAAS,CAACG,KAAK,CAAC;IAClCC,QAAQ,EAAEJ,kBAAS,CAACK;EACtB,CAAC,CAAC;EACFO,kCAAkC,EAAEZ,kBAAS,CAACqB;AAChD,CAAC;AAEDG,wBAAwB,CAAClB,YAAY,GAAG;EACtCtB,kBAAkB,EAAE,CAAC,CAAC;EACtB4B,kCAAkC,EAAE;AACtC,CAAC;AAED,MAAMc,+BAA+B,GAAGC,KAAA,IAclC;EAAA,IAdmC;IACvCC,gBAAgB;IAChBC,wBAAwB;IACxBC,YAAY;IACZpB,QAAQ;IACRqB,KAAK;IACLC,GAAG;IACHpB,kCAAkC;IAClCqB,mBAAmB;IACnBC,gBAAgB;IAChBC,cAAc;IACdC,YAAY;IACZC,YAAY;IACZC;EACF,CAAC,GAAAX,KAAA;EACC,MAAMY,IAAI,GAAG,IAAAC,aAAO,EAAC,CAAC;EACtB,MAAMC,OAAO,GAAGhD,IAAI,CAACiD,GAAG,CAAC,CAAC;EAC1B,MAAM1D,kBAAkB,GAAGoD,YAAY,GAAG;IAAEhC,QAAQ,EAAEgC;EAAa,CAAC,GAAG,CAAC,CAAC;EACzE,MAAMO,aAAa,GAAG,IAAIlD,IAAI,CAACgD,OAAO,GAAGP,gBAAgB,CAAC;EAC1D,MAAMnD,oBAAoB,GAAG6C,gBAAgB,GAAG,IAAInC,IAAI,CAACmC,gBAAgB,CAACgB,cAAc,CAAC,GAAG,IAAI;EAChG,MAAMC,sBAAsB,GAAGjB,gBAAgB,GAAG,IAAInC,IAAI,CAACgD,OAAO,CAAC,GAAG1D,oBAAoB,GAAG,KAAK;EAElG,MAAM+D,eAAe,GAAG;IACtBC,OAAO,EAAEf,GAAG;IACZgB,aAAa,EAAEtC;EACjB,CAAC;EAED,MAAMuC,wBAAwB,GAAAhG,aAAA;IAC5BiG,QAAQ,EAAE,eAAe;IACzBC,IAAI,EAAE,+BAA+B;IACrCC,QAAQ,EAAE,iBAAiB;IAC3BC,YAAY,EAAE;EAAwC,GACnDP,eAAe,CACnB;EAED,IAAAQ,gBAAS,EAAC,MAAM;IACd,IAAAC,+BAAoB,EAAC,+CAA+C,EAAET,eAAe,CAAC;IACtF,IAAAU,yBAAc,EAAC,kBAAkB,EAAEP,wBAAwB,CAAC;IAC9D;EACA,CAAC,EAAE,EAAE,CAAC;EAEN,IAAI,CAACZ,YAAY,EAAE;IACjB,OAAO,IAAI;EACb;EAEA,MAAMoB,QAAQ,GAAGA,CAAA,KAAM;IACrB,IAAAF,+BAAoB,EAAC,6CAA6C,EAAET,eAAe,CAAC;IACpF,IAAAS,+BAAoB,EAAC,uCAAuC,EAAAtG,aAAA,CAAAA,aAAA,KACvD6F,eAAe;MAClBY,QAAQ,EAAE;IAAiB,EAC5B,CAAC;IACF,IAAAF,yBAAc,EAAC,mBAAmB,EAAEP,wBAAwB,CAAC;IAC7D,IAAAO,yBAAc,EAAC,uCAAuC,EAAAvG,aAAA,CAAAA,aAAA,KACjD6F,eAAe;MAClBa,YAAY,EAAE,eAAe;MAC7BC,QAAQ,EAAG,GAAEzB,cAAe,QAAO;MACnC0B,QAAQ,EAAE,QAAQ;MAClBC,QAAQ,EAAE3B;IAAc,EACzB,CAAC;EACJ,CAAC;EAED,MAAM4B,sBAAsB,GAAGA,CAAA,KAAM;IACnC,IAAAP,yBAAc,EAAC,sEAAsE,EAAAvG,aAAA,CAAAA,aAAA,KAChF6F,eAAe;MAClBa,YAAY,EAAE,sBAAsB;MACpCC,QAAQ,EAAG,GAAEzB,cAAe,iBAAgB;MAC5C0B,QAAQ,EAAE,QAAQ;MAClBC,QAAQ,EAAE3B;IAAc,EACzB,CAAC;EACJ,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI6B,6BAA6B;EACjC,IAAIC,gBAAgB;EACpB,IAAIC,aAAa;EACjB,IAAIC,kBAAkB;EACtB,IAAIC,SAAS;EAEb,IAAI,CAAC,CAACxC,gBAAgB,IAAI,CAAC,CAACC,wBAAwB,EAAE;IACpD,MAAMwC,uBAAuB,GAAGpD,IAAI,CAACC,KAAK,CAAC,CAACnC,oBAAoB,GAAG4D,aAAa,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;IAEnG,IAAI0B,uBAAuB,IAAK,CAAC,GAAG,EAAG,EAAE;MACvC,IAAItC,KAAK,EAAE;QAAE;QACX,MAAMuC,yBAAyB,GAAGrD,IAAI,CAACC,KAAK,CAAC,CAAC,IAAIzB,IAAI,CAACsC,KAAK,CAACa,cAAc,CAAC,GAAGD,aAAa,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;QAC/GqB,6BAA6B,gBAC3B,IAAA7I,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;UACfC,EAAE,EAAC,+DAA+D;UAClEC,cAAc,EAAC,2CAA2C;UAC1DU,MAAM,EAAE;YACNyE,UAAU,EAAGxC,KAAK,CAACwC;UACrB;QAAE,CACH,CACF;QACDN,gBAAgB,gBACd,IAAA9I,WAAA,CAAAoD,GAAA,EAACiC,mBAAmB;UAClBE,QAAQ,EAAEA,QAAS;UACnBC,iBAAiB,EAAE2D,yBAA0B;UAC7C1D,kCAAkC,EAAEA,kCAAmC;UACvEC,IAAI,EAAC;QAAO,CACb,CACF;MACH,CAAC,MAAM;QACLmD,6BAA6B,gBAC3B,IAAA7I,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;UACfC,EAAE,EAAC,uDAAuD;UAC1DC,cAAc,EAAC;QAA2B,CAC3C,CACF;QACD6E,gBAAgB,gBACd,IAAA9I,WAAA,CAAAoD,GAAA,EAAC+C,0BAA0B;UACzBZ,QAAQ,EAAEA,QAAS;UACnB3B,oBAAoB,EAAEA,oBAAqB;UAC3CC,kBAAkB,EAAEA,kBAAmB;UACvC4B,kCAAkC,EAAEA;QAAmC,CACxE,CACF;MACH;MACAsD,aAAa,gBAAG,IAAA/I,WAAA,CAAAoD,GAAA,EAACG,2BAA2B,IAAE,CAAC;IACjD,CAAC,MAAM,IAAI2F,uBAAuB,GAAI,CAAC,GAAG,EAAG,IAAIA,uBAAuB,IAAI,CAAC,EAAE;MAC7E;MACAL,6BAA6B,gBAC3B,IAAA7I,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;QACfC,EAAE,EAAC,6DAA6D;QAChEC,cAAc,EAAC;MAA0B,CAC1C,CACF;MACD6E,gBAAgB,gBACd,IAAA9I,WAAA,CAAAoD,GAAA,EAACiC,mBAAmB;QAClBE,QAAQ,EAAEA,QAAS;QACnBC,iBAAiB,EAAE0D,uBAAwB;QAC3CzD,kCAAkC,EAAEA,kCAAmC;QACvEC,IAAI,EAAC;MAAQ,CACd,CACF;MACDqD,aAAa,gBACX,IAAA/I,WAAA,CAAAoD,GAAA,EAACM,wBAAwB;QACvBE,oBAAoB,EAAEA,oBAAqB;QAC3CC,kBAAkB,EAAEA;MAAmB,CACxC,CACF;IACH,CAAC,MAAM;MAAE;MACPgF,6BAA6B,gBAC3B,IAAA7I,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;QACfC,EAAE,EAAC,2DAA2D;QAC9DC,cAAc,EAAC;MAA0B,CAC1C,CACF;MACD6E,gBAAgB,gBACd,IAAA9I,WAAA,CAAAoD,GAAA,EAACiD,wBAAwB;QACvBd,QAAQ,EAAEA,QAAS;QACnB3B,oBAAoB,EAAEA,oBAAqB;QAC3CC,kBAAkB,EAAEA,kBAAmB;QACvC4B,kCAAkC,EAAEA;MAAmC,CACxE,CACF;MACDsD,aAAa,gBACX,IAAA/I,WAAA,CAAAoD,GAAA,EAACgC,yBAAyB,IAAE,CAC7B;IACH;EACF,CAAC,MAAM;IAAE;IACPyD,6BAA6B,gBAC3B,IAAA7I,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;MACfC,EAAE,EAAC,iEAAiE;MACpEC,cAAc,EAAC;IAA+B,CAC/C,CACF;IACD8E,aAAa,gBAAI,IAAA/I,WAAA,CAAAoD,GAAA,EAACJ,sBAAsB,IAAE,CAAE;EAC9C;EAEA,IAAI0E,sBAAsB,EAAE;IAC1BsB,kBAAkB,gBAChB,IAAAhJ,WAAA,CAAAoD,GAAA,EAAC1D,QAAA,CAAA2J,MAAM;MACLC,OAAO,EAAC,SAAS;MACjBC,OAAO,EAAEX,sBAAuB;MAChClE,IAAI,EAAEiC,YAAa;MACnB6C,KAAK;MAAArG,QAAA,EACN;IAED,CAAQ,CACT;EACH,CAAC,MAAM;IACL6F,kBAAkB,gBAChB,IAAAhJ,WAAA,CAAAoD,GAAA,EAACvD,cAAA,CAAA4J,aAAa;MACZ7C,KAAK,EAAEA,KAAM;MACb2C,OAAO,EAAEjB,QAAS;MAClBpB,YAAY,EAAEA,YAAa;MAC3BsC,KAAK;IAAA,CACN,CACF;EACH;EAEA,IAAI5C,KAAK,EAAE;IAAE;IACXqC,SAAS,gBACP,IAAAjJ,WAAA,CAAAoD,GAAA;MAAKF,SAAS,EAAC,2BAA2B;MAAAC,QAAA,eACxC,IAAAnD,WAAA,CAAAoD,GAAA,EAAC5D,KAAA,CAAAuE,gBAAgB;QACfC,EAAE,EAAC,2CAA2C;QAC9CC,cAAc,EAAC,6BAA6B;QAC5CU,MAAM,EAAE;UACN+E,IAAI,eAAG,IAAA1J,WAAA,CAAAoD,GAAA;YAAMF,SAAS,EAAC,kBAAkB;YAAAC,QAAA,EAAEyD,KAAK,CAAC8C;UAAI,CAAO;QAC9D;MAAE,CACH;IAAC,CACC,CACN;EACH;EAEA,oBACE,IAAA1J,WAAA,CAAAoD,GAAA;IAASF,SAAS,EAAE,IAAAyG,mBAAU,EAAC,4BAA4B,EAAE;MAAE,WAAW,EAAE7C;IAAoB,CAAC,CAAE;IAAA3D,QAAA,eACjG,IAAAnD,WAAA,CAAAiD,IAAA;MAAKe,EAAE,EAAC,gCAAgC;MAAAb,QAAA,gBACtC,IAAAnD,WAAA,CAAAiD,IAAA;QACEC,SAAS,EAAE,IAAAyG,mBAAU,EAAC,gCAAgC,EAAE;UACtD,yDAAyD,EAAE,CAAC,CAACxC;QAC/D,CAAC,CAAE;QACHnD,EAAE,EAAC,gCAAgC;QAAAb,QAAA,GAElC0F,6BAA6B,EAC7B,CAAC,CAAC1B,aAAa,iBACd,IAAAnH,WAAA,CAAAoD,GAAA;UAAKF,SAAS,EAAC,uBAAuB;UAAAC,QAAA,eACpC,IAAAnD,WAAA,CAAAoD,GAAA,EAAC1D,QAAA,CAAAkK,UAAU;YACTC,GAAG,EAAEC,YAAM;YACXC,IAAI,EAAC,IAAI;YACTC,MAAM,EAAEC,aAAK;YACbV,OAAO,EAAEpC,aAAc;YACvBjE,SAAS,EAAC,YAAY;YACtBgH,GAAG,EAAE9C,IAAI,CAAC+C,aAAa,CAACC,iBAAQ,CAACC,KAAK;UAAE,CACzC;QAAC,CACC,CACN;MAAA,CACC,CAAC,EACJvB,gBAAgB,eACjB,IAAA9I,WAAA,CAAAoD,GAAA;QAAKF,SAAS,EAAC,8BAA8B;QAAAC,QAAA,EAC1C4F;MAAa,CACX,CAAC,eACN,IAAA/I,WAAA,CAAAoD,GAAA;QAAKF,SAAS,EAAC,6BAA6B;QAAAC,QAAA,EACzC6F;MAAkB,CAChB,CAAC,EACLC,SAAS;IAAA,CACP;EAAC,CACC,CAAC;AAEd,CAAC;AAED1C,+BAA+B,CAAC3B,SAAS,GAAG;EAC1CW,QAAQ,EAAEV,kBAAS,CAACK,MAAM,CAACH,UAAU;EACrC8B,GAAG,EAAEhC,kBAAS,CAACK,MAAM,CAACH,UAAU;EAChC0B,gBAAgB,EAAE5B,kBAAS,CAACG,KAAK,CAAC;IAChCyC,cAAc,EAAE5C,kBAAS,CAACK;EAC5B,CAAC,CAAC;EACFwB,wBAAwB,EAAE7B,kBAAS,CAACyF,IAAI;EACxC3D,YAAY,EAAE9B,kBAAS,CAACK,MAAM;EAC9B0B,KAAK,EAAE/B,kBAAS,CAACG,KAAK,CAAC;IACrByC,cAAc,EAAE5C,kBAAS,CAACK,MAAM;IAChCkE,UAAU,EAAEvE,kBAAS,CAACoB,MAAM;IAC5ByD,IAAI,EAAE7E,kBAAS,CAACK;EAClB,CAAC,CAAC;EACFiC,aAAa,EAAEtC,kBAAS,CAACqB,IAAI;EAC7BY,mBAAmB,EAAEjC,kBAAS,CAACyF,IAAI;EACnC7E,kCAAkC,EAAEZ,kBAAS,CAACqB,IAAI;EAClDa,gBAAgB,EAAElC,kBAAS,CAACoB,MAAM;EAClCe,cAAc,EAAEnC,kBAAS,CAACK,MAAM,CAACH,UAAU;EAC3CkC,YAAY,EAAEpC,kBAAS,CAACK,MAAM;EAC9BgC,YAAY,EAAErC,kBAAS,CAACG,KAAK,CAAC;IAC5BuF,cAAc,EAAE1F,kBAAS,CAACK,MAAM,CAACH,UAAU;IAC3CyF,KAAK,EAAE3F,kBAAS,CAACoB,MAAM,CAAClB,UAAU;IAClC0F,UAAU,EAAE5F,kBAAS,CAACK,MAAM,CAACH;EAC/B,CAAC;AACH,CAAC;AAEDwB,+BAA+B,CAACpB,YAAY,GAAG;EAC7CsB,gBAAgB,EAAE,IAAI;EACtBC,wBAAwB,EAAE,KAAK;EAC/BC,YAAY,EAAE,IAAI;EAClBC,KAAK,EAAE,IAAI;EACXnB,kCAAkC,EAAE,IAAI;EACxCqB,mBAAmB,EAAE,IAAI;EACzBC,gBAAgB,EAAE,CAAC;EACnBE,YAAY,EAAE,IAAI;EAClBC,YAAY,EAAE,IAAI;EAClBC,aAAa,EAAE;AACjB,CAAC;AAAC,IAAAuD,QAAA,GAAAC,OAAA,CAAAxK,OAAA,GAEa,IAAAyK,gBAAU,EAACrE,+BAA+B,CAAC","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "DefaultUpgradeNotification", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _DefaultUpgradeNotification.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "ExperimentalUpgradeNotification", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _ExperimentalUpgradeNotification.default;
16
+ }
17
+ });
18
+ var _DefaultUpgradeNotification = _interopRequireDefault(require("./DefaultUpgradeNotification"));
19
+ var _ExperimentalUpgradeNotification = _interopRequireDefault(require("./ExperimentalUpgradeNotification"));
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_DefaultUpgradeNotification","_interopRequireDefault","require","_ExperimentalUpgradeNotification","obj","__esModule","default"],"sources":["../../src/upgrade-notification/index.jsx"],"sourcesContent":["export { default as DefaultUpgradeNotification } from './DefaultUpgradeNotification';\nexport { default as ExperimentalUpgradeNotification } from './ExperimentalUpgradeNotification';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,2BAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gCAAA,GAAAF,sBAAA,CAAAC,OAAA;AAA+F,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edx/frontend-plugin-advertisements",
3
- "version": "1.2.0",
3
+ "version": "1.4.0",
4
4
  "description": "Frontend plugin for edX in course advertisements",
5
5
  "repository": {
6
6
  "type": "git",
@@ -37,17 +37,20 @@
37
37
  "bugs": {
38
38
  "url": "https://github.com/edx/frontend-plugin-advertisements/issues"
39
39
  },
40
- "dependencies": {},
40
+ "dependencies": {
41
+ "@optimizely/react-sdk": "^3.1.0"
42
+ },
41
43
  "devDependencies": {
42
44
  "@edx/browserslist-config": "^1.1.1",
43
45
  "@edx/reactifex": "^2.1.1",
44
46
  "@openedx/frontend-build": "13.1.4",
47
+ "@testing-library/jest-dom": "^5.17.0",
48
+ "@testing-library/react": "^12.1.5",
45
49
  "glob": "7.2.3",
46
50
  "husky": "7.0.4",
47
51
  "jest": "29.7.0",
48
52
  "semantic-release": "^21.0.7",
49
- "@testing-library/jest-dom": "^5.17.0",
50
- "@testing-library/react": "^12.1.5"
53
+ "rosie": "2.1.1"
51
54
  },
52
55
  "peerDependencies": {
53
56
  "@edx/brand": "npm:@openedx/brand-openedx@^1.2.2",
@@ -58,9 +61,10 @@
58
61
  "@fortawesome/free-solid-svg-icons": "5.15.4",
59
62
  "@fortawesome/react-fontawesome": "^0.1.4",
60
63
  "@openedx/paragon": "^22.1.1",
64
+ "classnames": "2.3.2",
61
65
  "core-js": "3.22.2",
62
66
  "prop-types": "15.8.1",
63
- "regenerator-runtime": "0.13.11",
64
- "react": "17.0.2"
67
+ "react": "17.0.2",
68
+ "regenerator-runtime": "0.13.11"
65
69
  }
66
70
  }