diff --git a/1/ecolyo.045e42c6ea5724fd7730.js b/1/ecolyo.6b43dacbc8ffbba102a3.js similarity index 98% rename from 1/ecolyo.045e42c6ea5724fd7730.js rename to 1/ecolyo.6b43dacbc8ffbba102a3.js index 86a8a44df824bba13030d135186317c769c18e89..b11fa8553e62de024e1c14abfe168f8b3c608037 100644 --- a/1/ecolyo.045e42c6ea5724fd7730.js +++ b/1/ecolyo.6b43dacbc8ffbba102a3.js @@ -26,28 +26,6 @@ if(false) {} /***/ }), -/***/ "+u0V": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("4BeY"); -/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("IaFt"); -/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__); - - -var symbol = new _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default.a({ - "id": "notif_warning_e9f5eb29de1b1c9e43648270bcccd2c6", - "use": "notif_warning_e9f5eb29de1b1c9e43648270bcccd2c6-usage", - "viewBox": "0 0 27 26", - "content": "<symbol viewBox=\"0 0 27 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" id=\"notif_warning_e9f5eb29de1b1c9e43648270bcccd2c6\">\n<g filter=\"url(#notif_warning_e9f5eb29de1b1c9e43648270bcccd2c6_filter0_d_15041_508)\">\n<circle cx=\"13.5\" cy=\"11\" r=\"11\" fill=\"#E3B82A\" />\n<circle cx=\"13.5\" cy=\"11\" r=\"10.5\" stroke=\"white\" />\n</g>\n<path d=\"M12.634 4.5C13.0189 3.83333 13.9811 3.83333 14.366 4.5L20.4282 15C20.8131 15.6667 20.332 16.5 19.5622 16.5H7.43782C6.66802 16.5 6.1869 15.6667 6.5718 15L12.634 4.5Z\" fill=\"#1B1C22\" />\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.4001 7.5001C14.4001 7.00304 13.9972 6.6001 13.5001 6.6001C13.003 6.6001 12.6001 7.00304 12.6001 7.5001V12.0001C12.6001 12.4972 13.003 12.9001 13.5001 12.9001C13.9972 12.9001 14.4001 12.4972 14.4001 12.0001L14.4001 7.5001ZM14.4001 14.7001C14.4001 14.203 13.9972 13.8001 13.5001 13.8001C13.003 13.8001 12.6001 14.203 12.6001 14.7001C12.6001 15.1972 13.003 15.6001 13.5001 15.6001C13.9972 15.6001 14.4001 15.1972 14.4001 14.7001Z\" fill=\"#E3B82A\" />\n<defs>\n<filter id=\"notif_warning_e9f5eb29de1b1c9e43648270bcccd2c6_filter0_d_15041_508\" x=\"0.5\" y=\"0\" width=\"26\" height=\"26\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"></feColorMatrix>\n<feOffset dy=\"2\"></feOffset>\n<feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0\"></feColorMatrix>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_15041_508\"></feBlend>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_15041_508\" result=\"shape\"></feBlend>\n</filter>\n</defs>\n</symbol>" -}); -var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default.a.add(symbol); -/* harmony default export */ __webpack_exports__["default"] = (symbol); - -/***/ }), - /***/ "/p1F": /***/ (function(module, exports, __webpack_require__) { @@ -439,6 +417,8 @@ var _react = _interopRequireWildcard(__webpack_require__("q1tI")); var _reactRouterDom = __webpack_require__("SOjZ"); +var _dateChart = _interopRequireDefault(__webpack_require__("Ty7+")); + var _usageEvent = _interopRequireDefault(__webpack_require__("dECN")); var _hooks = __webpack_require__("Zlw4"); @@ -483,6 +463,10 @@ var FluidButton = function FluidButton(_ref) { return false; }, [fluidStatus, fluidType]); + var isOutdated = (0, _react.useCallback)(function () { + var dateChartService = new _dateChart.default(); + return dateChartService.isDataOutdated(fluidStatus[fluidType].lastDataDate, fluidType); + }, [fluidStatus, fluidType]); var iconType = (0, _picto.getNavPicto)(fluidType, isActive, isConnected()); var goToFluid = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { return _regenerator.default.wrap(function _callee$(_context) { @@ -514,10 +498,10 @@ var FluidButton = function FluidButton(_ref) { (0, _react.useEffect)(function () { // Show errors only on connected konnectors that are in error, outdated, with no data (specific case), and not in multifluid - if (fluidType !== _enums.FluidType.MULTIFLUID && isConnected() && isErrored()) { + if (fluidType !== _enums.FluidType.MULTIFLUID && isConnected() && isErrored() || fluidType !== _enums.FluidType.MULTIFLUID && isConnected() && isOutdated()) { setShowError(true); } - }, [fluidStatus, fluidType, isConnected, isErrored]); + }, [fluidStatus, fluidType, isConnected, isErrored, isOutdated]); return /*#__PURE__*/_react.default.createElement("div", { className: "fluid-title ".concat(_enums.FluidType[fluidType].toLowerCase(), " fluid-button"), onClick: goToFluid @@ -2058,8 +2042,6 @@ var _notif_error = _interopRequireDefault(__webpack_require__("pSnQ")); var _notif_maintenance = _interopRequireDefault(__webpack_require__("goTn")); -var _notif_warning = _interopRequireDefault(__webpack_require__("+u0V")); - var _offlineParam = _interopRequireDefault(__webpack_require__("lLz+")); var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); @@ -2556,41 +2538,22 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) { return _ref8.apply(this, arguments); }; }(), [dispatch, currentFluidStatus.connection, currentFluidStatus.fluidType, refreshChallengeState, updateGlobalFluidStatus]); - - var getIconForStatus = function getIconForStatus(status, maintenance, connection, outdatedData) { - if (maintenance) { - return /*#__PURE__*/_react.default.createElement(_StyledIcon.default, { - icon: _notif_maintenance.default, - size: 24, - className: "konnector-state-picto" - }); - } - - if ((status === _enums.FluidState.ERROR || status === _enums.FluidState.ERROR_LOGIN_FAILED) && connection.account) { - return /*#__PURE__*/_react.default.createElement(_StyledIcon.default, { - icon: _notif_error.default, - size: 24, - className: "konnector-state-picto" - }); - } - - if (outdatedData && outdatedData > 0) { - return /*#__PURE__*/_react.default.createElement(_StyledIcon.default, { - icon: _notif_warning.default, - size: 24, - className: "konnector-state-picto" - }); - } - }; - var displayKonnectorIcon = (0, _react.useCallback)(function () { return /*#__PURE__*/_react.default.createElement("div", { className: "konnector-icon" }, /*#__PURE__*/_react.default.createElement(_Icon.default, { icon: currentFluidStatus.connection.account ? iconType : _offlineParam.default, size: 49 - }), getIconForStatus(currentFluidStatus.status, currentFluidStatus.maintenance, currentFluidStatus.connection, isOutdatedData)); - }, [currentFluidStatus, iconType, isOutdatedData]); + }), currentFluidStatus.maintenance ? /*#__PURE__*/_react.default.createElement(_StyledIcon.default, { + icon: _notif_maintenance.default, + size: 24, + className: "konnector-state-picto" + }) : (currentFluidStatus.status === _enums.FluidState.ERROR || isOutdatedData || currentFluidStatus.status === _enums.FluidState.ERROR_LOGIN_FAILED) && currentFluidStatus.connection.account && /*#__PURE__*/_react.default.createElement(_StyledIcon.default, { + icon: _notif_error.default, + size: 24, + className: "konnector-state-picto" + })); + }, [currentFluidStatus.connection.account, currentFluidStatus.maintenance, currentFluidStatus.status, iconType, isOutdatedData]); var displayKonnectorHeader = (0, _react.useCallback)(function () { if (currentFluidStatus.maintenance) { return /*#__PURE__*/_react.default.createElement("span", { @@ -3430,7 +3393,7 @@ exports.default = _default; exports = module.exports = __webpack_require__("JPst")(false); // Module -exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.connection-update-result {\n flex: 1;\n margin: 0 1.3rem 1rem;\n}\n@media only screen and (max-width : 1023px) {\n .connection-update-result {\n margin: 0 0 0.25rem;\n }\n}\n.connection-update-result .connection-update-errored,\n.connection-update-result .connection-caption-errored {\n background-color: #d25959;\n margin: 0 -2.5rem;\n padding: 0.4rem 2.5rem;\n display: flex;\n align-items: center;\n}\n@media only screen and (max-width : 1023px) {\n .connection-update-result .connection-update-errored,\n.connection-update-result .connection-caption-errored {\n margin: 0 -1.2rem;\n padding: 0.4rem 1.2rem;\n }\n}\n.connection-update-result .connection-update-errored .warning-icon,\n.connection-update-result .connection-caption-errored .warning-icon {\n min-width: 20px;\n margin-right: 1rem;\n}\n.connection-update-result .connection-update-errored .warning-white,\n.connection-update-result .connection-caption-errored .warning-white {\n margin-right: 1rem;\n}\n.connection-update-result .connection-caption-warning {\n background-color: #e3b82a;\n margin: 0 -2.5rem;\n padding: 0.4rem 2.5rem;\n display: flex;\n align-items: center;\n color: #1b1c22;\n}\n@media only screen and (max-width : 1023px) {\n .connection-update-result .connection-caption-warning {\n margin: 0 -1.2rem;\n padding: 0.4rem 1.2rem;\n }\n}\n.connection-update-result .connection-caption-warning .warning-icon {\n min-width: 20px;\n margin-right: 1rem;\n}\n.connection-update-result .connection-caption-warning .warning-white {\n margin-right: 1rem;\n}\n.connection-update-result .connection-caption {\n color: #e0e0e0;\n}\n\n.delta-caption {\n color: #a0a0a0;\n}\n\n.inline-buttons {\n display: flex;\n flex-flow: row nowrap;\n gap: 1rem;\n}\n.inline-buttons button.btn-secondary-positive span:first-child {\n color: #ffffff !important;\n}", ""]); +exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.connection-update-result {\n flex: 1;\n margin: 0 1.3rem 1rem;\n}\n@media only screen and (max-width : 1023px) {\n .connection-update-result {\n margin: 0 0 0.25rem;\n }\n}\n.connection-update-result .connection-update-errored,\n.connection-update-result .connection-caption-errored {\n background-color: #d25959;\n margin: 0 -2.5rem;\n padding: 0.4rem 2.5rem;\n display: flex;\n align-items: center;\n}\n@media only screen and (max-width : 1023px) {\n .connection-update-result .connection-update-errored,\n.connection-update-result .connection-caption-errored {\n margin: 0 -1.2rem;\n padding: 0.4rem 1.2rem;\n }\n}\n.connection-update-result .connection-update-errored .warning-icon,\n.connection-update-result .connection-caption-errored .warning-icon {\n min-width: 20px;\n margin-right: 1rem;\n}\n.connection-update-result .connection-update-errored .warning-white,\n.connection-update-result .connection-caption-errored .warning-white {\n margin-right: 1rem;\n}\n.connection-update-result .connection-caption {\n color: #e0e0e0;\n}\n\n.delta-caption {\n color: #a0a0a0;\n}\n\n.inline-buttons {\n display: flex;\n flex-flow: row nowrap;\n gap: 1rem;\n}\n.inline-buttons button.btn-secondary-positive span:first-child {\n color: #d25959 !important;\n}", ""]); @@ -6603,6 +6566,8 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; +var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA")); + var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); var _I18n = __webpack_require__("buk/"); @@ -6660,7 +6625,7 @@ var DataloadNoValue = function DataloadNoValue(_ref) { if (dataload.state === _enums.DataloadState.MISSING || dataload.state === _enums.DataloadState.AGGREGATED_HOLE_OR_MISSING) { return /*#__PURE__*/_react.default.createElement("div", { onClick: handleToggleKonnectionCard, - className: (0, _classnames.default)('dataloadvisualizer-content text-22-normal') + className: (0, _classnames.default)('dataloadvisualizer-content text-22-normal', (0, _defineProperty2.default)({}, 'error', fluidType !== _enums.FluidType.MULTIFLUID)) }, t('consumption_visualizer.missing_data')); } @@ -6723,8 +6688,6 @@ var _slicedToArray2 = _interopRequireDefault(__webpack_require__("J4zp")); var _Button = _interopRequireDefault(__webpack_require__("FtsS")); -var _warningDark = _interopRequireDefault(__webpack_require__("zrru")); - var _warningWhite = _interopRequireDefault(__webpack_require__("k7GL")); var _StyledIcon = _interopRequireDefault(__webpack_require__("I07j")); @@ -7205,9 +7168,9 @@ var DisplayManualUpdate = function DisplayManualUpdate() { t = _useI18n4.t; return /*#__PURE__*/_react.default.createElement("div", { - className: "connection-caption-warning connection-update-errored warning-white text-16-normal" + className: "connection-caption-errored connection-update-errored warning-white text-16-normal" }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, { - icon: _warningDark.default, + icon: _warningWhite.default, size: 36, className: "warning-icon", role: "img", diff --git a/4/ecolyo.6fcfdd90ba42c0bcdeb2.js b/4/ecolyo.d2bf69e982254c3ce239.js similarity index 99% rename from 4/ecolyo.6fcfdd90ba42c0bcdeb2.js rename to 4/ecolyo.d2bf69e982254c3ce239.js index 28c231350d50f9989272ea999a4964a3d4f155a8..d8e099b68a4aa7d59a4c5355320b63d022a1a4f1 100644 --- a/4/ecolyo.6fcfdd90ba42c0bcdeb2.js +++ b/4/ecolyo.d2bf69e982254c3ce239.js @@ -643,7 +643,9 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var EcogestureCard = function EcogestureCard(_ref) { - var ecogesture = _ref.ecogesture; + var ecogesture = _ref.ecogesture, + _ref$selectionComplet = _ref.selectionCompleted, + selectionCompleted = _ref$selectionComplet === void 0 ? false : _ref$selectionComplet; var _useState = (0, _react.useState)(''), _useState2 = (0, _slicedToArray2.default)(_useState, 2), @@ -687,6 +689,9 @@ var EcogestureCard = function EcogestureCard(_ref) { to: { pathname: "/ecogesture/".concat(ecogesture.id) }, + state: { + selectionCompleted: selectionCompleted + }, component: _reactRouterDom.Link, className: "ecogesture-list-item" }, /*#__PURE__*/_react.default.createElement(_StyledEcogestureCard.default, null, /*#__PURE__*/_react.default.createElement("div", { @@ -960,7 +965,8 @@ var EcogestureList = function EcogestureList(_ref) { return filteredEcogestures.map(function (ecogesture) { return /*#__PURE__*/_react.default.createElement(_EcogestureCard.default, { key: ecogesture.id, - ecogesture: ecogesture + ecogesture: ecogesture, + selectionCompleted: selectionViewed === selectionTotal }); }); } diff --git a/6/ecolyo.6713a954e1e05e5c1639.js b/6/ecolyo.07e8fd2b54e9d8d82c0d.js similarity index 97% rename from 6/ecolyo.6713a954e1e05e5c1639.js rename to 6/ecolyo.07e8fd2b54e9d8d82c0d.js index 5402b3c9b2d3a9dbffa5d5d393f10de942bf7969..b7250065c0daef7ef7c242b3ced7916fa4af0c2e 100644 --- a/6/ecolyo.6713a954e1e05e5c1639.js +++ b/6/ecolyo.07e8fd2b54e9d8d82c0d.js @@ -2839,6 +2839,28 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) { var _default = ElecHalfHourMonthlyAnalysis; exports.default = _default; +/***/ }), + +/***/ "zrru": +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("4BeY"); +/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("IaFt"); +/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__); + + +var symbol = new _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default.a({ + "id": "warning-dark_5eec93ad240f71e14c9fd00bf68eb7a4", + "use": "warning-dark_5eec93ad240f71e14c9fd00bf68eb7a4-usage", + "viewBox": "0 0 30 27", + "content": "<symbol viewBox=\"0 0 30 27\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" id=\"warning-dark_5eec93ad240f71e14c9fd00bf68eb7a4\">\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.5142 0.874208C15.8412 -0.2914 14.1588 -0.291404 13.4858 0.874204L0.236852 23.8221C-0.436112 24.9877 0.405088 26.4447 1.75102 26.4447H28.249C29.5949 26.4447 30.4361 24.9877 29.7632 23.8221L16.5142 0.874208ZM13.8973 15.3611V9.61627H16.058V15.3611C16.058 15.834 16.0307 16.3043 15.976 16.772C15.9214 17.2346 15.8494 17.7075 15.76 18.1906H14.1953C14.1059 17.7075 14.0339 17.2346 13.9793 16.772C13.9246 16.3043 13.8973 15.834 13.8973 15.3611ZM16.2145 20.4573C16.279 20.6166 16.3113 20.7888 16.3113 20.9739C16.3113 21.1589 16.279 21.3337 16.2145 21.4981C16.1449 21.6575 16.053 21.7962 15.9388 21.9145C15.8196 22.0327 15.6805 22.1252 15.5215 22.192C15.3626 22.2588 15.1888 22.2922 15 22.2922C14.8162 22.2922 14.6449 22.2588 14.4859 22.192C14.327 22.1252 14.1879 22.0327 14.0687 21.9145C13.9495 21.7962 13.8576 21.6575 13.793 21.4981C13.7235 21.3337 13.6887 21.1589 13.6887 20.9739C13.6887 20.7888 13.7235 20.6166 13.793 20.4573C13.8576 20.298 13.9495 20.1592 14.0687 20.041C14.1879 19.9228 14.327 19.8302 14.4859 19.7634C14.6449 19.6915 14.8162 19.6555 15 19.6555C15.1888 19.6555 15.3626 19.6915 15.5215 19.7634C15.6805 19.8302 15.8196 19.9228 15.9388 20.041C16.053 20.1592 16.1449 20.298 16.2145 20.4573Z\" fill=\"#1B1C22\" />\n</symbol>" +}); +var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default.a.add(symbol); +/* harmony default export */ __webpack_exports__["default"] = (symbol); + /***/ }) }]); \ No newline at end of file diff --git a/7/ecolyo.584835707c36b8d5e353.js b/7/ecolyo.3259106169383ae5d5ef.js similarity index 92% rename from 7/ecolyo.584835707c36b8d5e353.js rename to 7/ecolyo.3259106169383ae5d5ef.js index 1d3e6cf1e5c82647631b65967fa685570e41a799..9f83ac491baa5ca767cc94dcd407f776b2f2eb3e 100644 --- a/7/ecolyo.584835707c36b8d5e353.js +++ b/7/ecolyo.3259106169383ae5d5ef.js @@ -879,28 +879,6 @@ var EstimatedConsumptionModal = function EstimatedConsumptionModal(_ref) { var _default = EstimatedConsumptionModal; exports.default = _default; -/***/ }), - -/***/ "zrru": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("4BeY"); -/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("IaFt"); -/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__); - - -var symbol = new _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default.a({ - "id": "warning-dark_5eec93ad240f71e14c9fd00bf68eb7a4", - "use": "warning-dark_5eec93ad240f71e14c9fd00bf68eb7a4-usage", - "viewBox": "0 0 30 27", - "content": "<symbol viewBox=\"0 0 30 27\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" id=\"warning-dark_5eec93ad240f71e14c9fd00bf68eb7a4\">\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.5142 0.874208C15.8412 -0.2914 14.1588 -0.291404 13.4858 0.874204L0.236852 23.8221C-0.436112 24.9877 0.405088 26.4447 1.75102 26.4447H28.249C29.5949 26.4447 30.4361 24.9877 29.7632 23.8221L16.5142 0.874208ZM13.8973 15.3611V9.61627H16.058V15.3611C16.058 15.834 16.0307 16.3043 15.976 16.772C15.9214 17.2346 15.8494 17.7075 15.76 18.1906H14.1953C14.1059 17.7075 14.0339 17.2346 13.9793 16.772C13.9246 16.3043 13.8973 15.834 13.8973 15.3611ZM16.2145 20.4573C16.279 20.6166 16.3113 20.7888 16.3113 20.9739C16.3113 21.1589 16.279 21.3337 16.2145 21.4981C16.1449 21.6575 16.053 21.7962 15.9388 21.9145C15.8196 22.0327 15.6805 22.1252 15.5215 22.192C15.3626 22.2588 15.1888 22.2922 15 22.2922C14.8162 22.2922 14.6449 22.2588 14.4859 22.192C14.327 22.1252 14.1879 22.0327 14.0687 21.9145C13.9495 21.7962 13.8576 21.6575 13.793 21.4981C13.7235 21.3337 13.6887 21.1589 13.6887 20.9739C13.6887 20.7888 13.7235 20.6166 13.793 20.4573C13.8576 20.298 13.9495 20.1592 14.0687 20.041C14.1879 19.9228 14.327 19.8302 14.4859 19.7634C14.6449 19.6915 14.8162 19.6555 15 19.6555C15.1888 19.6555 15.3626 19.6915 15.5215 19.7634C15.6805 19.8302 15.8196 19.9228 15.9388 20.041C16.053 20.1592 16.1449 20.298 16.2145 20.4573Z\" fill=\"#1B1C22\" />\n</symbol>" -}); -var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default.a.add(symbol); -/* harmony default export */ __webpack_exports__["default"] = (symbol); - /***/ }) }]); \ No newline at end of file diff --git a/8/ecolyo.99a6ad165093607eac0c.js b/8/ecolyo.79baa4590f4f0a94be8c.js similarity index 82% rename from 8/ecolyo.99a6ad165093607eac0c.js rename to 8/ecolyo.79baa4590f4f0a94be8c.js index 9dd8ffb98efafe934df8a1dc63c5aaec6ddbf71f..0b5bb3880cc9c081575027f3074ccb9254e12595 100644 --- a/8/ecolyo.99a6ad165093607eac0c.js +++ b/8/ecolyo.79baa4590f4f0a94be8c.js @@ -42,7 +42,7 @@ exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE exports = module.exports = __webpack_require__("JPst")(false); // Module -exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.single-ecogesture {\n color: #e0e0e0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 1rem 1.2rem;\n}\n.single-ecogesture .icon-container {\n margin: auto;\n max-width: 180px;\n width: 100%;\n display: flex;\n}\n.single-ecogesture .icon-container .icon-big {\n margin: auto;\n}\n.single-ecogesture .details {\n flex-direction: column;\n display: flex;\n}\n.single-ecogesture .details .title {\n color: #a0a0a0;\n font-weight: 700;\n}\n.single-ecogesture .details .efficiency {\n display: flex;\n text-align: center;\n margin: 0.7rem auto 0;\n}\n.single-ecogesture .details .efficiency .text {\n margin-right: 0.7rem;\n}\n.single-ecogesture .styled-container {\n line-height: 150%;\n padding: 1rem;\n margin: 1.5rem 0 1rem;\n max-width: 500px;\n}\n.single-ecogesture .styled-container .long-name {\n text-align: center;\n color: white;\n}\n.single-ecogesture .styled-container .showMore {\n text-align: center;\n text-decoration: underline;\n margin-top: 1.5rem;\n cursor: pointer;\n}\n.single-ecogesture .styled-container .longDescription {\n margin: 1em 0.5rem;\n text-align: left;\n}\n.single-ecogesture .buttons-selection {\n width: 100%;\n display: flex;\n gap: 0.5rem;\n justify-content: center;\n}\n.single-ecogesture .buttons-selection button {\n margin: 0;\n}\n.single-ecogesture .buttons-selection button.btn-secondary-negative {\n height: 45px;\n max-width: 160px;\n width: 100%;\n border-radius: 4px;\n}\n.single-ecogesture .buttons-selection .objective-btn span {\n color: #e0e0e0;\n}\n.single-ecogesture .buttons-selection .objective-btn.active {\n background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(12, 44, 91, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #4470b3;\n border-color: transparent;\n}\n.single-ecogesture .buttons-selection .objective-btn.active span {\n color: white;\n}\n.single-ecogesture .buttons-selection .doing-btn span {\n color: #e0e0e0;\n}\n.single-ecogesture .buttons-selection .doing-btn.active {\n background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(41, 87, 33, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #21a90b;\n border-color: transparent;\n}\n.single-ecogesture .buttons-selection .doing-btn.active span {\n color: white;\n}\n.single-ecogesture .buttons-selection .MuiIconButton-label {\n justify-content: flex-start;\n color: white;\n}", ""]); +exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.single-ecogesture {\n color: #e0e0e0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 1rem 1.2rem;\n}\n.single-ecogesture .icon-container {\n margin: auto;\n max-width: 180px;\n width: 100%;\n display: flex;\n}\n.single-ecogesture .icon-container .icon-big {\n margin: auto;\n}\n.single-ecogesture .details {\n flex-direction: column;\n display: flex;\n}\n.single-ecogesture .details .title {\n color: #a0a0a0;\n font-weight: 700;\n}\n.single-ecogesture .details .efficiency {\n display: flex;\n text-align: center;\n margin: 0.7rem auto 0;\n}\n.single-ecogesture .details .efficiency .text {\n margin-right: 0.7rem;\n}\n.single-ecogesture .styled-container {\n line-height: 150%;\n padding: 1rem;\n margin: 1.5rem 0 1rem;\n max-width: 500px;\n}\n.single-ecogesture .styled-container .long-name {\n text-align: center;\n color: white;\n}\n.single-ecogesture .styled-container .description {\n display: none;\n margin: 1.5rem 0.5rem 0.5rem 0.5rem;\n text-align: left;\n}\n.single-ecogesture .styled-container .block {\n display: block !important;\n}\n.single-ecogesture .styled-container .toggle-text {\n text-align: center;\n text-decoration: underline;\n margin-top: 1.5rem;\n cursor: pointer;\n}\n.single-ecogesture .buttons-selection {\n width: 100%;\n display: flex;\n gap: 0.5rem;\n justify-content: center;\n}\n.single-ecogesture .buttons-selection button {\n margin: 0;\n}\n.single-ecogesture .buttons-selection button.btn-secondary-negative {\n height: 45px;\n max-width: 160px;\n width: 100%;\n border-radius: 4px;\n}\n.single-ecogesture .buttons-selection .objective-btn span {\n color: #e0e0e0;\n}\n.single-ecogesture .buttons-selection .objective-btn.active {\n background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(12, 44, 91, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #4470b3;\n border-color: transparent;\n}\n.single-ecogesture .buttons-selection .objective-btn.active span {\n color: white;\n}\n.single-ecogesture .buttons-selection .doing-btn span {\n color: #e0e0e0;\n}\n.single-ecogesture .buttons-selection .doing-btn.active {\n background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(41, 87, 33, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #21a90b;\n border-color: transparent;\n}\n.single-ecogesture .buttons-selection .doing-btn.active span {\n color: white;\n}\n.single-ecogesture .buttons-selection .MuiIconButton-label {\n justify-content: flex-start;\n color: white;\n}", ""]); @@ -91,8 +91,6 @@ var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__("yXPU")); var _slicedToArray2 = _interopRequireDefault(__webpack_require__("J4zp")); -var _core = __webpack_require__("TTf+"); - var _IconButton = _interopRequireDefault(__webpack_require__("o6Jd")); var _doingDisabled = _interopRequireDefault(__webpack_require__("O5T3")); @@ -105,6 +103,8 @@ var _objectiveEnabled = _interopRequireDefault(__webpack_require__("XtK8")); var _default2 = _interopRequireDefault(__webpack_require__("v9Ot")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); + var _ErrorPage = _interopRequireDefault(__webpack_require__("u/N1")); var _StyledIcon = _interopRequireDefault(__webpack_require__("I07j")); @@ -148,10 +148,13 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var SingleEcogestureView = function SingleEcogestureView() { + var _location$state; + var _useI18n = (0, _I18n.useI18n)(), t = _useI18n.t; var client = (0, _cozyClient.useClient)(); + var location = (0, _reactRouterDom.useLocation)(); var _useState = (0, _react.useState)(), _useState2 = (0, _slicedToArray2.default)(_useState, 2), @@ -186,6 +189,7 @@ var SingleEcogestureView = function SingleEcogestureView() { var _useParams = (0, _reactRouterDom.useParams)(), ecogestureID = _useParams.ecogestureID; + var selectionCompleted = location === null || location === void 0 ? void 0 : (_location$state = location.state) === null || _location$state === void 0 ? void 0 : _location$state.selectionCompleted; var ecogestureService = (0, _react.useMemo)(function () { return new _ecogesture.default(client); }, [client]); @@ -204,52 +208,80 @@ var SingleEcogestureView = function SingleEcogestureView() { _useExploration2 = (0, _slicedToArray2.default)(_useExploration, 2), setValidExploration = _useExploration2[1]; - var updateEcogesture = (0, _react.useCallback)( /*#__PURE__*/function () { - var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(objective, doing) { - var updates, result; - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!ecogesture) { - _context.next = 6; - break; - } - - updates = _objectSpread(_objectSpread({}, ecogesture), {}, { - objective: objective, - doing: doing - }); - _context.next = 4; - return ecogestureService.updateEcogesture(updates); + var toggleMoreDetail = function toggleMoreDetail() { + setIsMoreDetail(function (prev) { + return !prev; + }); + }; + + var toggleObjective = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { + var toUpdate, updatedEcogesture; + return _regenerator.default.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + if (!ecogesture) { + _context.next = 6; + break; + } - case 4: - result = _context.sent; + toUpdate = _objectSpread(_objectSpread({}, ecogesture), {}, { + objective: !isObjective + }); + _context.next = 4; + return ecogestureService.updateEcogesture(toUpdate); - if (result) { - setIsObjective(result.objective); - setIsDoing(result.doing); - setEcogesture(result); - } + case 4: + updatedEcogesture = _context.sent; - case 6: - case "end": - return _context.stop(); - } + if (updatedEcogesture) { + setIsObjective(function (prev) { + return !prev; + }); + setEcogesture(updatedEcogesture); + } + + case 6: + case "end": + return _context.stop(); } - }, _callee); - })); + } + }, _callee); + })), [ecogesture, ecogestureService, isObjective]); + var toggleDoing = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() { + var toUpdate, updatedEcogesture; + return _regenerator.default.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + if (!ecogesture) { + _context2.next = 6; + break; + } - return function (_x, _x2) { - return _ref.apply(this, arguments); - }; - }(), [ecogesture, ecogestureService]); - var toggleObjective = (0, _react.useCallback)(function () { - updateEcogesture(!isObjective, false); - }, [isObjective, updateEcogesture]); - var toggleDoing = (0, _react.useCallback)(function () { - updateEcogesture(false, !isDoing); - }, [isDoing, updateEcogesture]); + toUpdate = _objectSpread(_objectSpread({}, ecogesture), {}, { + doing: !isDoing + }); + _context2.next = 4; + return ecogestureService.updateEcogesture(toUpdate); + + case 4: + updatedEcogesture = _context2.sent; + + if (updatedEcogesture) { + setIsDoing(function (prev) { + return !prev; + }); + setEcogesture(updatedEcogesture); + } + + case 6: + case "end": + return _context2.stop(); + } + } + }, _callee2); + })), [ecogesture, ecogestureService, isDoing]); (0, _react.useEffect)(function () { var subscribed = true; @@ -258,25 +290,25 @@ var SingleEcogestureView = function SingleEcogestureView() { } function _getSingleEcogesture() { - _getSingleEcogesture = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() { + _getSingleEcogesture = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() { var data, icon; - return _regenerator.default.wrap(function _callee2$(_context2) { + return _regenerator.default.wrap(function _callee3$(_context3) { while (1) { - switch (_context2.prev = _context2.next) { + switch (_context3.prev = _context3.next) { case 0: - _context2.next = 2; + _context3.next = 2; return ecogestureService.getEcogesturesByIds([ecogestureID || '']); case 2: - data = _context2.sent; + data = _context3.sent; if (!subscribed) { - _context2.next = 13; + _context3.next = 13; break; } if (!(data !== null && data !== void 0 && data[0])) { - _context2.next = 12; + _context3.next = 12; break; } @@ -284,11 +316,11 @@ var SingleEcogestureView = function SingleEcogestureView() { setIsObjective(data[0].objective); setIsDoing(data[0].doing); - _context2.next = 10; + _context3.next = 10; return (0, _utils.importIconById)(data[0].id, 'ecogesture'); case 10: - icon = _context2.sent; + icon = _context3.sent; if (subscribed) { setEcogestureIcon(icon || _default2.default); @@ -303,10 +335,10 @@ var SingleEcogestureView = function SingleEcogestureView() { case 13: case "end": - return _context2.stop(); + return _context3.stop(); } } - }, _callee2); + }, _callee3); })); return _getSingleEcogesture.apply(this, arguments); } @@ -353,18 +385,12 @@ var SingleEcogestureView = function SingleEcogestureView() { }, /*#__PURE__*/_react.default.createElement("div", { className: "long-name text-18-bold" }, ecogesture.longName), /*#__PURE__*/_react.default.createElement("div", { - className: "showMore text-15-normal", - onClick: function onClick() { - return setIsMoreDetail(function (prev) { - return !prev; - }); - }, + className: "toggle-text text-15-normal", + onClick: toggleMoreDetail, role: "button" - }, t("ecogesture_modal.show_".concat(isMoreDetail ? 'less' : 'more'))), /*#__PURE__*/_react.default.createElement(_core.Collapse, { - in: isMoreDetail - }, /*#__PURE__*/_react.default.createElement("div", { - className: "longDescription text-16-normal-150" - }, ecogesture.longDescription))), /*#__PURE__*/_react.default.createElement("div", { + }, isMoreDetail ? t('ecogesture_modal.show_less') : t('ecogesture_modal.show_more')), /*#__PURE__*/_react.default.createElement("div", { + className: (0, _classnames.default)('description text-16-normal-150', (0, _defineProperty2.default)({}, 'block', isMoreDetail === true)) + }, ecogesture.longDescription)), selectionCompleted && /*#__PURE__*/_react.default.createElement("div", { className: "buttons-selection" }, /*#__PURE__*/_react.default.createElement(_IconButton.default, { "aria-label": t('ecogesture.objective'), diff --git a/app/ecolyo.cdcd255bcdeb5c5c25b7.js b/app/ecolyo.4fa5fb5eb571bc5de1f9.js similarity index 98% rename from app/ecolyo.cdcd255bcdeb5c5c25b7.js rename to app/ecolyo.4fa5fb5eb571bc5de1f9.js index dde54ea874ec03a6f2e830fda277f12c69a4f385..5d71a4422ed26e9d9090d46fca9ea77fb3ac3ab3 100644 --- a/app/ecolyo.cdcd255bcdeb5c5c25b7.js +++ b/app/ecolyo.4fa5fb5eb571bc5de1f9.js @@ -64,7 +64,7 @@ /******/ /******/ // script path function /******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"1":"045e42c6ea5724fd7730","2":"ee6e82fa75e665d74560","4":"6fcfdd90ba42c0bcdeb2","5":"376cdd52c18eb6f092a0","6":"6713a954e1e05e5c1639","7":"584835707c36b8d5e353","8":"99a6ad165093607eac0c","9":"30da7dc1931663d9bbdf","10":"24e1a14cab96b50d3fbd"}[chunkId] + ".js" +/******/ return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"1":"6b43dacbc8ffbba102a3","2":"ee6e82fa75e665d74560","4":"d2bf69e982254c3ce239","5":"376cdd52c18eb6f092a0","6":"07e8fd2b54e9d8d82c0d","7":"3259106169383ae5d5ef","8":"79baa4590f4f0a94be8c","9":"30da7dc1931663d9bbdf","10":"24e1a14cab96b50d3fbd"}[chunkId] + ".js" /******/ } /******/ /******/ // The require function @@ -1542,7 +1542,7 @@ var SplashRoot = function SplashRoot(_ref) { function _loadData() { _loadData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() { - var initializationService, customPopupService, partnersInfoService, ms, startTime, transaction, termsStatus, profile, profileType, profileEcogesture, migrationsResult, _yield$Promise$all, _yield$Promise$all2, duelHash, quizHash, challengeHash, explorationHash, analysisResult, updatedProfile, fluidStatus, refDate, lastDataDate, _iterator, _step, fluid, userChallengeList, _filteredCurrentOngoi, _filteredCurrentOngoi2, _filteredCurrentOngoi3, _filteredCurrentDuelC, filteredCurrentOngoingChallenge, actionService, updatedUserChallenge, filteredCurrentDuelChallenge, _yield$initialization, _updatedUserChallenge, dataloads, challengeService, _yield$challengeServi, isDone; + var initializationService, customPopupService, partnersInfoService, ms, startTime, transaction, termsStatus, profile, profileType, profileEcogesture, migrationsResult, _yield$Promise$all, _yield$Promise$all2, duelHash, quizHash, challengeHash, explorationHash, analysisResult, updatedProfile, fluidStatus, refDate, lastDataDate, _iterator, _step, fluid, userChallengeList, _filteredCurrentOngoi, _filteredCurrentOngoi2, _filteredCurrentOngoi3, _filteredCurrentDuelC, filteredCurrentOngoingChallenge, actionService, updatedUserChallenge, filteredCurrentDuelChallenge, _yield$initialization, _updatedUserChallenge, dataloads, challengeService, _yield$challengeServi, isDone, triggerQuery, _yield$client$query, _yield$client$query$d, trigger; return _regenerator.default.wrap(function _callee7$(_context7) { while (1) { @@ -1764,9 +1764,27 @@ var SplashRoot = function SplashRoot(_ref) { }); case 81: + triggerQuery = (0, _cozyClient.Q)('io.cozy.triggers').where({ + 'message.name': 'fluidsPrices' + }); + _context7.next = 84; + return client.query(triggerQuery); + + case 84: + _yield$client$query = _context7.sent; + _yield$client$query$d = (0, _slicedToArray2.default)(_yield$client$query.data, 1); + trigger = _yield$client$query$d[0]; + + if (trigger !== null && trigger !== void 0 && trigger._id) { + client.getStackClient().fetchJSON('POST', "/jobs/triggers/".concat(trigger._id, "/launch")); + } else { + console.log('BOUUUUUUUUUUUUUUUH'); + } /** * Load custom popup and partners info synchronously so these treatments don't block the loading */ + + customPopupService.getCustomPopup().then( /*#__PURE__*/function () { var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(customPopup) { return _regenerator.default.wrap(function _callee5$(_context5) { @@ -1833,11 +1851,11 @@ var SplashRoot = function SplashRoot(_ref) { }); } - _context7.next = 91; + _context7.next = 98; break; - case 86: - _context7.prev = 86; + case 93: + _context7.prev = 93; _context7.t0 = _context7["catch"](6); if (_context7.t0.message === 'Failed to fetch' && !initStepErrors) { @@ -1850,17 +1868,17 @@ var SplashRoot = function SplashRoot(_ref) { error: _context7.t0 })); - case 91: - _context7.prev = 91; + case 98: + _context7.prev = 98; transaction.finish(); - return _context7.finish(91); + return _context7.finish(98); - case 94: + case 101: case "end": return _context7.stop(); } } - }, _callee7, null, [[6, 86, 91, 94]]); + }, _callee7, null, [[6, 93, 98, 101]]); })); return _loadData.apply(this, arguments); } @@ -3894,11 +3912,6 @@ var EcogestureSelectionDetail = function EcogestureSelectionDetail(_ref) { ecogestureIcon = _useState2[0], setEcogestureIcon = _useState2[1]; - var _useState3 = (0, _react.useState)(false), - _useState4 = (0, _slicedToArray2.default)(_useState3, 2), - showDetails = _useState4[0], - setShowDetails = _useState4[1]; - (0, _react.useEffect)(function () { var subscribed = true; @@ -3934,7 +3947,6 @@ var EcogestureSelectionDetail = function EcogestureSelectionDetail(_ref) { } getIcon(); - setShowDetails(false); return function () { subscribed = false; }; @@ -3943,30 +3955,15 @@ var EcogestureSelectionDetail = function EcogestureSelectionDetail(_ref) { className: "eg-selection-detail-container" }, /*#__PURE__*/_react.default.createElement("div", { className: "content" - }, /*#__PURE__*/_react.default.createElement("div", { - className: "iconContainer" }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, { className: "icon", icon: ecogestureIcon, size: 240 - })), /*#__PURE__*/_react.default.createElement("div", { + }), /*#__PURE__*/_react.default.createElement("div", { className: "text-22 title" }, title), /*#__PURE__*/_react.default.createElement("div", { className: "text text-18-bold" - }, ecogesture.longName), /*#__PURE__*/_react.default.createElement("div", { - className: "showMore text-15-normal", - onClick: function onClick() { - return setShowDetails(function (prev) { - return !prev; - }); - }, - role: "button" - }, t("ecogesture_modal.show_".concat(showDetails ? 'less' : 'more'))), /*#__PURE__*/_react.default.createElement(_core.Collapse, { - in: showDetails, - exit: false - }, /*#__PURE__*/_react.default.createElement("div", { - className: "longDescription text-16-normal-150" - }, ecogesture.longDescription))), /*#__PURE__*/_react.default.createElement("div", { + }, ecogesture.longName)), /*#__PURE__*/_react.default.createElement("div", { className: "buttons" }, /*#__PURE__*/_react.default.createElement(_core.Button, { "aria-label": t('ecogesture_selection.button_objective'), @@ -8612,7 +8609,7 @@ exports.default = _default; /***/ "9pOX": /***/ (function(module) { -module.exports = JSON.parse("{\"common\":{\"title_app\":\"Ecolyo\",\"title_consumption\":\"Conso\",\"title_challenge\":\"Défis\",\"title_quiz\":\"Quiz\",\"title_exploration\":\"Exploration\",\"title_action\":\"Action\",\"title_duel\":\"Duel final\",\"title_ecogesture\":\"Astuce\",\"title_ecogestures\":\"Astuces\",\"title_ecogestures_choice\":\"Sélection des astuces\",\"title_options\":\"Options\",\"title_analysis\":\"Analyse\",\"title_profiletype\":\"Ajuster mon profil\",\"title_legal_notice\":\"Mentions légales\",\"title_gcu\":\"Conditions générales d’utilisation\",\"title_accessibility\":\"Accessibilité : non conforme\",\"title_sge_connect\":\"Connexion à l'électricité\",\"accessibility\":{\"loading\":\"Chargement\"}},\"navigation\":{\"consumption\":\"Conso\",\"challenges\":\"Défis\",\"ecogestures\":\"Astuces\",\"options\":\"Options\",\"analysis\":\"Analyse\"},\"FLUID\":{\"ELECTRICITY\":{\"NAME\":\"Électricité\",\"LABEL\":\"Électricité\",\"LABEL_PREPOSITION\":\"d'électricité\",\"UNIT\":\"kWh\",\"ADD\":\"Ajouter l'électricité\",\"MEGAUNIT\":\"MWh\",\"provider\":\"Enedis\"},\"WATER\":{\"NAME\":\"Eau\",\"LABEL\":\"Eau\",\"LABEL_PREPOSITION\":\"d'eau\",\"ADD\":\"Ajouter l'eau\",\"UNIT\":\"L\",\"MEGAUNIT\":\"m³\",\"provider\":\"Eau Publique du Grand Lyon\"},\"GAS\":{\"NAME\":\"Gaz\",\"LABEL\":\"Gaz\",\"LABEL_PREPOSITION\":\"de gaz\",\"ADD\":\"Ajouter le gaz\",\"UNIT\":\"kWh\",\"MEGAUNIT\":\"MWh\",\"provider\":\"GRDF\"},\"MULTIFLUID\":{\"NAME\":\"Multi fluide\",\"LABEL\":\"Multi\",\"UNIT\":\"€\"}},\"action\":{\"duration\":\"Durée : %{smartCount} jours\",\"result\":\"Résultat\",\"finished\":\"Défi terminé !\",\"details\":\"Détail de l'astuce\",\"apply\":\"J'applique cette action\",\"other\":\"Je choisis une autre action\",\"resultText1\":\"Cela n'a pas été trop difficile ?\",\"resultText2\":\"Jetez un coup d'Å“il dans la page conso dans 1 à 3 jours, le temps que vos données arrivent, pour voir l'impact de votre action.\",\"resultText3\":\"Pas de baisse de significative ? Pas de panique, en maintenant cette pratique dans le temps, les économies d'énergies et d'eau seront davantage visibles.\",\"resultText4\":\"Dans tous les cas, bravo, vous remportez...\",\"ok\":\"Ok\"},\"action_modal\":{\"accept\":\"Je relève le défi\",\"refuse\":\"Je me défile\",\"accessibility\":{\"window_title\":\"Fenêtre de confirmation\",\"button_accept\":\"Accepter\",\"button_refuse\":\"Refuser\"}},\"analysis\":{\"viewTitle\":\"Analyse\",\"warning_title\":\"Analyse incomplète\",\"warning_text\":\"Ecolyo n'a pas encore reçu toutes les données %{fluidList} pour ce mois\",\"comparison\":\"Comparatif\",\"analysis_date\":\"Conso totale\",\"challenge\":\"Défis terminés en\",\"user_consumption\":\"Votre conso\",\"average_home\":\"Conso moyenne d'un profil similaire\",\"average_home_description\":\"Le comparatif ici présenté est calculé sur la base d'un profil similaire au vôtre. Il s'agit d'un calcul et non d'une comparaison avec les autres utilisateurs de l'application. Sont pris en compte l'ensemble des informations entrées dans votre profil : mode de chauffage, âge du logement et éventuels travaux de rénovation, etc. Ce modèle a été créé avec l'Agence Locale de l'Energie sur la base de chiffres issues du Schéma Directeur des Energies de la Métropole de Lyon et de Chiffres-clé publiés par l'ADEME (l'Agence de l'Environnement et de la Maîtrise de l'Energie).\",\"approximative_description\":\"Pour comparer votre consommation avec un foyer similaire ou avec une conso idéale, veuillez détailler votre profil\",\"no_data\":\"Pas de données\",\"accessibility\":{\"button_go_to_profil\":\"Détailler mon profil\"},\"max_day\":\"Jour où vous avez le plus consommé\",\"compare\":{\"title\":\"Comparateur\",\"month_tab\":\"Comparer au mois dernier\",\"year_tab\":\"Comparer à l'année dernière\"}},\"analysis_pie\":{\"total\":\"Conso totale\",\"month\":\"Au mois \",\"estimation\":\"Comment sont estimés<br>les prix ?\"},\"special_elec\":{\"title\":\"Spécial Électricité\",\"average\":\"Conso moyenne\",\"weektype\":\"un jour de \",\"week\":\"semaine\",\"weekend\":\"week-end\",\"min\":\"Conso minimum\",\"percentage\":\"Part dans la facture\",\"price\":\"Soit\",\"maxPower\":\"Puissance maximum atteinte\",\"showModal\":\"Plus d'infos\"},\"elec_info_modal\":{\"accessibility\":{\"window_title\":\"electricity-info-modal\",\"button_close\":\"close-modal\"},\"title1\":\"Qu’est-ce que la consommation minimum ?\",\"title2\":\"Qu’est-ce que la puissance maximum ?\",\"text1\":\"Elle correspond à votre plus petite consommation du mois sur un créneau d'une demi-heure.\",\"text2\":\"Nous extrapolons cette consommation sur 1 mois afin vous donner un aperçu de la consommation de vos consommations électriques en veille (box, télé, chargeurs, ...) ou encore de celle, incompressible, de vos appareils de froid (frigo, congélateur).\",\"text3\":\"C’est la puissance maximum délivrée par tous les appareils fonctionnant au même moment dans votre logement.\",\"text4\":\"Vous avez choisi une puissance maximum dans votre offre d’électricité (3, 6 ou 9 kVA...) que vous ne devez pas dépasser pour ne pas faire sauter votre compteur. \",\"text5\":\"Cette puissance varie d'un mois à l'autre, regardez cette valeur sur l'ensemble de l'année pour vérifier si votre puissance souscrite correspond bien à votre usage.\"},\"auth\":{\"enedissgegrandlyon\":{\"title\":\"Ecolyo doit se connecter à l’électricité\",\"bill\":\"Munissez-vous d’une <span>facture d’électricité</span> pour valider la connexion\",\"connect\":\"Je me connecte à l'électricité\",\"accessibility\":{\"connect\":\"Se connecter\"},\"identityTitle\":\"Nom inscrit sur la facture\",\"firstName\":\"Prénom\",\"lastName\":\"Nom\",\"pdlTitle\":\"Numéro de votre compteur électrique (PDL)\",\"pdlLabel\":\"N° (14 chiffres)\",\"pdlHint\":\"Où trouver le n° de PDL ?\",\"pdlModal\":{\"txt1\":\"Où trouver le n° de PDL ou PRM ?\",\"txt2\":\"Le numéro de PDL ou PRM se compose de 14 chiffres.\",\"txt3\":\"Votre numéro de PDL ou PRM se trouve sur votre facture d’électricité.\",\"txt4\":\"Si vous avez un compteur Linky, appuyez sur le bouton “+†et faites défiler l’affichage jusqu’à obtenir l’affichage suivant :\"},\"addressTitle\":\"Adresse du titulaire\",\"address\":\"Numéro et voie\",\"zipCode\":\"Code postal\",\"city\":\"Ville\",\"headConsent\":\"Vous allez partager vos données à la Métropole de Lyon. Elles seront directement transférées à Ecolyo à l'intérieur de votre cloud personnel, sans que la Métropole n'y accède ni ne les visualise.\",\"textConsent\":\"Afin de vous offrir des fonctionnalités de visualisation et d'analyse, Ecolyo a besoin des données suivantes : \",\"consentLi1\":\"L'historique et le relevé de vos consommations quotidiennes en kWh\",\"consentLi2\":\"L'historique et le relevé de vos consommations au pas de temps 30 minutes\",\"consentLi3\":\"Les puissances maximales atteintes quotidiennement\",\"consentLi4\":\"Les données contractuelles (début de contrat et puissance souscrite)\",\"consentCheck1\":\"Je consens à partager les données personnelles ci-dessus pour une durée d'<span>un an</span>\",\"consentCheck2\":\"J’atteste être le titulaire du point de livraison (PDL) renseigné à l’étape précédente\",\"modalHint\":{\"accessibility\":\"Titre de la modale\",\"title\":\"Où trouver le n° de PDL ?\",\"button\":\"J'ai compris\",\"button-accessibility\":\"Bouton valider\"}},\"grdfgrandlyon\":{\"bill\":\"Munissez-vous d’une <span>facture de gaz</span> pour valider la connexion\",\"connect\":\"Je me connecte au gaz\",\"accessibility\":{\"connect\":\"Se connecter\"},\"connect_form\":{\"label\":\"Je donne mon accord via mon compte GRDF\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter au gaz\"},\"with_account\":{\"title\":\"Votre compte GRDF a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter votre compteur de gaz et Ecolyo !\"},\"step1\":{\"info1\":\"Un <span>compte chez GRDF</span> est nécessaire pour vous connecter au gaz <span>quelque soit votre fournisseur de gaz</span>.\",\"info2\":\"<p>GRDF est le gestionnaire de réseau. C'est lui qui est responsable de votre compteur Gazpar et de la collecte des données de consommation.</p>\",\"info3\":\"Possédez-vous un <span>compte GRDF</span> ?\"},\"step2\":{\"info1\":\"Une fois votre compte créé, <span>n'oubliez pas de revenir sur Ecolyo</span> pour finaliser la connexion.\"},\"step3\":{\"info1\":\"La visualisation de vos données sur Ecolyo demande l'activation du <span>partage de toutes les données.</span>\",\"info2\":\"Pour une expérience optimale, <span>une période de consentement de 1 an</span> est recommandée à partir d’aujourd’hui.\",\"info3\":\"<p>Veillez également à indiquer une date antérieure pour l'historique (1er calendrier) afin de pouvoir récupérer jusqu'à 3 ans d'historique.</p>\"},\"button_go_to_partner_site\":\"Aller sur GRDF\"},\"eglgrandlyon\":{\"bill\":\"Munissez-vous d’une <span>facture d'eau</span> pour valider la connexion\",\"connect\":\"Je me connecte à l'eau\",\"accessibility\":{\"connect\":\"Se connecter\"},\"connect_form\":{\"login\":\"Identifiant (7 chiffres)\",\"password\":\"Mot de passe\",\"label\":\"Je connecte Ecolyo à mon compte Eau Publique du Grand Lyon\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter à l'eau\"},\"with_account\":{\"title\":\"Votre compte Eau Publique du Grand Lyon a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter votre compteur d'eau et Ecolyo !\"},\"step1\":{\"info1\":\"La connexion se fait via <span>votre compte Eau Publique du Grand Lyon</span>.\",\"info2\":\"Possédez-vous un <span>compte Eau Publique du Grand Lyon</span> ?\"},\"step2\":{\"info1\":\"Une fois votre compte créé, <span>n'oubliez pas de revenir sur Ecolyo</span> pour finaliser la connexion.\"},\"button_go_to_partner_site\":\"Aller sur EPGL\"},\"connect_oauth\":{\"loading\":\"Chargement...\"},\"accessibility\":{\"button_reveal_password\":\"Afficher le mot de passe\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"window_title\":\"Fenêtre d'information sur la création de compte.\",\"button_close\":\"Fermer la fenêtre.\"},\"button_previous\":\"Précédent\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"button_has_account\":\"J'ai déjà un compte\",\"button_validate\":\"J'ai compris\",\"button_showOfflineData\":\"Voir mes anciennes données\",\"warningOfflineData\":\"Attention, vous visualisez d’anciennes données. Pour actualiser vos données, connectez votre compteur\"},\"challenge\":{\"card\":{\"ongoing\":{\"quiz\":\"Quiz\",\"exploration\":\"Explorations\",\"action\":\"Actions\",\"duel\":\"Duel Final\",\"result\":\"Résultat\",\"duelDone\":\"du duel final\"},\"locked\":{\"desc\":\"À débloquer en terminant le défi précédent\"}},\"card_done\":{\"saving\":\"Économie de\",\"depense\":\"Dépense de\",\"win\":\"Gagné\",\"lost\":\"Perdu\",\"final_defi\":\"sur le duel final\",\"final_defi_view\":\"Revoir le duel final\",\"reset_defi\":\"Relancer le défi\"},\"card_last\":{\"title\":\"Tous les défis sont terminés\",\"message1\":\"Nous travaillons actuellement à vous proposer de nouveaux défis.\",\"button\":\"Suggérer une idée de défi\"},\"card_unlocked\":{\"button_launch\":\"Lancer le défi\"},\"accessibility\":{\"button_launch\":\"Lancer le défi\",\"button_goto_konnector\":\"Aller aux connecteurs\",\"button_slider_previous\":\"Précédent\",\"button_slider_next\":\"Suivant\"}},\"challenge_no_fluid_modal\":{\"title\":\"Oups !\",\"content\":\"Connectez au moins 1 fluide pour pouvoir jouer\",\"button_validate\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Valider\"}},\"consumption\":{\"display_last_data\":\"Voir mes dernières consos\",\"accessibility\":{\"button_previous_period\":\"Afficher la période précédente\",\"button_next_period\":\"Afficher la période suivante\",\"button_previous_value\":\"Sélectionner la valeur précédente\",\"button_next_value\":\"Sélectionner la valeur suivante\",\"checkbox_compare\":\"Afficher ou cacher la comparaison\"},\"partner_issue_modal\":{\"title\":\"Attention !\",\"error_connect_gaz\":\"La connexion à vos données de <span class='gaz'>gaz</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='gaz'>GRDF</span> ou dans notre service)\",\"error_connect_elec\":\"La connexion à vos données d'<span class='elec'>électricité</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='elec'>Enedis</span> ou dans notre service)\",\"error_connect_water\":\"La connexion à vos données d'<span class='water'>eau</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='water'>Eau Publique du Grand Lyon</span> ou dans notre service)\",\"additional_text\":\"La visualisation et/ou la connexion à vos données de consommation peut s'en trouver affectée.<br /><br /><i>Merci pour votre patience en attendant un retour à la normale :)</i>\",\"ok\":\"Ok\"},\"compared\":\"Comparé\"},\"consumption_details\":{\"detail\":\"Détail par fluide\",\"connect\":\"Connecter d'autres fluides\",\"mini_cards_label\":\"AUTRES ENERGIES\"},\"consumption_visualizer\":{\"missing_data\":\"Données manquantes\",\"no_data\":\"Pas de données\",\"why_no_data\":\"Pourquoi n'ai-je pas de données ?\",\"last_valid_data\":\"Dernières données valides : %{date}\",\"last_available_data\":\"Dernières données disponibles : %{date}\",\"last_valid_data_multi\":\"Dernières données complètes : %{date}\",\"data_to_come\":\"à venir\",\"aie\":\"Aïe !\",\"data_empty\":\"Vide\",\"estimated\":\"estimés\",\"dataModal\":{\"list_title\":\"3 raisons possibles :\",\"item1\":\"le lien entre Ecolyo et le fournisseur de données est rompu : une mise à jour de ce lien (en bas de la page) peut résoudre ce problème.\",\"item2\":\"un problème technique chez votre gestionnaire : se connecter directement chez ce gestionnaire pour vérifier que cette donnée apparaît.\",\"item3\":\"pour le gaz : vous n'avez pas autorisé Ecolyo à accéder aux données de consommation de cette période.\",\"item4\":\"vous n'aviez tout simplement pas de compteur communicant à l'époque !\"},\"modal\":{\"window_title\":\"info estimation des prix\",\"title\":\"Comment sont estimés les prix ?\",\"close\":\"Fermer la fenêtre\",\"part1\":\"Le prix de votre électricité ou de votre gaz dépend de l'offre choisie auprès de votre fournisseur. N’ayant pas accès à cette information, Ecolyo affiche un prix moyen par fluide. \",\"part2\":\"Tarifs moyens retenus :\",\"list1\":\" : 1 kWh = %{elecPrice} €TTC (il correspond au tarif réglementé d’EDF au %{elecPriceStartDate} pour une puissance souscrite de 3 ou 6 kVA et hors offre heure pleine/heure creuse)\",\"list2\":\" : 1 kWh = %{gasPrice} €TTC (tarif réglementé de vente au %{gasPriceStartDate} pour un consommateur soutirant moins de 6 MWh par an)\",\"list3\":\" : 1 litre d’eau = %{waterPrice} € TTC (prix constaté au %{waterPriceStartDate} pour un abonnement et une consommation de 120 m3/an sur la Métropole de Lyon)\",\"part3\":\"Le coût de votre abonnement n'est pas pris en compte dans Ecolyo.\"},\"release_notes_modal\":{\"title\":\"Du nouveau sur Ecolyo !\",\"message\":\"Les mises à jour suivantes ont été effectuées sur votre application :\",\"go_back\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre de notifications\",\"button_go_back\":\"J'ai compris\"}}},\"ecogestures\":{\"loading\":\"Chargement des astuces\"},\"duel\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"average_info\":\"%{average} euros étant votre moyenne actuelle, relevez-vous le défi ?\",\"button_start\":\"Allons-y !\",\"goal1\":\"Faites moins que votre moyenne actuelle sur %{durationInDays} jours\",\"goal2\":\"pour gagner le badge %{title}\",\"goal_done\":\"Duel remporté\",\"goal_failed\":\"Duel perdu\",\"caption_average\":\"Votre moyenne à titre indicatif\",\"caption_consumption\":\"Votre consommation\",\"caption_incoming\":\"Données à venir\",\"accessibility\":{\"button_go_back\":\"Retour\",\"button_start_duel\":\"Lancer le duel\",\"button_start_quiz\":\"Lancer le quiz\"}},\"duel_result_modal\":{\"success\":{\"title\":\"Félicitations\",\"message1\":\"Vous avez économisé %{value} €\",\"message2\":\"et gagné le badge %{title} !\",\"button_validate\":\"Youpi\"},\"lost\":{\"title\":\"Presque\",\"message1\":\"Vous avez dépassé de %{value} €\",\"message2\":\"et manqué le badge %{title}\",\"button_validate\":\"Zut alors\"},\"accessibility\":{\"window_title\":\"Fenêtre de résultat\",\"button_validate\":\"Valider\"}},\"last_duel_modal\":{\"title\":\"Félicitations !\",\"subtitle\":\"Vous avez terminé tous les défis !\",\"message1\":\"Nous travaillons actuellement à vous proposer de nouveaux défis.\",\"message2\":\"Vous pouvez donner votre avis sur ce que vous aimeriez en cliquant sur la bulle d'aide.\"},\"duel_empty_value_modal\":{\"title\":\"Oups !\",\"message\":\"Impossible de lancer le duel. Il nous manque en effet certaines de vos données de consommation pour vous proposer un duel à votre hauteur.\",\"button\":\"Je retourne au menu des défis\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Retourner au menu des défis\"}},\"ecogesture\":{\"title_tab_0\":\"Objectifs\",\"title_tab_1\":\"Je fais déjà \",\"title_tab_2\":\"Toutes\",\"MENU_TITLE\":\"Filtrer\",\"ALL\":\"Tous les usages\",\"HEATING\":\"Chauffage\",\"AIR_CONDITIONING\":\"Climatisation\",\"ECS\":\"Eau chaude\",\"COLD_WATER\":\"Eau froide\",\"ELECTRICITY_SPECIFIC\":\"Électricité courante\",\"COOKING\":\"Cuisson\",\"selection\":\"Sélectionner les astuces les plus adaptées à votre consommation\",\"selection_2\":\"vues sur\",\"button_selection\":\"Continuer ma sélection\",\"no_ecogesture\":\"Aucune astuce ne correspond à votre filtrage\",\"no_ecogesture_filter\":{\"text1\":\"Nous n'avons pas trouvé d'astuces adaptées à votre profil dans cette catégorie.\",\"text2\":\"En effet, de par votre profil et vos modes de chauffage, d'eau ou d'eau chaude sanitaire, nous n'avons pas identifié d’astuces vous permettant de diminuer vos factures à titre individuel. Toutefois, vous pouvez toujours agir pour préserver les ressources en appliquant et diffusant autour de vous les autres bonnes pratiques présentées dans la partie \\\"Toutes les astuces\\\".\"},\"adjust_profil\":{\"description\":\"Pour une sélection d’astuces adaptée à votre consommation, vous pouvez ajuster votre profil.\",\"button_go_to_profil\":\"Ajuster mon profil\"},\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenêtre\",\"button_selection\":\"Aller à la page de sélection\"},\"doing\":\"Je fais déjà \",\"objective\":\"Objectif\",\"emptyList\":{\"obj1\":\"Les astuces présentées sont des actions qui vous permettent de réduire vos consommations et donc vos factures. On parle parfois d’écogestes.\",\"obj1_done\":\"Aucune astuce n’a été sélectionnée comme objectif actuellement.\",\"obj2\":\"Vous pouvez sélectionner ceux à mettre en objectifs et ceux que vous appliquez déjà .\",\"obj2_done\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous souhaitez garder en objectif dans cette section.\",\"doing1\":\"Aucune astuce n’a été sélectionnée dans la catégorie appliquée actuellement.\",\"doing1_done\":\"Aucune astuce n’est indiquée comme déjà appliquée actuellement.\",\"doing2\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous mettez déjà en pratique dans cette section.\",\"doing2_done\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous mettez déjà en pratique dans cette section.\",\"btn1\":\"Voir toutes les astuces\",\"btn2\":\"Sélectionner\"},\"initModal\":{\"title\":\"Sélectionner mes astuces\",\"text1\":\"Les astuces présentées sont des actions qui vous permettent de réduire vos consommations et donc vos factures. On parle parfois d’écogestes \",\"text2\":\"Vous pouvez sélectionner celles à mettre en objectifs et celles que vous appliquez déjà .\",\"text3\":\"Afin de pré-sélectionner les astuces correspondant à votre consommation, merci de répondre à quelques rapides questions.\",\"btn1\":\"Plus tard\",\"btn2\":\"C'est parti !\"},\"reinit\":\"Réinitialiser ma sélection\",\"reinitModal\":{\"title_part1\":\"Cette action\",\"title_part2\":\"supprimera votre liste d’astuces\",\"title_part3\":\"sélectionnées dans\",\"title_part4\":\"“Objectifsâ€\",\"title_part5\":\"et\",\"title_part6\":\"“Je fais déjà â€\",\"text1\":\"Vous pourrez ensuite faire une nouvelle sélection adaptée à votre consommation.\",\"text2\":\"Souhaitez-vous réinitialiser votre sélection d’astuces ?\",\"btn1\":\"Non\",\"btn2\":\"Réinitialiser\"}},\"ecogesture_modal\":{\"title_ecogesture\":\"Astuce\",\"title_action\":\"Action\",\"efficiency\":\"Efficacité\",\"show_less\":\"Voir moins\",\"show_more\":\"Voir plus\",\"select_action\":\"Je choisis cette action\",\"accessibility\":{\"window_title_ecogesture\":\"Fenêtre astuce\",\"window_title_action\":\"Fenêtre action\",\"button_close\":\"Fermer la fenêtre\",\"button_select_action\":\"Sélectionner cette action\",\"button_see_more_detail\":\"Afficher plus de détails\"}},\"ecogesture_info_modal\":{\"header\":\"Comment sont choisis les astuces adaptées à mon profil ?\",\"text\":\"Les astuces adaptés à votre profil sont aujourd’hui choisies en fonction des compteurs individuels que vous possédez (communicants ou non). Ceux présentés ici vous permettent d'agir sur vos consommations individuelles. Des modes de tri plus personnalisables seront proposés à l'avenir.\",\"button_close\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre d'information\",\"button_close\":\"Fermer la fenêtre\"}},\"ecogesture_form\":{\"heating_type\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"5\":\"Autre\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\",\"5_text\":\"Produit grâce à un autre moyen\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"}},\"ecogesture_profile\":{\"equipments\":{\"question\":\"Quels équipements possédez-vous ?\",\"hint\":\"Plusieurs réponses possibles\",\"air_conditioning\":\"Climatisation\",\"computer\":\"Ordinateur\",\"microwave\":\"Micro-ondes\",\"oven\":\"Four\",\"washing_machine\":\"Lave-linge\",\"dishwasher\":\"Lave-vaisselle\",\"cooking_plates\":\"Plaques électriques\",\"garden\":\"Jardin\",\"dryer\":\"Sèche-linge\",\"refregirator\":\"Réfrigérateur\",\"fan\":\"Ventilateur\",\"water_heater\":\"Chauffe-eau\",\"curtain\":\"Rideaux\",\"internet_box\":\"Box internet\",\"ventilation\":\"VMC\",\"freezer\":\"Congélateur\",\"boiler\":\"Chaudière\",\"hydraulic_heating\":\"Chauffage hydraulique\"}},\"ecogesture_selection\":{\"header\":\"Sélection des astuces\",\"title\":\"Vous avez parcouru un groupe de %{smartCount} astuces\",\"text\":\"Voulez-vous continuer sur votre lancée ou remettre cette sélection à plus tard ?\",\"title_final\":\"Félicitations !\",\"text_final_1\":\"Vous avez terminé la sélection des astuces adaptées à votre consommation.\",\"text_final_2\":\"Vous pouvez les retrouver dans les sections “Objectifs†et “Je fais déjà †selon que vous les pratiquiez déjà ou non.\",\"button_go_to_ecogesture\":\"Plus tard\",\"button_ok\":\"J'ai compris\",\"button_continue\":\"Poursuivre\",\"button_objective\":\"Objectif\",\"button_doing\":\"Je fais déjà \",\"button_skip\":\"Pas intéressé\",\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenêtre\",\"button_go_to_ecogesture\":\"Retourner aux astuces\",\"button_continue\":\"Poursuivre\",\"button_ok\":\"Fermer la sélection\"},\"selectionModal\":{\"title\":\"Des astuces correspondant à votre profil ont été trouvées !\",\"text\":\"À vous de choisir celles que vous souhaitez mettre en objectif et celles que vous faites déjà .\",\"button_close\":\"C'est parti !\"}},\"exploration\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"button_already_done\":\"C’est déjà fait !\",\"button_come_back\":\"Je reviens quand cela sera fait\",\"button_start\":\"C'est parti !\",\"watch_consumption\":\"Je fonce\",\"congratulation\":\"Bravo !\",\"earn\":\"Vous remportez\",\"button_confirm\":\"Ok\",\"interval\":{\"explanation\":\"Vous pouvez vérifier cette informations sur l'écran Conso.\"},\"accessibility\":{\"button_already_done\":\"Marquer l'exploration comme déjà réalisée\",\"button_confirm\":\"Valider\",\"button_come_back\":\"Fermer l'exploration\",\"button_go_back\":\"Retour\",\"button_start\":\"Lancer l'exploration\"}},\"error_page\":{\"main\":\"Erreur\",\"back\":\"Retour\",\"no_ecogesture\":\"Oups ! Nous n'avons pas trouvé l'astuce demandée.\"},\"help\":{\"title_help\":\"une question ? un problème ? une suggestion ?\",\"read_help\":\"Nous écrire via le Service d'Assistance Utilisateur\"},\"feedback\":{\"title\":\"Vous allez contacter le Service Assistance Utilisateur du Grand Lyon.\",\"text1\":\"Vous pourrez nous remonter un problème, chercher de l'aide pour vous connecter plus facilement, ou encore nous partager une bonne idée d'évolution.\",\"text2\":\"N'hésitez pas à nous écrire ! L'équipe Ecolyo vous répondra avec plaisir :)\",\"later\":\"Plus tard\",\"lets_go\":\"J'y vais\",\"accessibility\":{\"window_title\":\"Fenêtre de partage de retours\",\"button_close\":\"Fermer la fenêtre de partage de retours\"}},\"dataShare\":{\"title1\":\"Bienvenue !\",\"title1Update\":\"Ecolyo évolue !\",\"title2Update\":\"Pour continuer à utiliser Ecolyo, merci d’accepter les modalités de traitement des données ci-dessous.\",\"part1\":\"Pour le bon fonctionnement du service, nous avons besoin de l’adresse email utilisée lors la création de votre cloud personnel Grand Lyon.\",\"part2\":\"Cette donnée de compte est conservée dans Ecolyo le temps de l’utilisation de ce service.\",\"part3\":\"La Métropole de Lyon utilisera cet email afin de vous tenir informé·e :\",\"item1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter.\",\"item2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"item3\":\"De l’évolution de vos consommations, des nouveautés et de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part4\":\"Vos données privées de consommation d’énergie et d’eau sont récupérées, sauvegardées et stockées dans votre cloud personnel à votre initiative sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part5\":\"Il en est de même pour les données privées de composition du logement et du foyer, fournies par vos soins. Elles restent également sans visibilité de la Métropole de Lyon sur leur contenu.\\nLes données d’identification entrées lors de la connexion aux données de consommations d’électricité sont quant à elles conservées dans un espace sécurisé de la Métropole de Lyon et sont utilisées uniquement à des fins de contrôle du consentement par des organismes extérieurs.\",\"part6\":\"Dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées et pseudonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation, d’évaluer globalement l’usage de l’application via des mesures d’audience ainsi que d’évaluer à terme l’impact global en termes de baisse des consommations énergétiques de notre service.\",\"part7\":\"Au sein de votre cloud personnel, vous pouvez à tout moment exercer vos droits d’accès, de rectification, de portabilité, de limitation et d’opposition en consultant notamment la page Options.\",\"part8\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part9\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 \",\"part10\":\"ou en ligne, au moyen du formulaire disponible à l'adresse suivante : \",\"link1\":\"<a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/</a>\",\"validDataConsent\":\"Je consens au traitement de mes données tel que décrit ci-dessus.\",\"validCGU\":\"Je valide les <span class=\\\"action\\\">Conditions Générales d’Utilisation</span> \",\"validLegal\":\" du service et ai pris connaissance des <span class=\\\"action\\\"> Mentions Légales </span> de celui-ci.\",\"button_accept\":\"C'est parti !\",\"accessibility\":{\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"minorUpdate\":{\"title\":\"Ecolyo évolue !\",\"button\":\"J'ai compris\"},\"gcu\":{\"title\":\"Conditions générales d’utilisation du service\",\"version\":\"Version du 12.12.2022\",\"content\":{\"title1\":\"Ecolyo, késako ?\",\"part1_1\":\"Ecolyo est un service proposé par la Métropole de Lyon vous permettant de suivre au même endroit vos consommations d’électricité, de gaz et d’eau, en kWh, en litres, en euros et à différentes échelles de temps. Ce service vous permet également de participer à des défis individuels et vous offre une analyse de vos consommations. Des astuces vous sont aussi proposées afin de vous permettre de réduire vos consommations.\",\"part1_2\":\"C’est un service gratuit qui prend la forme d’un site web dit « responsive », c’est-à -dire qu’il peut être consulté sur ordinateur ou sur mobile. Sur mobile, c’est une application que l’on a souhaitée ergonomique, réactive et esthétique pour votre plaisir de navigation et d’utilisation au quotidien.\",\"part1_3\":\"Tous les termes « techniques » sont définis en bas de page.\",\"title2\":\"Quelles fonctionnalités le service propose-t-il ?\",\"part2_1\":\"La fonctionnalité principale d’Ecolyo est la visualisation, au même endroit, de vos consommations d’électricité, de gaz et d’eau et ce, à différents pas de temps (de la demi-heure – uniquement pour l’électricité, à plusieurs années, en passant par les pas de temps journaliers et mensuels). La visualisation des consommations se fait en kWh pour l’énergie et en L pour l’eau ainsi qu’en euros (euros résultant d’un prix moyenné).\",\"part2_2\":\"Au-delà de la visualisation de vos consommations et parce que nous souhaitons vous aider à diminuer ces consommations vous retrouverez plusieurs autres pages : \",\"part2_2_list1\":\"Défis : Des quiz, et actions à mettre en place vous seront proposés pour vous pousser à réduire vos consommations.\",\"part2_2_list2\":\"Astuces : Une liste d’astuces pour maîtriser ses consommations d’énergie et d’eau à trier par usage, et avec une possibilité de les adapter plus précisément à votre profil.\",\"part2_2_list3\":\"Analyse : Une analyse de vos consommations réelles en comparaison à celle d’un foyer étant proche d’une vôtre.\",\"part2_3\":\"Pour la page Analyse ainsi que pour la partie personnalisation des astuces, des éléments supplémentaires sur votre profil vous seront demandés. L’ensemble de ces informations récoltées à l’aide du formulaire peuvent être modifiées par la suite.\",\"part2_4\":\"Dernière page : la page Options dans laquelle vous pourrez vous abonner à un service d’alerte sur vos consommations d’eau, de quoi ajuster votre profil ou encore vous désabonner de la lettre mensuelle.\",\"title3\":\"Comment ai-je accès à mes données d’électricité, de gaz et d’eau ?\",\"part3_1\":\"Pour visualiser vos consommations réelles et profiter pleinement du potentiel de notre service, il vous faut au minimum un des trois compteurs communicants suivants : Linky (pour l’électricité), Gazpar (pour le gaz), Téléo (pour l’eau).\",\"part3_2\":\"Ces compteurs sont opérés par les gestionnaires de réseaux. Pour Linky, c’est Enedis, le gestionnaire de réseau de distribution d’électricité. Pour Gazpar, GRDF est responsable de cette gestion. Et pour Téléo, c’est Eau Publique du Grand Lyon.\",\"part3_3\":\"Ces acteurs sont responsables de la relève de vos données. Ces données servent notamment à votre fournisseur d’électricité, de gaz ou d’eau pour permettre la facturation de vos consommations d’énergie. Des fournisseurs d’électricité ou de gaz il y en a des dizaines. Les gestionnaires de réseaux (… et de votre compteur) ne sont qu’au nombre de trois. Nous avons donc décidé de travailler avec eux, au plus près de la donnée brute issue de vos compteurs.\",\"part3_4\":\"Il vous faudra donc avoir un compte chez GRDF et Eau Publique du Grand Lyon pour accéder à vos données. Si vous n’en avez pas, il suffira de vous en créer un. Ceci ne sera à faire qu’une fois, au début.\",\"title4\":\"Ecolyo se trouve dans un cloud personnel Grand Lyon, qu’est-ce que cela signifie ?\",\"part4_1\":\"Comme vous avez dû le remarquer, lors de votre première connexion à Ecolyo vous avez dû vous créer un compte Cloud Personnel Grand Lyon. Ce cloud personnel est un espace sécurisé porté par l’ambition de vous apporter visibilité, transparence et maîtrise sur l’usage de vos données personnelles, et dont les fonctionnalités vous permettant de récupérer, synchroniser, stocker et partager vos données avec les destinataires de votre choix. Le service Ecolyo se déploie à l’intérieur de cet espace protégé. Dans ce cloud personnel, vous pourrez accéder également à d’autres services. Toutes les données traitées par Ecolyo, mais aussi les autres services que vous seriez amenés à utiliser dans ce cloud personnel restent dans ce Cloud Personnel Grand Lyon et n’en sortent pas, sauf si vous décidez vous-même de partager vos données avec des tiers.\",\"part4_2\":\"Pour en savoir plus sur ce cloud et son utilisation, ainsi que la durée de conservation de vos données, vous pouvez lire les conditions générales d’utilisation du service <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">ici</a>.\",\"title5\":\"Et donc concrètement pour Ecolyo, quelles données sont collectées et qui y a accès ?\",\"part5_1\":\"Pour qu’Ecolyo ait accès à vos données de consommations, vous devrez activer vos différents connecteurs. À ce moment-là , pour la connexion aux données de gaz et d’eau à travers un parcours qui vous conduira de manière intuitive sur le site de chacun des gestionnaires de réseaux concerné, vous pourrez donner votre consentement à partager ces données avec le Service Ecolyo, et ce pour une durée limitée dans le temps. Pour l’électricité, le don du consentement et la connexion aux données se fait directement dans notre service. Quid de la durée de ce consentement ? Pour les données électriques, elle est par défaut d'un an. Pour les données gaz, cela sera à vous de la définir (nous vous recommandons 1 an pour une expérience optimale). Les données utilisées pour vérifier la bonne connexion de vos données d’électricité sont stockées du côté de la Métropole de Lyon sur des serveurs sécurisés.\",\"part5_2\":\"Vos connecteurs, une fois configurés, permettent le transfert de vos données de consommations au service Ecolyo. Le transfert de ces données de consommation se fait sans que personne n’accède à leur contenu, pas même la Métropole de Lyon. En effet, ces données sont stockées et traitées directement dans votre cloud personnel qui en assure la protection. Tous les calculs, analyses et traitements sur ces données sont faites DANS votre espace personnel sans visibilité sur le contenu des données par la Métropole de Lyon.\",\"part5_3\":\"Vous pouvez bien sûr mettre fin à la récupération/ au transfert de vos données de consommation sur votre espace cloud personnel à tout moment et à plusieurs niveaux : \",\"part5_3_list1\":\"Vous pouvez supprimer le transfert quotidien de vos données en supprimant tout simplement le connecteur dans la page Consos (en bas).\",\"part5_3_list2\":\"Pour supprimer l’ensemble de vos données ainsi que votre espace personnel Grand Lyon, vous devez demander la suppression de votre cloud. Pour faire cela, rendez-vous dans les paramètres de votre cloud personnel via la barre blanche en haut d’Ecolyo et appuyez sur le bouton « Supprimer mon compte » dans la partie paramètres.\",\"part5_4\":\"Des données sur le profil de votre foyer peuvent être également remplies au sein de l’application. Ces données s’enrichiront au fur et à mesure de votre utilisation du service avec d’autres informations : défis réalisés, étoiles gagnées, etc. L’ensemble de ces données restent à l’intérieur de votre cloud personnel, sans que personne n’y ait accès.\",\"part5_5\":\"Enfin, afin de permettre une mise à jour quotidienne de vos données de consommations, vos identifiants Eau Publique du Grand Lyon, un jeton d’identification GRDF ainsi que vos numéros de compteurs sont stockés.\",\"title6\":\"Personne n’a donc accès à mes données, pas même la Métropole de Lyon, vraiment ?\",\"part6_1\":\"Conformément aux indications du paragraphe précédent, la Métropole de Lyon n’accède ni à vos données de consommations ni aux données utilisées via certaines fonctionnalités du service comme le formulaire (celui-là même qui permet l’analyse de vos consommations personnalisée ainsi qu’une sélection d’éco-gestes personnalisés). Toutes ces informations sont bien gardées au chaud dans votre cloud personnel Grand Lyon.\",\"part6_2\":\"Seul vous pouvez accepter de partager vos données, documents ou fichiers privés avec la Métropole de Lyon, ses partenaires ou d’autres utilisateurs ou acteurs (publics ou privés) après recueil de votre consentement éclairé et par une action expresse de votre part.\",\"part6_3\":\"La Métropole de Lyon n'a cependant accès qu’à l’adresse email utilisée lors la création de votre cloud personnel Grand Lyon. Elle utilise cet email afin de vous tenir informé·e :\",\"part6_3_list1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter. \",\"part6_3_list2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"part6_3_list3\":\"De l’évolution de vos consommations, des nouveautés et de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part6_4\":\"Elle stocke également les informations transmises lors de la connexion à l’électricité (nom, adresse postale). Ces informations doivent être stockées car la Métropole de Lyon est régulièrement contrôlée par Enedis et doit prouver détenir le consentement des personnes pour lesquelles elle va chercher la donnée.\",\"part6_5\":\"Par ailleurs, et dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service. Parmi ces statistiques, des mesures d’audience de la fréquentation des différentes pages du service sont réalisées. Vous pouvez, via la page Options, à tout instant, décider de vous opposer à la récupération de ces données d’utilisation.\",\"title8\":\"Encore des questions ?\",\"part8_1\":\"N’hésitez pas à consulter la FAQ ou à nous contacter via le formulaire de contact présente sur l’ensemble des pages.\",\"part8_2\":\"Dernière option, contactez-nous directement à <a href=\\\"mailto:ecolyo@grandlyon.com\\\">ecolyo(at)grandlyon.com</a>.\",\"title9\":\"LEXIQUE\",\"part9_1_title\":\"Cloud personnel Grand Lyon : \",\"part9_1_content\":\"Cloud personnel : appelé aussi le « domicile numérique », le cloud personnel est souvent réduit à un simple espace de stockage de documents mais il est bien plus que ça. C'est un espace individuel et sécurisé où vous pouvez accéder à des services sans exposer aucune donnée à l’extérieur. Vous seul pouvez y accéder, personne d'autre.\",\"part9_2_title\":\"Connecteur : \",\"part9_2_content\":\"Un connecteur est un service, installé dans votre cloud personnel également, qui a pour but uniquement d’aller récupérer les données auprès de différents partenaires/sources de données. Dans le cadre d’Ecolyo, trois connecteurs sont pré-installés dans votre cloud personnel : celui d’Enedis, celui de GRDF et celui d’Eau Publique du Grand Lyon.\",\"part9_3_title\":\"Compteur communicant : \",\"part9_3_content\":\"Un compteur communicant est un compteur qui mesure de manière précise et détaillée vos consommations et peut transmettre ces données au gestionnaire de réseau via une technologie radio (c'est le cas pour Gazpar et Téléo par exemple) ou via les réseaux électriques (via Courant Porteur en ligne, c'est le cas pour Linky par exemple).\",\"part9_4_title\":\"Fournisseur : \",\"part9_4_content\":\"Votre fournisseur d’électricité, de gaz ou d’eau est l’entreprise qui vous facture votre électricité, gaz ou eau. Côté électricité il en existe <a href=\\\"https://www.enedis.fr/liste-des-fournisseurs-delectricite\\\">aujourd’hui plus de 50</a>, chacun proposant des tarifs différents.\",\"part9_5_title\":\"Gestionnaire de réseau de distribution : \",\"part9_5_content\":\"Appelé aussi parfois distributeur, il est en charge de la livraison de votre électricité, gaz ou eau jusqu’à votre domicile. Il est aussi en charge du compteur qui relève vos consommations. Il transmet vos données de consommations à votre fournisseur afin qu’il effectue la facturation de vos consommations d’énergie. Il peut également les transmettre à tout acteur avec qui vous avez décidé de partager ces données.\"}},\"gcu_modal\":{\"button_accept\":\"J'accepte\",\"accessibility\":{\"window_title\":\"Conditions générales d’utilisation\",\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"matomo\":{\"matomo_title\":\"Suivi statistiques d'usage Matomo\"},\"header\":{\"accessibility\":{\"button_back\":\"Retour à la page précédente\",\"button_open_feedbacks\":\"Ouvrir le partage de retours\"}},\"konnector_form\":{\"label_updated_at\":\"Dernière mise-à -jour le\",\"button_update\":\"Mettre à jour\",\"loading\":\"Chargement...\",\"wait_end_issue\":\"Attendre la fin de la maintenance avant de mettre à jour.\",\"button_delete\":\"Supprimer\",\"issue\":\"Le problème semble venir de \",\"resolve\":\"Une mise à jour peut résoudre ce problème.\",\"login_failed\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"not_installed\":\"Le connecteur n'est pas installé. Veuillez l'installer en cliquant sur le bouton ci-dessous.\",\"button_install\":\"Installer\",\"error_account_creation\":\"Une erreur est survenue, veuillez essayer de nouveau.\",\"error_no_login_password\":\"Identifiant et mot de passe requis\",\"error_login_failed\":\"Identifiants invalides\",\"error_update\":\"Un problème est survenu lors du rapatriement de vos données.\",\"error_update_oauth\":\"Votre autorisation pour afficher vos données %{fluid} a expiré.\",\"error_consent_form_gas\":\"Vos données ne peuvent être récupérées car vous n'avez pas coché l'autorisation d'accès aux données informatives lors de votre partage de consentement.\",\"button_oauth_reload\":\"Redonner mon consentement\",\"OK\":\"Ok\",\"konnector_delta\":{\"ELECTRICITY\":\"La donnée de consommation électrique arrive normalement à J+1. Un retard d'un ou deux jours est parfois constaté.\",\"GAS\":\"La donnée de consommation de gaz arrive normalement à J+3. Un retard d'un ou deux jours est parfois constaté.\",\"WATER\":\"La donnée de consommation d'eau arrive normalement à J+3. Un retard d'un ou deux jours est parfois constaté.\"},\"accessibility\":{\"button_install\":\"Installer le connecteur\",\"button_update\":\"Mettre à jour votre connexion\",\"button_delete\":\"Supprimer votre connexion\"}},\"konnector_options\":{\"label_connect_to_electricity\":\"Se connecter à l'électricité\",\"label_connect_to_water\":\"Se connecter à l'eau\",\"label_connect_to_gas\":\"Se connecter au gaz\",\"label_offline_electricity\":\"Électricité déconnectée\",\"label_offline_water\":\"Eau déconnectée\",\"label_offline_gas\":\"Gaz déconnecté\",\"partner_issue\":\"En maintenance\",\"outdated\":\"Données manquantes depuis %{isOutdatedData} jours\",\"accessibility\":{\"label_ko_status\":\"Connecteur en erreur\",\"button_toggle_detail_electricity\":\"Afficher ou masquer le détail de la connexion à l'électricité\",\"button_toggle_detail_water\":\"Afficher ou masquer le détail de la connexion à l'eau\",\"button_toggle_detail_gas\":\"Afficher ou masquer le détail de la connexion au gaz\"}},\"konnector_modal\":{\"loading_data\":\"Veuillez patienter, vos données sont en cours de chargement.\",\"loading_data_update\":\"Veuillez patienter, vos données sont en cours de mise à jour.\",\"logging_txt\":\"Nous vérifions vos informations d'identité\",\"success_txt\":\"Félicitations !\",\"success_data_electricity\":\"Vos données de consommation d'électricité sont maintenant connectées à Ecolyo.\",\"success_data_water\":\"Vos données de consommation d'eau sont maintenant connectées à Ecolyo.\",\"success_data_gas\":\"Vos données de consommation de gaz sont maintenant connectées à Ecolyo.\",\"success_data_additional_electricity\":\"Les données de consommations mettent entre un et deux jours pour arriver.\",\"success_data_additional_water\":\"Les données de consommations mettent entre trois et cinq jours pour arriver.\",\"success_data_additional_gas\":\"Les données de consommations mettent entre trois et cinq jours pour arriver.\",\"success_update_txt\":\"Connexion réussie !\",\"success_data_update_electricity\":\"Ecolyo est bien connecté à votre compteur d'électricité.\",\"success_data_update_water\":\"Ecolyo est bien connecté à votre compteur d'eau.\",\"success_data_update_gas\":\"Ecolyo est bien connecté à votre compteur de gaz.\",\"success_data_additional_update_electricity\":\"Sachez que la donnée de consommation d'électricité arrive entre J+1 et J+2.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"success_data_additional_update_water\":\"Sachez que la donnée de consommation d'eau arrive entre J+3 et J+5.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"success_data_additional_update_gas\":\"Sachez que la donnée de consommation de gaz arrive entre J+3 et J+5.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"error_txt\":\"Aïe !\",\"mismatch\":{\"title\":\"Vos données n'ont pas pu être récupérées.\",\"text1\":\"Vos nom et numéro de compteur ne correspondent plus. Merci de reconfigurer votre connecteur.\",\"text2\":\"Reconfigurer mon connecteur ?\",\"text3\":\"La reconfiguration de votre connecteur passe par sa suppression et sa nouvelle installation. Vos données seront conservées.\"},\"error_data_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité ne seront pas chargées.\",\"error_data_water\":\"Un problème est survenu. Vos données de consommation d’eau ne seront pas chargées.\",\"error_credentials_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter. L'identifiant est un numéro à 7 chiffres (différent de votre numéro de contrat).\",\"error_credentials_electricity\":\"Il semblerait que les nom(s) et adresse ne concordent pas avec le numéro de votre compteur.\",\"error_credentials_electricity_2\":\"Nous ne pouvons vous donner accès aux données de consommation.\",\"error_credentials_update_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter.\",\"error_credentials_update_electricity\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"error_credentials_update_gas\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"error_data_gas\":\"Un problème est survenu. Vos données de consommation de gaz ne seront pas chargées.\",\"error_consent_form_gas_title\":\"Nous n'avons pas pu connecter vos données de consommation de gaz à Ecolyo.\",\"error_consent_form_gas_content\":\"En effet, le partage de vos données de consommation de gaz \\\"informatives\\\" doit être accepté.\",\"error_consent_form_gas_content_2\":\"Merci de cocher \\\"OUI\\\" au partage de vos données de consommation de gaz, et à \\\"Autoriser l'accès à mes données informatives\\\".\",\"error_data_update_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité n’ont pas été mises à jour.\",\"error_data_update_water\":\"Un problème est survenu. Vos données de consommation d’eau n’ont pas été mises à jour.\",\"error_data_update_gas\":\"Un problème est survenu. Vos données de consommation de gaz n’ont pas été mises à jour.\",\"error_data_2\":\"Merci de réessayer plus tard.\",\"button_validate\":\"Ok\",\"button_understood\":\"J'ai compris\",\"button_try_again\":\"Réessayer\",\"show_common_error\":\"Voir les erreurs récurrentes\",\"show_common_error_list\":\"<span>Le problème peut provenir des cas suivants :</span><ul><li>Vous avez un co-titulaire sur votre contrat. Veillez à bien entrer le nom du <span class=\\\"gold\\\">titulaire du contrat</span> et non le co-titulaire.</li><li> Votre nom comporte un tiret ? Tentez sans le tiret.</li><li>Entrez bien le nom de votre commune de résidence en entier (tirets et accents inclus)</li><li>Avez-vous bien entré le <span class=\\\"gold\\\">numéro de votre compteur</span> (PDL) ? Tout autre numéro (de contrat, de client) ne fonctionne pas.</li></ul><p>Si vous rencontrez toujours des difficultés, contactez notre service d'aide </p><div class=\\\"center\\\">Avez-vous pensez à vérifier ces informations ?</div>\",\"accessibility\":{\"window_title\":\"Fenêtre d'attente de connexion\",\"button_close\":\"Fermer la fenêtre\"}},\"consent_outdated\":{\"title\":{\"0\":\"Votre autorisation pour afficher vos données d’électricité a expiré\",\"2\":\"Votre autorisation pour afficher vos données de gaz a expiré\"},\"text1\":{\"0\":\"Veuillez re-donner votre consentement pour la transmission et la reconnexion de vos données ENEDIS à Ecolyo.\",\"2\":\"Veuillez re-donner votre accord pour que GRDF nous transmette vos données de consommation.\"},\"text2\":{\"0\":\"Souhaitez-vous renouveler votre accord dès maintenant pour un an ?\",\"2\":\"Voulez-vous donner votre accord sur votre compte GRDF maintenant ?\"},\"later\":\"Plus tard\",\"go\":\"J'y vais\",\"no\":\"Non\",\"yes\":\"Oui\"},\"delete_grdf_modal\":{\"text1\":\"La suppression de la connexion avec GRDF s’accompagne de la suppression de votre consentement à partager vos données gaz avec Ecolyo.\",\"text2\":\"Si vous souhaitez vous reconnecter, il vous faudra re-donner votre accord pour que GRDF nous transmette vos données de consommation.\",\"text3\":\"Voulez-vous supprimer votre connexion et votre consentement à GRDF ?\",\"cancel\":\"Plus tard\",\"go\":\"Oui\"},\"legal\":{\"read_legal\":\"Lire les mentions légales\",\"title_legal\":\"Mentions légales & CGU\",\"version\":\"Version du 12.12.2022\",\"site\":\"Site du service Ecolyo : <a href=\\\"https://ecolyo.com/\\\"> https://ecolyo.com/</a>\",\"adress\":\"Métropole de Lyon - 20, rue du Lac – CS 33569 - 69505 Lyon cedex 03\",\"phone\":\"Tél : (33) 4 78 63 40 40\",\"mail\":\"<a href=\\\"mailto:ecolyo@grandlyon.com\\\"> ecolyo(at)grandlyon.com</a>\",\"p1b\":\"Directrice de publication : \",\"p1\":\"Blandine MELAY, Responsable du Service Transition Énergétique\",\"p2b\":\"Animation éditoriale, gestion et mise à jour : \",\"p2\":\"Marion BERTHOLON, Chargée de services numériques pour la transition énergétique\",\"p3b\":\"Photographies : \",\"p3\":\"sauf mention contraire, les photos sont la propriété de la Métropole de Lyon\",\"p4b\":\"Conception et Charte graphique : \",\"p4\":\"Florent Dufier\",\"p5b\":\"Réalisation technique : \",\"p5\":\"Métropole de Lyon, Sopra Steria\",\"p6b\":\"Maintenance technique : \",\"p6\":\"Délégation Développement économique, emploi & savoirs - Innovation numérique & systèmes d’information - Usages et services numériques - Développement des services numériques\",\"title1\":\"Crédits\",\"part1\":\"Ce site est le résultat de développements spécifiques réalisés dans les langages Go, TypeScript, HTML et Sass. Les développements s’appuient sur plusieurs bibliothèques et frameworks libres : axios, cozy-bar, cozy-client, cozy-harvest-lib, cozy-scripts, cozy-ui, d3, detect-browser, global, lodash, luxon, moment, moment-timezone, node-sass, object-hash, react, react-dom, react-redux, react-router-dom, react-swipeable-views, redux-devtools-extension, sass-loader. Les tests de l’application s’appuient sur les bibliothèques et frameworks libres suivants: enzyme, enzyme-adapter-react-16, jest-junit, react-test-renderer, redux-mock-store. La pile technique intègre également les applications Cozy stack, Yarn, Docker, ACH. Les déploiements sont réalisés sur le registre hébergé chez Cozy. L’équipe de réalisation utilise au quotidien les applications GitLab, IceScrum, RocketChat, SonarQube.\",\"title2\":\"Traitement des données personnelles et droit d’accès, de modification et de suppression\",\"part2\":\"Conformément à la réglementation en vigueur en matière de protection des données personnelles, le service Ecolyo a fait l’objet d’une inscription au registre des traitements de la Métropole de Lyon. Ecolyo fait partie de l’écosystème de services orientés « self data » déployés par la Métropole de Lyon avec l’ambition d’offrir aux usagers métropolitains les outils et les services leur permettant d’exercer directement leur droit à la portabilité, dans un cadre apte à garantir aussi bien la transparence et le contrôle sur l’usage de leurs données personnelles que l’exploitation directe du contenu de ces données selon leurs libres choix. Le self data est en effet selon la Fondation Internet Nouvelle Génération (FING) « la production, l’exploitation et le partage de données personnelles par les individus, sous leur contrôle et à leurs propres fins ». Au sein de cet environnement self data, la gestion des données s’appuie sur l’organisation suivante des rôles et responsabilités associées : \",\"part2-1\":\"Les partenaires du service GRDF et Eau Publique du Grand Lyon sont responsables exclusivement des seuls traitements de Données Personnelles relatifs à la collecte des données de consommation de gaz et d’eau de l’utilisateur et à leur transmission sur la plateforme de cloud personnel, après consentement de l’utilisateur.\",\"part2-2\":\"Enedis est responsable de la collecte des données de consommation d’électricité et de leur mise à disposition à la Métropole de Lyon qui, elle en gère la transmission sur la plateforme du cloud personnel de l’utilisateur, après avoir récupéré le consentement de l’utilisateur.\",\"part2-3\":\"La Métropole de Lyon est responsable de traitement sur le périmètre du service Ecolyo qu’elle propose à l’usager, ainsi que des traitements nécessaires à la fourniture de la plateforme de cloud personnel qu’elle met à disposition de l’usager pour accéder au service Ecolyo. En sa qualité de responsable de ces traitements, elle collecte et traite : \",\"part2-3-1\":\"Les données de compte de l’usager renseignées par l’usager au sein de son espace de cloud personnel Grand Lyon à des fins de gestion du compte et de communication avec l’usager ;\",\"part2-3-2\":\"Les données de compte de l’utilisateur lui permettant de connecter ses données d’électricité à Ecolyo ;\",\"part2-3-3\":\"Les données privées de consommation d’énergie et d’eau dont la récupération, la sauvegarde, le stockage, la synchronisation et le partage sur la plateforme de cloud personnel sont initiés par l’usager sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-3-4\":\"Les données privées sur la composition du logement et du foyer de l’utilisateur, fournies par l’utilisateur lui-même au sein du service, sont traitées par le service sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-3-5\":\"Des métriques d’usage du service anonymisées et remontées périodiquement afin d’améliorer la qualité du service et d’évaluer son impact (Plus d’informations sur la manière dont votre anonymat est bien préservé dans ce processus <a href=\\\"https://ecolyo.com/cloud_statistiques.html\\\">ici</a>).\",\"part2-4\":\"La Métropole réalise également des mesures d’audience à l’aide de la solution Matomo. Afin de vous fournir un meilleur service et d’améliorer votre expérience d'utilisateur, nous utilisons des solutions de mesure d’audience qui utilisent la technologie des « cookies », des fichiers texte qui sont enregistrés sur votre ordinateur et qui permettent de générer des informations envoyées aux serveurs de mesure d’audience. Sur ces serveurs, l’adresse IP est anonymisée. Les données recueillies ont uniquement pour finalité de permettre d'analyser la fréquentation de nos pages afin d'en améliorer le contenu. Il s'agit de statistiques agrégées permettant de connaître le nombre de visites et de visiteurs différents, les pages les plus populaires, les chemins préférés, les niveaux d'activité par jour de la semaine et par heure de la journée, les principales erreurs etc. Vous avez cependant le droit de vous opposer à l’utilisation de ces cookies, et donc au traitement de vos données personnelles de navigation, en vous rendant dans la page Options de notre service.\",\"part2-5\":\"L’usager est seul décisionnaire des finalités d’utilisation qu’il souhaite définir pour le traitement de ses données personnelles de consommation, à la suite de leur transmission par les partenaires du service Ecolyo sur son cloud personnel. Ainsi, dans le cadre de l’utilisation d’Ecolyo, l’usager ne recevra les données des partenaires du service : Enedis, GRDF et Eau Publique du Grand Lyon seulement qu’à sa demande expresse après la saisie de ses identifiants.\",\"part2-6\":\"L’utilisateur est donc le seul à accéder :\",\"part2-6-1\":\"À ses données de consommation d’électricité horaires, journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-6-2\":\"À ses données de consommation de gaz journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-6-3\":\"À ses données de consommation eau journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-7\":\"Les engagements et responsabilités de la Métropole de Lyon concernant la protection des données et la confidentialité des données Ecolyo sont précisés dans les Mentions légales et les conditions d’utilisation du cloud personnel Grand Lyon qui accueille aujourd’hui le service Ecolyo et sans lequel le service ne peut pas fonctionner. Pour plus d’informations sur les engagements et responsabilités de la Métropole de Lyon concernant la protection et la confidentialité dans le cloud personnel, nous vous invitons à vous référer <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">aux mentions légales et CGU du cloud personnel métropolitain.</a> \",\"part2-8\":\"Conformément à la loi 78-17 du 6 janvier 1978 modifiée relative à l’information, aux fichiers et aux libertés, vous disposez d’un droit d’accès, de rectification et d’opposition au traitement de vos données à caractère personnel. Votre cloud personnel vous permet d’exercer ces droits directement dans cet espace sur vos données de compte. S’agissant des données de consommations d’électricité et de gaz, l’utilisateur peut supprimer son consentement à partager ses données en supprimant son connecteur dans la page Consos.\",\"part2-9\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part2-10\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou en ligne, au moyen du formulaire disponible à l'adresse suivante : <a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/.</a>\",\"part2-11\":\"L’exercice de ces droits sur vos données personnelles auprès de la Métropole de Lyon concerne exclusivement les données traitées dans le cadre du service « Ecolyo ».\",\"title3\":\"Dispositions légales\",\"part3-1\":\"Les divers éléments du site web (la forme, la mise en page, le fonds, la structure …) sont protégés par le droit des dessins et modèles, le droit d’auteur, le droit des marques ainsi que le droit à l’image et ils ne peuvent être copiés ou imités en tout ou partie sauf autorisation expresse de la Métropole de Lyon.\",\"part3-2\":\"Toute personne ne respectant pas les dispositions légales applicables se rend coupable du délit de contrefaçon et est passible des sanctions pénales prévues par la loi.\",\"title4\":\"Droits d’auteurs\",\"part4-1\":\"Les photographies, textes, logos, pictogrammes, ainsi que toutes Å“uvres intégrées dans le site sont la propriété de la \\\"Métropole de Lyon\\\" ou de tiers ayant autorisé la \\\"Métropole de Lyon\\\" à les utiliser.\",\"part4-2\":\"Les reproductions, les transmissions, les modifications, les réutilisations, sur un support papier ou informatique, dudit site et des Å“uvres qui y sont reproduites ne sont autorisées que pour un usage personnel et privé conforme aux dispositions de l’article L 122-5 du Code de la Propriété Intellectuelle. Ces reproductions devront ainsi notamment indiquer clairement la source et l’auteur du site et/ou de ces Å“uvres multimédias. En aucun cas ces reproductions ne sauraient porter préjudice aux droits des tiers. Les reproductions, les transmissions, les modifications, les réutilisations à des fins publicitaires, commerciales ou d’information, de tout ou partie du site, sont totalement interdites.\",\"title5\":\"Logo de la Métropole de Lyon et d’Ecolyo\",\"part5\":\"Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent pas être modifiés – proportions, couleurs, éléments, constituants – et ne peuvent pas être sujet à aucune transformation, animation ou tout autre processus. Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent être utilisés et associés qu’aux seules informations vérifiables. Ils ne peuvent être notamment utilisés que pour illustrer des relations avec la Métropole de Lyon ou des actions de sponsorings dûment établies. Quel que soit le cas d’espèce, la Métropole de Lyon se réserve le droit d’approuver ou de désapprouver toute utilisation des logos de la Métropole de Lyon et d’Ecolyo, pour assurer son utilisation correcte, conformément à l’éthique, la morale et aux intérêts de la Métropole de Lyon. Les conditions susmentionnées s’appliquent dans le cadre de pages web, elles ne font pas référence à l’utilisation des logos dans tout autre document. La Métropole de Lyon se réserve le droit de modifier les conditions d’utilisation des logos de la Métropole de Lyon et d’Ecolyo à tout moment et sans préavis.\",\"title6\":\"Droit des bases de données\",\"part6\":\"Les bases de données sont protégées par la loi du 1er juillet 1998 et le régime français du droit d’auteur.\",\"title7\":\"Établissements de liens vers le site Ecolyo\",\"part7-1\":\"La Métropole de Lyon autorise la mise en place d’un lien hypertexte vers son service Ecolyo pour tous les sites internet, à l’exclusion de ceux diffusant des informations à caractère polémique, pornographique, xénophobe ou pouvant, dans une plus large mesure porter atteinte à la sensibilité du plus grand nombre.\",\"part7-2\":\"Le lien doit aboutir à la page d’accueil du service (<a href=\\\"https://ecolyo.com\\\">https://ecolyo.com</a>), cette page devant apparaître dans une nouvelle fenêtre. Les pages du service Ecolyo ne doivent en aucun cas être intégrées à l’intérieur des pages d’un autre site (iframe).\",\"part7-3\":\"Dans tous les cas d’espèce, La Métropole de Lyon se réserve le droit de demander la suppression d’un lien si elle estime que le site cible ne respecte pas les règles ainsi définies.\",\"title8\":\"Liens vers des sites tiers depuis le site Ecolyo\",\"part8\":\"Les liens hypertextes mis en Å“uvre au sein du site en direction d’autres sites et/ou de pages personnelles et d’une manière générale vers toutes ressources existantes sur internet ne sauraient engager la responsabilité de la Métropole de Lyon quant aux liens qu’ils contiennent ou aux changements ou mises à jour qui leur sont apportés.\",\"title9\":\"Mise en garde générale\",\"part9-1\":\"Nos services mettent tout en Å“uvre pour offrir aux visiteurs de ce site web des informations fiables et vérifiées. Cependant, malgré tous les soins apportés, le site peut comporter des inexactitudes, des défauts de mise à jour ou des erreurs.\",\"part9-2\":\"Nous remercions les utilisateurs du site de nous faire part d’éventuelles omissions, erreurs ou corrections par mail sur la boite aux lettres du webmestre ou directement via le formulaire proposé dans le service.\",\"accessibility\":{\"button_close\":\"Fermer la fenêtre\"}},\"oauth\":{\"window\":{\"title\":\"OAuth\"}},\"onboarding\":{\"welcomeModal\":{\"title\":\"Vous êtes à mi-chemin !\",\"part1\":\"Votre cloud personnel a bien été créé.\",\"part2\":\"Il vous faut maintenant donner votre accord pour connecter vos compteurs au service.\",\"button_valid\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre de bienvenue\",\"button_valid\":\"Valider\"}}},\"performance_indicator\":{\"bilan\":{\"text1\":\"Par rapport à \",\"text2\":\"soit une différence de : \"},\"error_no_compare\":\"comparaison impossible\",\"error_no_compare_reason\":\"(manque de données)\",\"error_no_compare_no_data\":\"Vos consommations pour cette période sont incomplètes à cause d’un problème technique concernant :\",\"fpi\":{\"no_data\":\"Données non disponibles\",\"no_comparison\":\"Pas de comparaison possible\"}},\"profile\":{\"report\":{\"title_alert\":\"Alerte Consommation Excessive d'Eau\",\"title_bilan\":\"Notification par mail\",\"switch_label_bilan\":\"Je reçois la lettre mensuelle contenant un bilan et des conseils sur ma consommation.\",\"switch_label_alert\":\"Être prévenu d’un dépassement anormal de ma consommation d’eau\",\"input_label_alert\":\"Si ma consommation d’eau quotidienne dépasse :\",\"input_label_subtext_alert\":\"Votre consommation quotidienne maximum sur les 6 derniers mois : \",\"activate\":\"Activer\",\"deactivate\":\"Désactiver\"},\"accessibility\":{\"button_toggle_mail_report\":\"Recevoir mon bilan mensuel par mail\",\"button_toggle_consumption_alert\":\"Recevoir des alertes sur mes consommations journalières\",\"input_water_alert_report\":\"Indiquer une limite de consommation d'eau journalière\"}},\"profile_type\":{\"title_profile\":\"Mes données\",\"read_profile\":\"Ajuster mon profil\",\"button_update_profile\":\"J'ajuste mon profil\",\"your_profile\":\"Mon profil\",\"multi_choices\":\"Plusieurs réponses possibles\",\"housing_type\":{\"title\":\"Logement\",\"question\":\"De quel type de logement disposez-vous ?\",\"individual_house\":\"Maison individuelle\",\"apartment\":\"Appartement\"},\"construction_year\":{\"title\":\"Construction\",\"question\":\"Quelle est son année de construction ?\",\"text_before_1948\":\"Construit avant 1948\",\"text_between_1948_and_1974\":\"Construit entre 1948 et 1974\",\"text_between_1975_and_1989\":\"Construit entre 1975 et 1989\",\"text_between_1990_and_1998\":\"Construit entre 1990 et 1998\",\"text_after_1998\":\"Construit après 1998\",\"text_unknown\":\"Construit après 1998\",\"before_1948\":\"Avant 1948\",\"between_1948_and_1974\":\"Entre 1948 et 1974\",\"between_1975_and_1989\":\"Entre 1975 et 1989\",\"between_1990_and_1998\":\"Entre 1990 et 1998\",\"after_1998\":\"Après 1998\",\"unknown\":\"Je ne sais pas\"},\"occupantsNumber\":{\"single\":\" occupant\",\"multi\":\" occupants\"},\"area\":{\"title\":\"Surface\",\"question\":\"Quelle est sa surface en m² ?\",\"name\":\" m²\"},\"occupants_number\":{\"title\":\"Nombre d'occupants\",\"question\":\"Combien il y a-t-il d'occupants ?\"},\"outside_facing_walls\":{\"1\":\"1 façade\",\"2\":\"2 façades\",\"3\":\"3 façades\",\"4\":\"4 façades\",\"title\":\"Murs extérieurs\",\"question\":\"Combien de façades donnent sur l'extérieur ?\",\"text\":{\"single\":\" façade donne sur l'extérieur\",\"multi\":\" façades donnent sur l'extérieur\"}},\"floor\":{\"title\":\"Étage\",\"question\":\"À quel étage est votre appartement ?\",\"ground_floor\":\"Au rez-de-chaussée\",\"intermediate_floor\":\"Étage intermédiaire\",\"last_floor\":\"Dernier étage\",\"not_applicable\":\"Sans objet\"},\"heating\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"individual_insulation_work\":{\"title\":\"Travaux de rénovation\",\"question\":\"Quels travaux de rénovation avez-vous réalisés ces 10 dernières années ?\",\"none\":\"Aucun\",\"roof_insulation\":\"Isolation toiture\",\"window_replacement\":\"Remplacement fenêtres\",\"wall_insulation\":\"Isolation des murs\",\"window_replacement_and_wall_insulation\":\"Remplacement fenêtres et isolation des murs\",\"window_replacement_and_roof_insulation\":\"Remplacement fenêtres et isolation toiture\",\"roof_and_wall_insulation\":\"Isolation toiture et murs\",\"window_replacement_and_roof_and_wall_insulation\":\"Remplacement fenêtre et isolation des murs et isolation toiture\",\"built_after_1998\":\"construit après 1998\"},\"facilities_installation\":{\"title\":\"Équipement\"},\"ventilation\":{\"title\":\"Ventilation double flux\",\"question\":\"Êtes-vous équipé d'une ventilation double flux ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une ventilation double flux\"},\"heater_replacement\":{\"title\":\"Pompe à chaleur ou poêle à bois\",\"question\":\"Au cours de ces 10 dernières années, avez-vous remplacé votre chaudière ou vous êtes-vous équipé d'une pompe à chaleur ou d'un poêle à bois ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une pompe à chaleur ou poêle à bois\"},\"cold_water\":{\"title\":\"Eau\",\"question\":\"Votre eau est-elle comprise dans vos charges collectives ?\",\"individual\":\"Non\",\"collective\":\"Oui\",\"individual_text\":\"Individuelle\",\"collective_text\":\"Collective\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"},\"hot_water_equipment\":{\"title\":\"Eau chaude\",\"question\":\"Utilisez-vous l’un de ces équipements pour produire votre eau chaude ?\",\"solar\":\"Chauffe-eau solaire\",\"thermodynamic\":\"Chauffe-eau thermodynamique\",\"other\":\"Aucun des deux\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"5\":\"Autre\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\",\"5_text\":\"Produit grâce à un autre moyen\"},\"hot_water_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Autre (Fioul, Bois)\",\"title\":\"Source eau chaude\",\"question\":\"Avec quelle source d’énergie votre eau chaude est-elle produite ?\",\"no_fluid_text\":\"Produite ni par de l'électricité, ni par du gaz\",\"0_text\":\"Produite grâce à de l'électricité\",\"2_text\":\"Produite grâce au gaz\",\"3_text\":\"Produite à partir d'un autre moyen que l'électricité ou le gaz\"},\"cooking_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"title\":\"Source cuisson\",\"question\":\"Quel mode de cuisson principal utilisez-vous ?\"},\"update_date\":{\"title\":\"Date de prise d'effet\",\"question\":\"A partir de quelle date souhaitez-vous que ce nouveau profil soit pris en compte dans l'analyse de vos données ?\"},\"fluidType\":{\"0\":\"Électricité\",\"1\":\"Eau\",\"2\":\"Gaz\"},\"form\":{\"button_previous\":\"Précédent\",\"button_next\":\"Suivant\",\"button_end\":\"Terminer\",\"button_loading\":\"Chargement...\"},\"finished\":{\"title\":\"Terminé !\",\"label1\":\"Grâce à ces informations, vous pourrez comparer votre consommation avec celle d'un foyer vous ressemblant davantage !\",\"label2\":\"Nous pourrons aussi vous proposer des astuces pour maîtriser vos consommations adaptées à votre profil.\",\"button_validate\":\"OK\"},\"accessibility\":{\"button_end\":\"Terminer la mise à jour du profil\",\"button_next\":\"Aller à la section suivante\",\"button_previous\":\"Retour à la section précédente\",\"button_update_profile\":\"Ouvrir la page de mise à jour du profil\",\"button_toggle_detail_profile\":\"Afficher ou masquer le détail du profil\",\"button_toggle_export\":\"Afficher ou masquer l'export des données'\",\"button_toggle_average_home\":\"Afficher ou masquer les informations sur le comparatif'\",\"button_validate\":\"Valider\"}},\"export\":{\"title_export\":\"Télécharger mes données\",\"text1\":\"Vous allez télécharger l'historique mensuel de vos fluides sélectionnés\",\"fluid_select\":\"Pour quel(s) fluide(s) souhaitez vous exporter vos données ?\",\"no_data\":\"Vous n'avez aucune donnée de fluide...\",\"button_download\":\"Télécharger\",\"month\":\"Mois\",\"year\":\"Année\",\"consumption\":\"Consommation\",\"maxpower\":\"Puissance max (kVA)\",\"button_close\":\"Fermer la fenêtre\",\"modal_start\":{\"accessibility_title\":\"Commencer le téléchargement\",\"text1\":\"Vous allez télécharger des données personnelles, Ecolyo n’est plus responsable de celles-ci une fois téléchargées\",\"text2\":\"Les données seront téléchargées sous forme de document excel (.xls)\",\"text3\":\"Lancer le téléchargement ?\",\"button_cancel\":\"Annuler\"},\"modal_loading\":{\"accessibility_title\":\"Téléchargement en cours\",\"text1\":\"Données en cours de téléchargement\",\"text2\":\"Veuillez ne pas quitter l’application pendant la récupération et le téléchargement de vos données\",\"button_cancel\":\"Annuler le téléchargement\"},\"modal_done\":{\"accessibility_title\":\"Téléchargement terminé\",\"text1\":\"Vos données ont bien été téléchargées !\",\"text2\":\"Vous pouvez maintenant retrouver l’historique de vos données sur votre appareil\",\"error1\":\"Aïe !\",\"error2\":\"Il semblerait qu’une erreur se soit produite lors du téléchargement de vos données.\",\"button_close\":\"Fermer\",\"button_close_error\":\"Revenir plus tard\"}},\"quiz\":{\"explanation\":\"Répondez correctement aux 5 questions et remportez 5 des 15 étoiles nécessaires pour débloquer le duel final\",\"score_final\":\"SCORE FINAL\",\"correct\":\"Bravo !\",\"wrong\":\"Raté !\",\"rightAnswer\":\"Bonne réponse :\",\"earn\":\"Vous remportez\",\"button_go_back\":\"Retour\",\"button_end_quiz\":\"Youpi !\",\"button_try_again\":\"Réessayer\",\"button_validate\":\"Valider\",\"next\":\"Suivant\",\"consumption_question\":\"Question sur votre consommation\",\"accessibility\":{\"window_title\":\"Fenêtre de résultat\",\"button_end_quiz\":\"Terminer le quiz\",\"button_go_back\":\"Retour\",\"button_go_next\":\"Suivant\",\"button_try_again\":\"Relancer le quiz\",\"button_validate\":\"Valider\"}},\"splashscreen\":{\"error_loading\":\"Une erreur est survenue\",\"button_reload\":\"Réessayer\",\"accessibility\":{\"button_reload\":\"Recharger la page\"},\"migration_error\":\"Mise à jour de l'application\",\"consent_error\":\"Vérification de vos consentements pour partager vos données avec Ecolyo\",\"profile_error\":\"Chargement de votre profil utilisateur\",\"profileType_error\":\"Chargement de votre profil de consommation.\",\"challenges_error\":\"Actualisation de votre progression dans les défis\",\"analysis_error\":\"Chargement de votre analyse mensuelle\",\"index_error\":\"Chargement des index\",\"prices_error\":\"Mise à jour des prix\",\"consos_error\":\"Connexion à vos données de consommation\",\"partners_error\":\"Récupération de l'état des services partenaires\",\"unknown_error\":\"Veuillez vérifier votre connexion internet\",\"network_error\":\"Erreur de réseau\",\"step\":{\"0\":\"Mise à jour de l'application\",\"1\":\"Vérification de vos consentements pour partager vos données avec Ecolyo\",\"2\":\"Chargement de votre profil\",\"3\":\"Actualisation de votre progression dans les défis\",\"4\":\"Mise à jour des prix\",\"5\":\"Connexion à vos données de consommation\"}},\"timestep\":{\"today\":\"Aujourd'hui\",\"year\":{\"period\":\"5 ans\",\"comparelabel\":\"Comparer à l'année précédente\"},\"month\":{\"period\":\"Année\",\"comparelabel\":\"Comparer à l'année précédente\",\"current\":\"année actuelle\",\"last\":\"année précédente\"},\"day\":{\"period\":\"Mois\",\"comparelabel\":\"Comparer au mois précédent\",\"current\":\"mois actuel\",\"last\":\"mois précédent\"},\"week\":{\"period\":\"Semaine\",\"comparelabel\":\"Comparer à la semaine précédente\",\"current\":\"semaine actuelle\",\"last\":\"semaine précédente\"},\"half_an_hour\":{\"period\":\"Jour\",\"comparelabel\":\"Comparer à la journée précédente\",\"gather_data_title\":\"La récupération de vos données demi-horaires prend environ 24h.\",\"current\":\"jour actuel\",\"last\":\"jour précédent\",\"gather_data_subtitle\":\"Votre connexion a bien été prise en compte mais un délai de 24h est en général nécessaire à l’obtention de vos données.\\nÀ demain !\",\"analysis_waiting_data\":\"Pour bénéficier d'une analyse approfondie de votre consommation électrique, il nous faut récupérer vos données de consommation horaires. La récupération de ces données prend environ 24h. A bientôt !\"},\"accessibility\":{\"button_zoom_in\":\"Sélectionner le pas de temps précédent\",\"button_zoom_out\":\"Sélectionner le pas de temps suivant\"}},\"unsubscribe\":{\"title\":\"Êtes-vous sûr de ne plus vouloir recevoir notre email mensuel ?\",\"content\":\"Dans ce cas, vous ne recevrez plus la notification de votre bilan ainsi que les conseils associés au mois en cours.\",\"button_text\":\"Oui, je me désabonne\",\"button_accessibility\":\"Bouton de désinscription\"},\"welcome_modal\":{\"title\":\"Félicitations\",\"perso\":\"Votre espace personnel a bien été créé.\",\"connect\":\"Vous pouvez maintenant connecter vos compteurs d’énergie à Ecolyo en toute sécurité.\",\"button_valid\":\"Ok\",\"accessibility\":{\"title\":\"Fenêtre de félicitations\",\"button_valid\":\"Valider\"}}}"); +module.exports = JSON.parse("{\"common\":{\"title_app\":\"Ecolyo\",\"title_consumption\":\"Conso\",\"title_challenge\":\"Défis\",\"title_quiz\":\"Quiz\",\"title_exploration\":\"Exploration\",\"title_action\":\"Action\",\"title_duel\":\"Duel final\",\"title_ecogesture\":\"Astuce\",\"title_ecogestures\":\"Astuces\",\"title_ecogestures_choice\":\"Sélection des astuces\",\"title_options\":\"Options\",\"title_analysis\":\"Analyse\",\"title_profiletype\":\"Ajuster mon profil\",\"title_legal_notice\":\"Mentions légales\",\"title_gcu\":\"Conditions générales d’utilisation\",\"title_accessibility\":\"Accessibilité : non conforme\",\"title_sge_connect\":\"Connexion à l'électricité\",\"accessibility\":{\"loading\":\"Chargement\"}},\"navigation\":{\"consumption\":\"Conso\",\"challenges\":\"Défis\",\"ecogestures\":\"Astuces\",\"options\":\"Options\",\"analysis\":\"Analyse\"},\"FLUID\":{\"ELECTRICITY\":{\"NAME\":\"Électricité\",\"LABEL\":\"Électricité\",\"LABEL_PREPOSITION\":\"d'électricité\",\"UNIT\":\"kWh\",\"ADD\":\"Ajouter l'électricité\",\"MEGAUNIT\":\"MWh\",\"provider\":\"Enedis\"},\"WATER\":{\"NAME\":\"Eau\",\"LABEL\":\"Eau\",\"LABEL_PREPOSITION\":\"d'eau\",\"ADD\":\"Ajouter l'eau\",\"UNIT\":\"L\",\"MEGAUNIT\":\"m³\",\"provider\":\"Eau Publique du Grand Lyon\"},\"GAS\":{\"NAME\":\"Gaz\",\"LABEL\":\"Gaz\",\"LABEL_PREPOSITION\":\"de gaz\",\"ADD\":\"Ajouter le gaz\",\"UNIT\":\"kWh\",\"MEGAUNIT\":\"MWh\",\"provider\":\"GRDF\"},\"MULTIFLUID\":{\"NAME\":\"Multi fluide\",\"LABEL\":\"Multi\",\"UNIT\":\"€\"}},\"action\":{\"duration\":\"Durée : %{smartCount} jours\",\"result\":\"Résultat\",\"finished\":\"Défi terminé !\",\"details\":\"Détail de l'astuce\",\"apply\":\"J'applique cette action\",\"other\":\"Je choisis une autre action\",\"resultText1\":\"Cela n'a pas été trop difficile ?\",\"resultText2\":\"Jetez un coup d'Å“il dans la page conso dans 1 à 3 jours, le temps que vos données arrivent, pour voir l'impact de votre action.\",\"resultText3\":\"Pas de baisse de significative ? Pas de panique, en maintenant cette pratique dans le temps, les économies d'énergies et d'eau seront davantage visibles.\",\"resultText4\":\"Dans tous les cas, bravo, vous remportez...\",\"ok\":\"Ok\"},\"action_modal\":{\"accept\":\"Je relève le défi\",\"refuse\":\"Je me défile\",\"accessibility\":{\"window_title\":\"Fenêtre de confirmation\",\"button_accept\":\"Accepter\",\"button_refuse\":\"Refuser\"}},\"analysis\":{\"viewTitle\":\"Analyse\",\"warning_title\":\"Analyse incomplète\",\"warning_text\":\"Ecolyo n'a pas encore reçu toutes les données %{fluidList} pour ce mois\",\"comparison\":\"Comparatif\",\"analysis_date\":\"Conso totale\",\"challenge\":\"Défis terminés en\",\"user_consumption\":\"Votre conso\",\"average_home\":\"Conso moyenne d'un profil similaire\",\"average_home_description\":\"Le comparatif ici présenté est calculé sur la base d'un profil similaire au vôtre. Il s'agit d'un calcul et non d'une comparaison avec les autres utilisateurs de l'application. Sont pris en compte l'ensemble des informations entrées dans votre profil : mode de chauffage, âge du logement et éventuels travaux de rénovation, etc. Ce modèle a été créé avec l'Agence Locale de l'Energie sur la base de chiffres issues du Schéma Directeur des Energies de la Métropole de Lyon et de Chiffres-clé publiés par l'ADEME (l'Agence de l'Environnement et de la Maîtrise de l'Energie).\",\"approximative_description\":\"Pour comparer votre consommation avec un foyer similaire ou avec une conso idéale, veuillez détailler votre profil\",\"no_data\":\"Pas de données\",\"accessibility\":{\"button_go_to_profil\":\"Détailler mon profil\"},\"max_day\":\"Jour où vous avez le plus consommé\",\"compare\":{\"title\":\"Comparateur\",\"month_tab\":\"Comparer au mois dernier\",\"year_tab\":\"Comparer à l'année dernière\"}},\"analysis_pie\":{\"total\":\"Conso totale\",\"month\":\"Au mois \",\"estimation\":\"Comment sont estimés<br>les prix ?\"},\"special_elec\":{\"title\":\"Spécial Électricité\",\"average\":\"Conso moyenne\",\"weektype\":\"un jour de \",\"week\":\"semaine\",\"weekend\":\"week-end\",\"min\":\"Conso minimum\",\"percentage\":\"Part dans la facture\",\"price\":\"Soit\",\"maxPower\":\"Puissance maximum atteinte\",\"showModal\":\"Plus d'infos\"},\"elec_info_modal\":{\"accessibility\":{\"window_title\":\"electricity-info-modal\",\"button_close\":\"close-modal\"},\"title1\":\"Qu’est-ce que la consommation minimum ?\",\"title2\":\"Qu’est-ce que la puissance maximum ?\",\"text1\":\"Elle correspond à votre plus petite consommation du mois sur un créneau d'une demi-heure.\",\"text2\":\"Nous extrapolons cette consommation sur 1 mois afin vous donner un aperçu de la consommation de vos consommations électriques en veille (box, télé, chargeurs, ...) ou encore de celle, incompressible, de vos appareils de froid (frigo, congélateur).\",\"text3\":\"C’est la puissance maximum délivrée par tous les appareils fonctionnant au même moment dans votre logement.\",\"text4\":\"Vous avez choisi une puissance maximum dans votre offre d’électricité (3, 6 ou 9 kVA...) que vous ne devez pas dépasser pour ne pas faire sauter votre compteur. \",\"text5\":\"Cette puissance varie d'un mois à l'autre, regardez cette valeur sur l'ensemble de l'année pour vérifier si votre puissance souscrite correspond bien à votre usage.\"},\"auth\":{\"enedissgegrandlyon\":{\"title\":\"Ecolyo doit se connecter à l’électricité\",\"bill\":\"Munissez-vous d’une <span>facture d’électricité</span> pour valider la connexion\",\"connect\":\"Je me connecte à l'électricité\",\"accessibility\":{\"connect\":\"Se connecter\"},\"identityTitle\":\"Nom inscrit sur la facture\",\"firstName\":\"Prénom\",\"lastName\":\"Nom\",\"pdlTitle\":\"Numéro de votre compteur électrique (PDL)\",\"pdlLabel\":\"N° (14 chiffres)\",\"pdlHint\":\"Où trouver le n° de PDL ?\",\"pdlModal\":{\"txt1\":\"Où trouver le n° de PDL ou PRM ?\",\"txt2\":\"Le numéro de PDL ou PRM se compose de 14 chiffres.\",\"txt3\":\"Votre numéro de PDL ou PRM se trouve sur votre facture d’électricité.\",\"txt4\":\"Si vous avez un compteur Linky, appuyez sur le bouton “+†et faites défiler l’affichage jusqu’à obtenir l’affichage suivant :\"},\"addressTitle\":\"Adresse du titulaire\",\"address\":\"Numéro et voie\",\"zipCode\":\"Code postal\",\"city\":\"Ville\",\"headConsent\":\"Vous allez partager vos données à la Métropole de Lyon. Elles seront directement transférées à Ecolyo à l'intérieur de votre cloud personnel, sans que la Métropole n'y accède ni ne les visualise.\",\"textConsent\":\"Afin de vous offrir des fonctionnalités de visualisation et d'analyse, Ecolyo a besoin des données suivantes : \",\"consentLi1\":\"L'historique et le relevé de vos consommations quotidiennes en kWh\",\"consentLi2\":\"L'historique et le relevé de vos consommations au pas de temps 30 minutes\",\"consentLi3\":\"Les puissances maximales atteintes quotidiennement\",\"consentLi4\":\"Les données contractuelles (début de contrat et puissance souscrite)\",\"consentCheck1\":\"Je consens à partager les données personnelles ci-dessus pour une durée d'<span>un an</span>\",\"consentCheck2\":\"J’atteste être le titulaire du point de livraison (PDL) renseigné à l’étape précédente\",\"modalHint\":{\"accessibility\":\"Titre de la modale\",\"title\":\"Où trouver le n° de PDL ?\",\"button\":\"J'ai compris\",\"button-accessibility\":\"Bouton valider\"}},\"grdfgrandlyon\":{\"bill\":\"Munissez-vous d’une <span>facture de gaz</span> pour valider la connexion\",\"connect\":\"Je me connecte au gaz\",\"accessibility\":{\"connect\":\"Se connecter\"},\"connect_form\":{\"label\":\"Je donne mon accord via mon compte GRDF\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter au gaz\"},\"with_account\":{\"title\":\"Votre compte GRDF a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter votre compteur de gaz et Ecolyo !\"},\"step1\":{\"info1\":\"Un <span>compte chez GRDF</span> est nécessaire pour vous connecter au gaz <span>quelque soit votre fournisseur de gaz</span>.\",\"info2\":\"<p>GRDF est le gestionnaire de réseau. C'est lui qui est responsable de votre compteur Gazpar et de la collecte des données de consommation.</p>\",\"info3\":\"Possédez-vous un <span>compte GRDF</span> ?\"},\"step2\":{\"info1\":\"Une fois votre compte créé, <span>n'oubliez pas de revenir sur Ecolyo</span> pour finaliser la connexion.\"},\"step3\":{\"info1\":\"La visualisation de vos données sur Ecolyo demande l'activation du <span>partage de toutes les données.</span>\",\"info2\":\"Pour une expérience optimale, <span>une période de consentement de 1 an</span> est recommandée à partir d’aujourd’hui.\",\"info3\":\"<p>Veillez également à indiquer une date antérieure pour l'historique (1er calendrier) afin de pouvoir récupérer jusqu'à 3 ans d'historique.</p>\"},\"button_go_to_partner_site\":\"Aller sur GRDF\"},\"eglgrandlyon\":{\"bill\":\"Munissez-vous d’une <span>facture d'eau</span> pour valider la connexion\",\"connect\":\"Je me connecte à l'eau\",\"accessibility\":{\"connect\":\"Se connecter\"},\"connect_form\":{\"login\":\"Identifiant (7 chiffres)\",\"password\":\"Mot de passe\",\"label\":\"Je connecte Ecolyo à mon compte Eau Publique du Grand Lyon\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter à l'eau\"},\"with_account\":{\"title\":\"Votre compte Eau Publique du Grand Lyon a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter votre compteur d'eau et Ecolyo !\"},\"step1\":{\"info1\":\"La connexion se fait via <span>votre compte Eau Publique du Grand Lyon</span>.\",\"info2\":\"Possédez-vous un <span>compte Eau Publique du Grand Lyon</span> ?\"},\"step2\":{\"info1\":\"Une fois votre compte créé, <span>n'oubliez pas de revenir sur Ecolyo</span> pour finaliser la connexion.\"},\"button_go_to_partner_site\":\"Aller sur EPGL\"},\"connect_oauth\":{\"loading\":\"Chargement...\"},\"accessibility\":{\"button_reveal_password\":\"Afficher le mot de passe\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"window_title\":\"Fenêtre d'information sur la création de compte.\",\"button_close\":\"Fermer la fenêtre.\"},\"button_previous\":\"Précédent\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"button_has_account\":\"J'ai déjà un compte\",\"button_validate\":\"J'ai compris\",\"button_showOfflineData\":\"Voir mes anciennes données\",\"warningOfflineData\":\"Attention, vous visualisez d’anciennes données. Pour actualiser vos données, connectez votre compteur\"},\"challenge\":{\"card\":{\"ongoing\":{\"quiz\":\"Quiz\",\"exploration\":\"Explorations\",\"action\":\"Actions\",\"duel\":\"Duel Final\",\"result\":\"Résultat\",\"duelDone\":\"du duel final\"},\"locked\":{\"desc\":\"À débloquer en terminant le défi précédent\"}},\"card_done\":{\"saving\":\"Économie de\",\"depense\":\"Dépense de\",\"win\":\"Gagné\",\"lost\":\"Perdu\",\"final_defi\":\"sur le duel final\",\"final_defi_view\":\"Revoir le duel final\",\"reset_defi\":\"Relancer le défi\"},\"card_last\":{\"title\":\"Tous les défis sont terminés\",\"message1\":\"Nous travaillons actuellement à vous proposer de nouveaux défis.\",\"button\":\"Suggérer une idée de défi\"},\"card_unlocked\":{\"button_launch\":\"Lancer le défi\"},\"accessibility\":{\"button_launch\":\"Lancer le défi\",\"button_goto_konnector\":\"Aller aux connecteurs\",\"button_slider_previous\":\"Précédent\",\"button_slider_next\":\"Suivant\"}},\"challenge_no_fluid_modal\":{\"title\":\"Oups !\",\"content\":\"Connectez au moins 1 fluide pour pouvoir jouer\",\"button_validate\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Valider\"}},\"consumption\":{\"display_last_data\":\"Voir mes dernières consos\",\"accessibility\":{\"button_previous_period\":\"Afficher la période précédente\",\"button_next_period\":\"Afficher la période suivante\",\"button_previous_value\":\"Sélectionner la valeur précédente\",\"button_next_value\":\"Sélectionner la valeur suivante\",\"checkbox_compare\":\"Afficher ou cacher la comparaison\"},\"partner_issue_modal\":{\"title\":\"Attention !\",\"error_connect_gaz\":\"La connexion à vos données de <span class='gaz'>gaz</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='gaz'>GRDF</span> ou dans notre service)\",\"error_connect_elec\":\"La connexion à vos données d'<span class='elec'>électricité</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='elec'>Enedis</span> ou dans notre service)\",\"error_connect_water\":\"La connexion à vos données d'<span class='water'>eau</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='water'>Eau Publique du Grand Lyon</span> ou dans notre service)\",\"additional_text\":\"La visualisation et/ou la connexion à vos données de consommation peut s'en trouver affectée.<br /><br /><i>Merci pour votre patience en attendant un retour à la normale :)</i>\",\"ok\":\"Ok\"},\"compared\":\"Comparé\"},\"consumption_details\":{\"detail\":\"Détail par fluide\",\"connect\":\"Connecter d'autres fluides\",\"mini_cards_label\":\"AUTRES ENERGIES\"},\"consumption_visualizer\":{\"missing_data\":\"Données manquantes\",\"no_data\":\"Pas de données\",\"why_no_data\":\"Pourquoi n'ai-je pas de données ?\",\"last_valid_data\":\"Dernières données valides : %{date}\",\"last_available_data\":\"Dernières données disponibles : %{date}\",\"last_valid_data_multi\":\"Dernières données complètes : %{date}\",\"data_to_come\":\"à venir\",\"aie\":\"Aïe !\",\"data_empty\":\"Vide\",\"estimated\":\"estimés\",\"dataModal\":{\"list_title\":\"3 raisons possibles :\",\"item1\":\"le lien entre Ecolyo et le fournisseur de données est rompu : une mise à jour de ce lien (en bas de la page) peut résoudre ce problème.\",\"item2\":\"un problème technique chez votre gestionnaire : se connecter directement chez ce gestionnaire pour vérifier que cette donnée apparaît.\",\"item3\":\"pour le gaz : vous n'avez pas autorisé Ecolyo à accéder aux données de consommation de cette période.\",\"item4\":\"vous n'aviez tout simplement pas de compteur communicant à l'époque !\"},\"modal\":{\"window_title\":\"info estimation des prix\",\"title\":\"Comment sont estimés les prix ?\",\"close\":\"Fermer la fenêtre\",\"part1\":\"Le prix de votre électricité ou de votre gaz dépend de l'offre choisie auprès de votre fournisseur. N’ayant pas accès à cette information, Ecolyo affiche un prix moyen par fluide. \",\"part2\":\"Tarifs moyens retenus :\",\"list1\":\" : 1 kWh = %{elecPrice} €TTC (il correspond au tarif réglementé d’EDF au %{elecPriceStartDate} pour une puissance souscrite de 3 ou 6 kVA et hors offre heure pleine/heure creuse)\",\"list2\":\" : 1 kWh = %{gasPrice} €TTC (tarif réglementé de vente au %{gasPriceStartDate} pour un consommateur soutirant moins de 6 MWh par an)\",\"list3\":\" : 1 litre d’eau = %{waterPrice} € TTC (prix constaté au %{waterPriceStartDate} pour un abonnement et une consommation de 120 m3/an sur la Métropole de Lyon)\",\"part3\":\"Le coût de votre abonnement n'est pas pris en compte dans Ecolyo.\"},\"release_notes_modal\":{\"title\":\"Du nouveau sur Ecolyo !\",\"message\":\"Les mises à jour suivantes ont été effectuées sur votre application :\",\"go_back\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre de notifications\",\"button_go_back\":\"J'ai compris\"}}},\"ecogestures\":{\"loading\":\"Chargement des astuces\"},\"duel\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"average_info\":\"%{average} euros étant votre moyenne actuelle, relevez-vous le défi ?\",\"button_start\":\"Allons-y !\",\"goal1\":\"Faites moins que votre moyenne actuelle sur %{durationInDays} jours\",\"goal2\":\"pour gagner le badge %{title}\",\"goal_done\":\"Duel remporté\",\"goal_failed\":\"Duel perdu\",\"caption_average\":\"Votre moyenne à titre indicatif\",\"caption_consumption\":\"Votre consommation\",\"caption_incoming\":\"Données à venir\",\"accessibility\":{\"button_go_back\":\"Retour\",\"button_start_duel\":\"Lancer le duel\",\"button_start_quiz\":\"Lancer le quiz\"}},\"duel_result_modal\":{\"success\":{\"title\":\"Félicitations\",\"message1\":\"Vous avez économisé %{value} €\",\"message2\":\"et gagné le badge %{title} !\",\"button_validate\":\"Youpi\"},\"lost\":{\"title\":\"Presque\",\"message1\":\"Vous avez dépassé de %{value} €\",\"message2\":\"et manqué le badge %{title}\",\"button_validate\":\"Zut alors\"},\"accessibility\":{\"window_title\":\"Fenêtre de résultat\",\"button_validate\":\"Valider\"}},\"last_duel_modal\":{\"title\":\"Félicitations !\",\"subtitle\":\"Vous avez terminé tous les défis !\",\"message1\":\"Nous travaillons actuellement à vous proposer de nouveaux défis.\",\"message2\":\"Vous pouvez donner votre avis sur ce que vous aimeriez en cliquant sur la bulle d'aide.\"},\"duel_empty_value_modal\":{\"title\":\"Oups !\",\"message\":\"Impossible de lancer le duel. Il nous manque en effet certaines de vos données de consommation pour vous proposer un duel à votre hauteur.\",\"button\":\"Je retourne au menu des défis\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Retourner au menu des défis\"}},\"ecogesture\":{\"title_tab_0\":\"Objectifs\",\"title_tab_1\":\"Je fais déjà \",\"title_tab_2\":\"Toutes\",\"MENU_TITLE\":\"Filtrer\",\"ALL\":\"Tous les usages\",\"HEATING\":\"Chauffage\",\"AIR_CONDITIONING\":\"Climatisation\",\"ECS\":\"Eau chaude\",\"COLD_WATER\":\"Eau froide\",\"ELECTRICITY_SPECIFIC\":\"Électricité courante\",\"COOKING\":\"Cuisson\",\"selection\":\"Sélectionner les astuces les plus adaptées à votre consommation\",\"selection_2\":\"vues sur\",\"button_selection\":\"Continuer ma sélection\",\"no_ecogesture\":\"Aucune astuce ne correspond à votre filtrage\",\"no_ecogesture_filter\":{\"text1\":\"Nous n'avons pas trouvé d'astuces adaptées à votre profil dans cette catégorie.\",\"text2\":\"En effet, de par votre profil et vos modes de chauffage, d'eau ou d'eau chaude sanitaire, nous n'avons pas identifié d’astuces vous permettant de diminuer vos factures à titre individuel. Toutefois, vous pouvez toujours agir pour préserver les ressources en appliquant et diffusant autour de vous les autres bonnes pratiques présentées dans la partie \\\"Toutes les astuces\\\".\"},\"adjust_profil\":{\"description\":\"Pour une sélection d’astuces adaptée à votre consommation, vous pouvez ajuster votre profil.\",\"button_go_to_profil\":\"Ajuster mon profil\"},\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenêtre\",\"button_selection\":\"Aller à la page de sélection\"},\"doing\":\"Je fais déjà \",\"objective\":\"Objectif\",\"emptyList\":{\"obj1\":\"Les astuces présentées sont des actions qui vous permettent de réduire vos consommations et donc vos factures. On parle parfois d’écogestes.\",\"obj1_done\":\"Aucune astuce n’a été sélectionnée comme objectif actuellement.\",\"obj2\":\"Vous pouvez sélectionner ceux à mettre en objectifs et ceux que vous appliquez déjà .\",\"obj2_done\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous souhaitez garder en objectif dans cette section.\",\"doing1\":\"Aucune astuce n’a été sélectionnée dans la catégorie appliquée actuellement.\",\"doing1_done\":\"Aucune astuce n’est indiquée comme déjà appliquée actuellement.\",\"doing2\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous mettez déjà en pratique dans cette section.\",\"doing2_done\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous mettez déjà en pratique dans cette section.\",\"btn1\":\"Voir toutes les astuces\",\"btn2\":\"Sélectionner\"},\"initModal\":{\"title\":\"Sélectionner mes astuces\",\"text1\":\"Les astuces présentées sont des actions qui vous permettent de réduire vos consommations et donc vos factures. On parle parfois d’écogestes \",\"text2\":\"Vous pouvez sélectionner celles à mettre en objectifs et celles que vous appliquez déjà .\",\"text3\":\"Afin de pré-sélectionner les astuces correspondant à votre consommation, merci de répondre à quelques rapides questions.\",\"btn1\":\"Plus tard\",\"btn2\":\"C'est parti !\"},\"reinit\":\"Réinitialiser ma sélection\",\"reinitModal\":{\"title_part1\":\"Cette action\",\"title_part2\":\"supprimera votre liste d’astuces\",\"title_part3\":\"sélectionnées dans\",\"title_part4\":\"“Objectifsâ€\",\"title_part5\":\"et\",\"title_part6\":\"“Je fais déjà â€\",\"text1\":\"Vous pourrez ensuite faire une nouvelle sélection adaptée à votre consommation.\",\"text2\":\"Souhaitez-vous réinitialiser votre sélection d’astuces ?\",\"btn1\":\"Non\",\"btn2\":\"Réinitialiser\"}},\"ecogesture_modal\":{\"title_ecogesture\":\"Astuce\",\"title_action\":\"Action\",\"efficiency\":\"Efficacité\",\"show_less\":\"Voir moins d’infos\",\"show_more\":\"Voir plus d’infos\",\"select_action\":\"Je choisis cette action\",\"accessibility\":{\"window_title_ecogesture\":\"Fenêtre astuce\",\"window_title_action\":\"Fenêtre action\",\"button_close\":\"Fermer la fenêtre\",\"button_select_action\":\"Sélectionner cette action\",\"button_see_more_detail\":\"Afficher plus de détails\"}},\"ecogesture_info_modal\":{\"header\":\"Comment sont choisis les astuces adaptées à mon profil ?\",\"text\":\"Les astuces adaptés à votre profil sont aujourd’hui choisies en fonction des compteurs individuels que vous possédez (communicants ou non). Ceux présentés ici vous permettent d'agir sur vos consommations individuelles. Des modes de tri plus personnalisables seront proposés à l'avenir.\",\"button_close\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre d'information\",\"button_close\":\"Fermer la fenêtre\"}},\"ecogesture_form\":{\"heating_type\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"5\":\"Autre\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\",\"5_text\":\"Produit grâce à un autre moyen\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"}},\"ecogesture_profile\":{\"equipments\":{\"question\":\"Quels équipements possédez-vous ?\",\"hint\":\"Plusieurs réponses possibles\",\"air_conditioning\":\"Climatisation\",\"computer\":\"Ordinateur\",\"microwave\":\"Micro-ondes\",\"oven\":\"Four\",\"washing_machine\":\"Lave-linge\",\"dishwasher\":\"Lave-vaisselle\",\"cooking_plates\":\"Plaques électriques\",\"garden\":\"Jardin\",\"dryer\":\"Sèche-linge\",\"refregirator\":\"Réfrigérateur\",\"fan\":\"Ventilateur\",\"water_heater\":\"Chauffe-eau\",\"curtain\":\"Rideaux\",\"internet_box\":\"Box internet\",\"ventilation\":\"VMC\",\"freezer\":\"Congélateur\",\"boiler\":\"Chaudière\",\"hydraulic_heating\":\"Chauffage hydraulique\"}},\"ecogesture_selection\":{\"header\":\"Sélection des astuces\",\"title\":\"Vous avez parcouru un groupe de %{smartCount} astuces\",\"text\":\"Voulez-vous continuer sur votre lancée ou remettre cette sélection à plus tard ?\",\"title_final\":\"Félicitations !\",\"text_final_1\":\"Vous avez terminé la sélection des astuces adaptées à votre consommation.\",\"text_final_2\":\"Vous pouvez les retrouver dans les sections “Objectifs†et “Je fais déjà †selon que vous les pratiquiez déjà ou non.\",\"button_go_to_ecogesture\":\"Plus tard\",\"button_ok\":\"J'ai compris\",\"button_continue\":\"Poursuivre\",\"button_objective\":\"Objectif\",\"button_doing\":\"Je fais déjà \",\"button_skip\":\"Pas intéressé\",\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenêtre\",\"button_go_to_ecogesture\":\"Retourner aux astuces\",\"button_continue\":\"Poursuivre\",\"button_ok\":\"Fermer la sélection\"},\"selectionModal\":{\"title\":\"Des astuces correspondant à votre profil ont été trouvées !\",\"text\":\"À vous de choisir celles que vous souhaitez mettre en objectif et celles que vous faites déjà .\",\"button_close\":\"C'est parti !\"}},\"exploration\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"button_already_done\":\"C’est déjà fait !\",\"button_come_back\":\"Je reviens quand cela sera fait\",\"button_start\":\"C'est parti !\",\"watch_consumption\":\"Je fonce\",\"congratulation\":\"Bravo !\",\"earn\":\"Vous remportez\",\"button_confirm\":\"Ok\",\"interval\":{\"explanation\":\"Vous pouvez vérifier cette informations sur l'écran Conso.\"},\"accessibility\":{\"button_already_done\":\"Marquer l'exploration comme déjà réalisée\",\"button_confirm\":\"Valider\",\"button_come_back\":\"Fermer l'exploration\",\"button_go_back\":\"Retour\",\"button_start\":\"Lancer l'exploration\"}},\"error_page\":{\"main\":\"Erreur\",\"back\":\"Retour\",\"no_ecogesture\":\"Oups ! Nous n'avons pas trouvé l'astuce demandée.\"},\"help\":{\"title_help\":\"une question ? un problème ? une suggestion ?\",\"read_help\":\"Nous écrire via le Service d'Assistance Utilisateur\"},\"feedback\":{\"title\":\"Vous allez contacter le Service Assistance Utilisateur du Grand Lyon.\",\"text1\":\"Vous pourrez nous remonter un problème, chercher de l'aide pour vous connecter plus facilement, ou encore nous partager une bonne idée d'évolution.\",\"text2\":\"N'hésitez pas à nous écrire ! L'équipe Ecolyo vous répondra avec plaisir :)\",\"later\":\"Plus tard\",\"lets_go\":\"J'y vais\",\"accessibility\":{\"window_title\":\"Fenêtre de partage de retours\",\"button_close\":\"Fermer la fenêtre de partage de retours\"}},\"dataShare\":{\"title1\":\"Bienvenue !\",\"title1Update\":\"Ecolyo évolue !\",\"title2Update\":\"Pour continuer à utiliser Ecolyo, merci d’accepter les modalités de traitement des données ci-dessous.\",\"part1\":\"Pour le bon fonctionnement du service, nous avons besoin de l’adresse email utilisée lors la création de votre cloud personnel Grand Lyon.\",\"part2\":\"Cette donnée de compte est conservée dans Ecolyo le temps de l’utilisation de ce service.\",\"part3\":\"La Métropole de Lyon utilisera cet email afin de vous tenir informé·e :\",\"item1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter.\",\"item2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"item3\":\"De l’évolution de vos consommations, des nouveautés et de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part4\":\"Vos données privées de consommation d’énergie et d’eau sont récupérées, sauvegardées et stockées dans votre cloud personnel à votre initiative sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part5\":\"Il en est de même pour les données privées de composition du logement et du foyer, fournies par vos soins. Elles restent également sans visibilité de la Métropole de Lyon sur leur contenu.\\nLes données d’identification entrées lors de la connexion aux données de consommations d’électricité sont quant à elles conservées dans un espace sécurisé de la Métropole de Lyon et sont utilisées uniquement à des fins de contrôle du consentement par des organismes extérieurs.\",\"part6\":\"Dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées et pseudonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation, d’évaluer globalement l’usage de l’application via des mesures d’audience ainsi que d’évaluer à terme l’impact global en termes de baisse des consommations énergétiques de notre service.\",\"part7\":\"Au sein de votre cloud personnel, vous pouvez à tout moment exercer vos droits d’accès, de rectification, de portabilité, de limitation et d’opposition en consultant notamment la page Options.\",\"part8\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part9\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 \",\"part10\":\"ou en ligne, au moyen du formulaire disponible à l'adresse suivante : \",\"link1\":\"<a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/</a>\",\"validDataConsent\":\"Je consens au traitement de mes données tel que décrit ci-dessus.\",\"validCGU\":\"Je valide les <span class=\\\"action\\\">Conditions Générales d’Utilisation</span> \",\"validLegal\":\" du service et ai pris connaissance des <span class=\\\"action\\\"> Mentions Légales </span> de celui-ci.\",\"button_accept\":\"C'est parti !\",\"accessibility\":{\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"minorUpdate\":{\"title\":\"Ecolyo évolue !\",\"button\":\"J'ai compris\"},\"gcu\":{\"title\":\"Conditions générales d’utilisation du service\",\"version\":\"Version du 12.12.2022\",\"content\":{\"title1\":\"Ecolyo, késako ?\",\"part1_1\":\"Ecolyo est un service proposé par la Métropole de Lyon vous permettant de suivre au même endroit vos consommations d’électricité, de gaz et d’eau, en kWh, en litres, en euros et à différentes échelles de temps. Ce service vous permet également de participer à des défis individuels et vous offre une analyse de vos consommations. Des astuces vous sont aussi proposées afin de vous permettre de réduire vos consommations.\",\"part1_2\":\"C’est un service gratuit qui prend la forme d’un site web dit « responsive », c’est-à -dire qu’il peut être consulté sur ordinateur ou sur mobile. Sur mobile, c’est une application que l’on a souhaitée ergonomique, réactive et esthétique pour votre plaisir de navigation et d’utilisation au quotidien.\",\"part1_3\":\"Tous les termes « techniques » sont définis en bas de page.\",\"title2\":\"Quelles fonctionnalités le service propose-t-il ?\",\"part2_1\":\"La fonctionnalité principale d’Ecolyo est la visualisation, au même endroit, de vos consommations d’électricité, de gaz et d’eau et ce, à différents pas de temps (de la demi-heure – uniquement pour l’électricité, à plusieurs années, en passant par les pas de temps journaliers et mensuels). La visualisation des consommations se fait en kWh pour l’énergie et en L pour l’eau ainsi qu’en euros (euros résultant d’un prix moyenné).\",\"part2_2\":\"Au-delà de la visualisation de vos consommations et parce que nous souhaitons vous aider à diminuer ces consommations vous retrouverez plusieurs autres pages : \",\"part2_2_list1\":\"Défis : Des quiz, et actions à mettre en place vous seront proposés pour vous pousser à réduire vos consommations.\",\"part2_2_list2\":\"Astuces : Une liste d’astuces pour maîtriser ses consommations d’énergie et d’eau à trier par usage, et avec une possibilité de les adapter plus précisément à votre profil.\",\"part2_2_list3\":\"Analyse : Une analyse de vos consommations réelles en comparaison à celle d’un foyer étant proche d’une vôtre.\",\"part2_3\":\"Pour la page Analyse ainsi que pour la partie personnalisation des astuces, des éléments supplémentaires sur votre profil vous seront demandés. L’ensemble de ces informations récoltées à l’aide du formulaire peuvent être modifiées par la suite.\",\"part2_4\":\"Dernière page : la page Options dans laquelle vous pourrez vous abonner à un service d’alerte sur vos consommations d’eau, de quoi ajuster votre profil ou encore vous désabonner de la lettre mensuelle.\",\"title3\":\"Comment ai-je accès à mes données d’électricité, de gaz et d’eau ?\",\"part3_1\":\"Pour visualiser vos consommations réelles et profiter pleinement du potentiel de notre service, il vous faut au minimum un des trois compteurs communicants suivants : Linky (pour l’électricité), Gazpar (pour le gaz), Téléo (pour l’eau).\",\"part3_2\":\"Ces compteurs sont opérés par les gestionnaires de réseaux. Pour Linky, c’est Enedis, le gestionnaire de réseau de distribution d’électricité. Pour Gazpar, GRDF est responsable de cette gestion. Et pour Téléo, c’est Eau Publique du Grand Lyon.\",\"part3_3\":\"Ces acteurs sont responsables de la relève de vos données. Ces données servent notamment à votre fournisseur d’électricité, de gaz ou d’eau pour permettre la facturation de vos consommations d’énergie. Des fournisseurs d’électricité ou de gaz il y en a des dizaines. Les gestionnaires de réseaux (… et de votre compteur) ne sont qu’au nombre de trois. Nous avons donc décidé de travailler avec eux, au plus près de la donnée brute issue de vos compteurs.\",\"part3_4\":\"Il vous faudra donc avoir un compte chez GRDF et Eau Publique du Grand Lyon pour accéder à vos données. Si vous n’en avez pas, il suffira de vous en créer un. Ceci ne sera à faire qu’une fois, au début.\",\"title4\":\"Ecolyo se trouve dans un cloud personnel Grand Lyon, qu’est-ce que cela signifie ?\",\"part4_1\":\"Comme vous avez dû le remarquer, lors de votre première connexion à Ecolyo vous avez dû vous créer un compte Cloud Personnel Grand Lyon. Ce cloud personnel est un espace sécurisé porté par l’ambition de vous apporter visibilité, transparence et maîtrise sur l’usage de vos données personnelles, et dont les fonctionnalités vous permettant de récupérer, synchroniser, stocker et partager vos données avec les destinataires de votre choix. Le service Ecolyo se déploie à l’intérieur de cet espace protégé. Dans ce cloud personnel, vous pourrez accéder également à d’autres services. Toutes les données traitées par Ecolyo, mais aussi les autres services que vous seriez amenés à utiliser dans ce cloud personnel restent dans ce Cloud Personnel Grand Lyon et n’en sortent pas, sauf si vous décidez vous-même de partager vos données avec des tiers.\",\"part4_2\":\"Pour en savoir plus sur ce cloud et son utilisation, ainsi que la durée de conservation de vos données, vous pouvez lire les conditions générales d’utilisation du service <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">ici</a>.\",\"title5\":\"Et donc concrètement pour Ecolyo, quelles données sont collectées et qui y a accès ?\",\"part5_1\":\"Pour qu’Ecolyo ait accès à vos données de consommations, vous devrez activer vos différents connecteurs. À ce moment-là , pour la connexion aux données de gaz et d’eau à travers un parcours qui vous conduira de manière intuitive sur le site de chacun des gestionnaires de réseaux concerné, vous pourrez donner votre consentement à partager ces données avec le Service Ecolyo, et ce pour une durée limitée dans le temps. Pour l’électricité, le don du consentement et la connexion aux données se fait directement dans notre service. Quid de la durée de ce consentement ? Pour les données électriques, elle est par défaut d'un an. Pour les données gaz, cela sera à vous de la définir (nous vous recommandons 1 an pour une expérience optimale). Les données utilisées pour vérifier la bonne connexion de vos données d’électricité sont stockées du côté de la Métropole de Lyon sur des serveurs sécurisés.\",\"part5_2\":\"Vos connecteurs, une fois configurés, permettent le transfert de vos données de consommations au service Ecolyo. Le transfert de ces données de consommation se fait sans que personne n’accède à leur contenu, pas même la Métropole de Lyon. En effet, ces données sont stockées et traitées directement dans votre cloud personnel qui en assure la protection. Tous les calculs, analyses et traitements sur ces données sont faites DANS votre espace personnel sans visibilité sur le contenu des données par la Métropole de Lyon.\",\"part5_3\":\"Vous pouvez bien sûr mettre fin à la récupération/ au transfert de vos données de consommation sur votre espace cloud personnel à tout moment et à plusieurs niveaux : \",\"part5_3_list1\":\"Vous pouvez supprimer le transfert quotidien de vos données en supprimant tout simplement le connecteur dans la page Consos (en bas).\",\"part5_3_list2\":\"Pour supprimer l’ensemble de vos données ainsi que votre espace personnel Grand Lyon, vous devez demander la suppression de votre cloud. Pour faire cela, rendez-vous dans les paramètres de votre cloud personnel via la barre blanche en haut d’Ecolyo et appuyez sur le bouton « Supprimer mon compte » dans la partie paramètres.\",\"part5_4\":\"Des données sur le profil de votre foyer peuvent être également remplies au sein de l’application. Ces données s’enrichiront au fur et à mesure de votre utilisation du service avec d’autres informations : défis réalisés, étoiles gagnées, etc. L’ensemble de ces données restent à l’intérieur de votre cloud personnel, sans que personne n’y ait accès.\",\"part5_5\":\"Enfin, afin de permettre une mise à jour quotidienne de vos données de consommations, vos identifiants Eau Publique du Grand Lyon, un jeton d’identification GRDF ainsi que vos numéros de compteurs sont stockés.\",\"title6\":\"Personne n’a donc accès à mes données, pas même la Métropole de Lyon, vraiment ?\",\"part6_1\":\"Conformément aux indications du paragraphe précédent, la Métropole de Lyon n’accède ni à vos données de consommations ni aux données utilisées via certaines fonctionnalités du service comme le formulaire (celui-là même qui permet l’analyse de vos consommations personnalisée ainsi qu’une sélection d’éco-gestes personnalisés). Toutes ces informations sont bien gardées au chaud dans votre cloud personnel Grand Lyon.\",\"part6_2\":\"Seul vous pouvez accepter de partager vos données, documents ou fichiers privés avec la Métropole de Lyon, ses partenaires ou d’autres utilisateurs ou acteurs (publics ou privés) après recueil de votre consentement éclairé et par une action expresse de votre part.\",\"part6_3\":\"La Métropole de Lyon n'a cependant accès qu’à l’adresse email utilisée lors la création de votre cloud personnel Grand Lyon. Elle utilise cet email afin de vous tenir informé·e :\",\"part6_3_list1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter. \",\"part6_3_list2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"part6_3_list3\":\"De l’évolution de vos consommations, des nouveautés et de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part6_4\":\"Elle stocke également les informations transmises lors de la connexion à l’électricité (nom, adresse postale). Ces informations doivent être stockées car la Métropole de Lyon est régulièrement contrôlée par Enedis et doit prouver détenir le consentement des personnes pour lesquelles elle va chercher la donnée.\",\"part6_5\":\"Par ailleurs, et dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service. Parmi ces statistiques, des mesures d’audience de la fréquentation des différentes pages du service sont réalisées. Vous pouvez, via la page Options, à tout instant, décider de vous opposer à la récupération de ces données d’utilisation.\",\"title8\":\"Encore des questions ?\",\"part8_1\":\"N’hésitez pas à consulter la FAQ ou à nous contacter via le formulaire de contact présente sur l’ensemble des pages.\",\"part8_2\":\"Dernière option, contactez-nous directement à <a href=\\\"mailto:ecolyo@grandlyon.com\\\">ecolyo(at)grandlyon.com</a>.\",\"title9\":\"LEXIQUE\",\"part9_1_title\":\"Cloud personnel Grand Lyon : \",\"part9_1_content\":\"Cloud personnel : appelé aussi le « domicile numérique », le cloud personnel est souvent réduit à un simple espace de stockage de documents mais il est bien plus que ça. C'est un espace individuel et sécurisé où vous pouvez accéder à des services sans exposer aucune donnée à l’extérieur. Vous seul pouvez y accéder, personne d'autre.\",\"part9_2_title\":\"Connecteur : \",\"part9_2_content\":\"Un connecteur est un service, installé dans votre cloud personnel également, qui a pour but uniquement d’aller récupérer les données auprès de différents partenaires/sources de données. Dans le cadre d’Ecolyo, trois connecteurs sont pré-installés dans votre cloud personnel : celui d’Enedis, celui de GRDF et celui d’Eau Publique du Grand Lyon.\",\"part9_3_title\":\"Compteur communicant : \",\"part9_3_content\":\"Un compteur communicant est un compteur qui mesure de manière précise et détaillée vos consommations et peut transmettre ces données au gestionnaire de réseau via une technologie radio (c'est le cas pour Gazpar et Téléo par exemple) ou via les réseaux électriques (via Courant Porteur en ligne, c'est le cas pour Linky par exemple).\",\"part9_4_title\":\"Fournisseur : \",\"part9_4_content\":\"Votre fournisseur d’électricité, de gaz ou d’eau est l’entreprise qui vous facture votre électricité, gaz ou eau. Côté électricité il en existe <a href=\\\"https://www.enedis.fr/liste-des-fournisseurs-delectricite\\\">aujourd’hui plus de 50</a>, chacun proposant des tarifs différents.\",\"part9_5_title\":\"Gestionnaire de réseau de distribution : \",\"part9_5_content\":\"Appelé aussi parfois distributeur, il est en charge de la livraison de votre électricité, gaz ou eau jusqu’à votre domicile. Il est aussi en charge du compteur qui relève vos consommations. Il transmet vos données de consommations à votre fournisseur afin qu’il effectue la facturation de vos consommations d’énergie. Il peut également les transmettre à tout acteur avec qui vous avez décidé de partager ces données.\"}},\"gcu_modal\":{\"button_accept\":\"J'accepte\",\"accessibility\":{\"window_title\":\"Conditions générales d’utilisation\",\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"matomo\":{\"matomo_title\":\"Suivi statistiques d'usage Matomo\"},\"header\":{\"accessibility\":{\"button_back\":\"Retour à la page précédente\",\"button_open_feedbacks\":\"Ouvrir le partage de retours\"}},\"konnector_form\":{\"label_updated_at\":\"Dernière mise-à -jour le\",\"button_update\":\"Mettre à jour\",\"loading\":\"Chargement...\",\"wait_end_issue\":\"Attendre la fin de la maintenance avant de mettre à jour.\",\"button_delete\":\"Supprimer\",\"issue\":\"Le problème semble venir de \",\"resolve\":\"Une mise à jour peut résoudre ce problème.\",\"login_failed\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"not_installed\":\"Le connecteur n'est pas installé. Veuillez l'installer en cliquant sur le bouton ci-dessous.\",\"button_install\":\"Installer\",\"error_account_creation\":\"Une erreur est survenue, veuillez essayer de nouveau.\",\"error_no_login_password\":\"Identifiant et mot de passe requis\",\"error_login_failed\":\"Identifiants invalides\",\"error_update\":\"Un problème est survenu lors du rapatriement de vos données.\",\"error_update_oauth\":\"Votre autorisation pour afficher vos données %{fluid} a expiré.\",\"error_consent_form_gas\":\"Vos données ne peuvent être récupérées car vous n'avez pas coché l'autorisation d'accès aux données informatives lors de votre partage de consentement.\",\"button_oauth_reload\":\"Redonner mon consentement\",\"OK\":\"Ok\",\"konnector_delta\":{\"ELECTRICITY\":\"La donnée de consommation électrique arrive normalement à J+1. Un retard d'un ou deux jours est parfois constaté.\",\"GAS\":\"La donnée de consommation de gaz arrive normalement à J+3. Un retard d'un ou deux jours est parfois constaté.\",\"WATER\":\"La donnée de consommation d'eau arrive normalement à J+3. Un retard d'un ou deux jours est parfois constaté.\"},\"accessibility\":{\"button_install\":\"Installer le connecteur\",\"button_update\":\"Mettre à jour votre connexion\",\"button_delete\":\"Supprimer votre connexion\"}},\"konnector_options\":{\"label_connect_to_electricity\":\"Se connecter à l'électricité\",\"label_connect_to_water\":\"Se connecter à l'eau\",\"label_connect_to_gas\":\"Se connecter au gaz\",\"label_offline_electricity\":\"Électricité déconnectée\",\"label_offline_water\":\"Eau déconnectée\",\"label_offline_gas\":\"Gaz déconnecté\",\"partner_issue\":\"En maintenance\",\"outdated\":\"Données manquantes depuis %{isOutdatedData} jours\",\"accessibility\":{\"label_ko_status\":\"Connecteur en erreur\",\"button_toggle_detail_electricity\":\"Afficher ou masquer le détail de la connexion à l'électricité\",\"button_toggle_detail_water\":\"Afficher ou masquer le détail de la connexion à l'eau\",\"button_toggle_detail_gas\":\"Afficher ou masquer le détail de la connexion au gaz\"}},\"konnector_modal\":{\"loading_data\":\"Veuillez patienter, vos données sont en cours de chargement.\",\"loading_data_update\":\"Veuillez patienter, vos données sont en cours de mise à jour.\",\"logging_txt\":\"Nous vérifions vos informations d'identité\",\"success_txt\":\"Félicitations !\",\"success_data_electricity\":\"Vos données de consommation d'électricité sont maintenant connectées à Ecolyo.\",\"success_data_water\":\"Vos données de consommation d'eau sont maintenant connectées à Ecolyo.\",\"success_data_gas\":\"Vos données de consommation de gaz sont maintenant connectées à Ecolyo.\",\"success_data_additional_electricity\":\"Les données de consommations mettent entre un et deux jours pour arriver.\",\"success_data_additional_water\":\"Les données de consommations mettent entre trois et cinq jours pour arriver.\",\"success_data_additional_gas\":\"Les données de consommations mettent entre trois et cinq jours pour arriver.\",\"success_update_txt\":\"Connexion réussie !\",\"success_data_update_electricity\":\"Ecolyo est bien connecté à votre compteur d'électricité.\",\"success_data_update_water\":\"Ecolyo est bien connecté à votre compteur d'eau.\",\"success_data_update_gas\":\"Ecolyo est bien connecté à votre compteur de gaz.\",\"success_data_additional_update_electricity\":\"Sachez que la donnée de consommation d'électricité arrive entre J+1 et J+2.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"success_data_additional_update_water\":\"Sachez que la donnée de consommation d'eau arrive entre J+3 et J+5.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"success_data_additional_update_gas\":\"Sachez que la donnée de consommation de gaz arrive entre J+3 et J+5.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"error_txt\":\"Aïe !\",\"mismatch\":{\"title\":\"Vos données n'ont pas pu être récupérées.\",\"text1\":\"Vos nom et numéro de compteur ne correspondent plus. Merci de reconfigurer votre connecteur.\",\"text2\":\"Reconfigurer mon connecteur ?\",\"text3\":\"La reconfiguration de votre connecteur passe par sa suppression et sa nouvelle installation. Vos données seront conservées.\"},\"error_data_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité ne seront pas chargées.\",\"error_data_water\":\"Un problème est survenu. Vos données de consommation d’eau ne seront pas chargées.\",\"error_credentials_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter. L'identifiant est un numéro à 7 chiffres (différent de votre numéro de contrat).\",\"error_credentials_electricity\":\"Il semblerait que les nom(s) et adresse ne concordent pas avec le numéro de votre compteur.\",\"error_credentials_electricity_2\":\"Nous ne pouvons vous donner accès aux données de consommation.\",\"error_credentials_update_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter.\",\"error_credentials_update_electricity\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"error_credentials_update_gas\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"error_data_gas\":\"Un problème est survenu. Vos données de consommation de gaz ne seront pas chargées.\",\"error_consent_form_gas_title\":\"Nous n'avons pas pu connecter vos données de consommation de gaz à Ecolyo.\",\"error_consent_form_gas_content\":\"En effet, le partage de vos données de consommation de gaz \\\"informatives\\\" doit être accepté.\",\"error_consent_form_gas_content_2\":\"Merci de cocher \\\"OUI\\\" au partage de vos données de consommation de gaz, et à \\\"Autoriser l'accès à mes données informatives\\\".\",\"error_data_update_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité n’ont pas été mises à jour.\",\"error_data_update_water\":\"Un problème est survenu. Vos données de consommation d’eau n’ont pas été mises à jour.\",\"error_data_update_gas\":\"Un problème est survenu. Vos données de consommation de gaz n’ont pas été mises à jour.\",\"error_data_2\":\"Merci de réessayer plus tard.\",\"button_validate\":\"Ok\",\"button_understood\":\"J'ai compris\",\"button_try_again\":\"Réessayer\",\"show_common_error\":\"Voir les erreurs récurrentes\",\"show_common_error_list\":\"<span>Le problème peut provenir des cas suivants :</span><ul><li>Vous avez un co-titulaire sur votre contrat. Veillez à bien entrer le nom du <span class=\\\"gold\\\">titulaire du contrat</span> et non le co-titulaire.</li><li> Votre nom comporte un tiret ? Tentez sans le tiret.</li><li>Entrez bien le nom de votre commune de résidence en entier (tirets et accents inclus)</li><li>Avez-vous bien entré le <span class=\\\"gold\\\">numéro de votre compteur</span> (PDL) ? Tout autre numéro (de contrat, de client) ne fonctionne pas.</li></ul><p>Si vous rencontrez toujours des difficultés, contactez notre service d'aide </p><div class=\\\"center\\\">Avez-vous pensez à vérifier ces informations ?</div>\",\"accessibility\":{\"window_title\":\"Fenêtre d'attente de connexion\",\"button_close\":\"Fermer la fenêtre\"}},\"consent_outdated\":{\"title\":{\"0\":\"Votre autorisation pour afficher vos données d’électricité a expiré\",\"2\":\"Votre autorisation pour afficher vos données de gaz a expiré\"},\"text1\":{\"0\":\"Veuillez re-donner votre consentement pour la transmission et la reconnexion de vos données ENEDIS à Ecolyo.\",\"2\":\"Veuillez re-donner votre accord pour que GRDF nous transmette vos données de consommation.\"},\"text2\":{\"0\":\"Souhaitez-vous renouveler votre accord dès maintenant pour un an ?\",\"2\":\"Voulez-vous donner votre accord sur votre compte GRDF maintenant ?\"},\"later\":\"Plus tard\",\"go\":\"J'y vais\",\"no\":\"Non\",\"yes\":\"Oui\"},\"delete_grdf_modal\":{\"text1\":\"La suppression de la connexion avec GRDF s’accompagne de la suppression de votre consentement à partager vos données gaz avec Ecolyo.\",\"text2\":\"Si vous souhaitez vous reconnecter, il vous faudra re-donner votre accord pour que GRDF nous transmette vos données de consommation.\",\"text3\":\"Voulez-vous supprimer votre connexion et votre consentement à GRDF ?\",\"cancel\":\"Plus tard\",\"go\":\"Oui\"},\"legal\":{\"read_legal\":\"Lire les mentions légales\",\"title_legal\":\"Mentions légales & CGU\",\"version\":\"Version du 12.12.2022\",\"site\":\"Site du service Ecolyo : <a href=\\\"https://ecolyo.com/\\\"> https://ecolyo.com/</a>\",\"adress\":\"Métropole de Lyon - 20, rue du Lac – CS 33569 - 69505 Lyon cedex 03\",\"phone\":\"Tél : (33) 4 78 63 40 40\",\"mail\":\"<a href=\\\"mailto:ecolyo@grandlyon.com\\\"> ecolyo(at)grandlyon.com</a>\",\"p1b\":\"Directrice de publication : \",\"p1\":\"Blandine MELAY, Responsable du Service Transition Énergétique\",\"p2b\":\"Animation éditoriale, gestion et mise à jour : \",\"p2\":\"Marion BERTHOLON, Chargée de services numériques pour la transition énergétique\",\"p3b\":\"Photographies : \",\"p3\":\"sauf mention contraire, les photos sont la propriété de la Métropole de Lyon\",\"p4b\":\"Conception et Charte graphique : \",\"p4\":\"Florent Dufier\",\"p5b\":\"Réalisation technique : \",\"p5\":\"Métropole de Lyon, Sopra Steria\",\"p6b\":\"Maintenance technique : \",\"p6\":\"Délégation Développement économique, emploi & savoirs - Innovation numérique & systèmes d’information - Usages et services numériques - Développement des services numériques\",\"title1\":\"Crédits\",\"part1\":\"Ce site est le résultat de développements spécifiques réalisés dans les langages Go, TypeScript, HTML et Sass. Les développements s’appuient sur plusieurs bibliothèques et frameworks libres : axios, cozy-bar, cozy-client, cozy-harvest-lib, cozy-scripts, cozy-ui, d3, detect-browser, global, lodash, luxon, moment, moment-timezone, node-sass, object-hash, react, react-dom, react-redux, react-router-dom, react-swipeable-views, redux-devtools-extension, sass-loader. Les tests de l’application s’appuient sur les bibliothèques et frameworks libres suivants: enzyme, enzyme-adapter-react-16, jest-junit, react-test-renderer, redux-mock-store. La pile technique intègre également les applications Cozy stack, Yarn, Docker, ACH. Les déploiements sont réalisés sur le registre hébergé chez Cozy. L’équipe de réalisation utilise au quotidien les applications GitLab, IceScrum, RocketChat, SonarQube.\",\"title2\":\"Traitement des données personnelles et droit d’accès, de modification et de suppression\",\"part2\":\"Conformément à la réglementation en vigueur en matière de protection des données personnelles, le service Ecolyo a fait l’objet d’une inscription au registre des traitements de la Métropole de Lyon. Ecolyo fait partie de l’écosystème de services orientés « self data » déployés par la Métropole de Lyon avec l’ambition d’offrir aux usagers métropolitains les outils et les services leur permettant d’exercer directement leur droit à la portabilité, dans un cadre apte à garantir aussi bien la transparence et le contrôle sur l’usage de leurs données personnelles que l’exploitation directe du contenu de ces données selon leurs libres choix. Le self data est en effet selon la Fondation Internet Nouvelle Génération (FING) « la production, l’exploitation et le partage de données personnelles par les individus, sous leur contrôle et à leurs propres fins ». Au sein de cet environnement self data, la gestion des données s’appuie sur l’organisation suivante des rôles et responsabilités associées : \",\"part2-1\":\"Les partenaires du service GRDF et Eau Publique du Grand Lyon sont responsables exclusivement des seuls traitements de Données Personnelles relatifs à la collecte des données de consommation de gaz et d’eau de l’utilisateur et à leur transmission sur la plateforme de cloud personnel, après consentement de l’utilisateur.\",\"part2-2\":\"Enedis est responsable de la collecte des données de consommation d’électricité et de leur mise à disposition à la Métropole de Lyon qui, elle en gère la transmission sur la plateforme du cloud personnel de l’utilisateur, après avoir récupéré le consentement de l’utilisateur.\",\"part2-3\":\"La Métropole de Lyon est responsable de traitement sur le périmètre du service Ecolyo qu’elle propose à l’usager, ainsi que des traitements nécessaires à la fourniture de la plateforme de cloud personnel qu’elle met à disposition de l’usager pour accéder au service Ecolyo. En sa qualité de responsable de ces traitements, elle collecte et traite : \",\"part2-3-1\":\"Les données de compte de l’usager renseignées par l’usager au sein de son espace de cloud personnel Grand Lyon à des fins de gestion du compte et de communication avec l’usager ;\",\"part2-3-2\":\"Les données de compte de l’utilisateur lui permettant de connecter ses données d’électricité à Ecolyo ;\",\"part2-3-3\":\"Les données privées de consommation d’énergie et d’eau dont la récupération, la sauvegarde, le stockage, la synchronisation et le partage sur la plateforme de cloud personnel sont initiés par l’usager sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-3-4\":\"Les données privées sur la composition du logement et du foyer de l’utilisateur, fournies par l’utilisateur lui-même au sein du service, sont traitées par le service sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-3-5\":\"Des métriques d’usage du service anonymisées et remontées périodiquement afin d’améliorer la qualité du service et d’évaluer son impact (Plus d’informations sur la manière dont votre anonymat est bien préservé dans ce processus <a href=\\\"https://ecolyo.com/cloud_statistiques.html\\\">ici</a>).\",\"part2-4\":\"La Métropole réalise également des mesures d’audience à l’aide de la solution Matomo. Afin de vous fournir un meilleur service et d’améliorer votre expérience d'utilisateur, nous utilisons des solutions de mesure d’audience qui utilisent la technologie des « cookies », des fichiers texte qui sont enregistrés sur votre ordinateur et qui permettent de générer des informations envoyées aux serveurs de mesure d’audience. Sur ces serveurs, l’adresse IP est anonymisée. Les données recueillies ont uniquement pour finalité de permettre d'analyser la fréquentation de nos pages afin d'en améliorer le contenu. Il s'agit de statistiques agrégées permettant de connaître le nombre de visites et de visiteurs différents, les pages les plus populaires, les chemins préférés, les niveaux d'activité par jour de la semaine et par heure de la journée, les principales erreurs etc. Vous avez cependant le droit de vous opposer à l’utilisation de ces cookies, et donc au traitement de vos données personnelles de navigation, en vous rendant dans la page Options de notre service.\",\"part2-5\":\"L’usager est seul décisionnaire des finalités d’utilisation qu’il souhaite définir pour le traitement de ses données personnelles de consommation, à la suite de leur transmission par les partenaires du service Ecolyo sur son cloud personnel. Ainsi, dans le cadre de l’utilisation d’Ecolyo, l’usager ne recevra les données des partenaires du service : Enedis, GRDF et Eau Publique du Grand Lyon seulement qu’à sa demande expresse après la saisie de ses identifiants.\",\"part2-6\":\"L’utilisateur est donc le seul à accéder :\",\"part2-6-1\":\"À ses données de consommation d’électricité horaires, journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-6-2\":\"À ses données de consommation de gaz journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-6-3\":\"À ses données de consommation eau journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-7\":\"Les engagements et responsabilités de la Métropole de Lyon concernant la protection des données et la confidentialité des données Ecolyo sont précisés dans les Mentions légales et les conditions d’utilisation du cloud personnel Grand Lyon qui accueille aujourd’hui le service Ecolyo et sans lequel le service ne peut pas fonctionner. Pour plus d’informations sur les engagements et responsabilités de la Métropole de Lyon concernant la protection et la confidentialité dans le cloud personnel, nous vous invitons à vous référer <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">aux mentions légales et CGU du cloud personnel métropolitain.</a> \",\"part2-8\":\"Conformément à la loi 78-17 du 6 janvier 1978 modifiée relative à l’information, aux fichiers et aux libertés, vous disposez d’un droit d’accès, de rectification et d’opposition au traitement de vos données à caractère personnel. Votre cloud personnel vous permet d’exercer ces droits directement dans cet espace sur vos données de compte. S’agissant des données de consommations d’électricité et de gaz, l’utilisateur peut supprimer son consentement à partager ses données en supprimant son connecteur dans la page Consos.\",\"part2-9\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part2-10\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou en ligne, au moyen du formulaire disponible à l'adresse suivante : <a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/.</a>\",\"part2-11\":\"L’exercice de ces droits sur vos données personnelles auprès de la Métropole de Lyon concerne exclusivement les données traitées dans le cadre du service « Ecolyo ».\",\"title3\":\"Dispositions légales\",\"part3-1\":\"Les divers éléments du site web (la forme, la mise en page, le fonds, la structure …) sont protégés par le droit des dessins et modèles, le droit d’auteur, le droit des marques ainsi que le droit à l’image et ils ne peuvent être copiés ou imités en tout ou partie sauf autorisation expresse de la Métropole de Lyon.\",\"part3-2\":\"Toute personne ne respectant pas les dispositions légales applicables se rend coupable du délit de contrefaçon et est passible des sanctions pénales prévues par la loi.\",\"title4\":\"Droits d’auteurs\",\"part4-1\":\"Les photographies, textes, logos, pictogrammes, ainsi que toutes Å“uvres intégrées dans le site sont la propriété de la \\\"Métropole de Lyon\\\" ou de tiers ayant autorisé la \\\"Métropole de Lyon\\\" à les utiliser.\",\"part4-2\":\"Les reproductions, les transmissions, les modifications, les réutilisations, sur un support papier ou informatique, dudit site et des Å“uvres qui y sont reproduites ne sont autorisées que pour un usage personnel et privé conforme aux dispositions de l’article L 122-5 du Code de la Propriété Intellectuelle. Ces reproductions devront ainsi notamment indiquer clairement la source et l’auteur du site et/ou de ces Å“uvres multimédias. En aucun cas ces reproductions ne sauraient porter préjudice aux droits des tiers. Les reproductions, les transmissions, les modifications, les réutilisations à des fins publicitaires, commerciales ou d’information, de tout ou partie du site, sont totalement interdites.\",\"title5\":\"Logo de la Métropole de Lyon et d’Ecolyo\",\"part5\":\"Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent pas être modifiés – proportions, couleurs, éléments, constituants – et ne peuvent pas être sujet à aucune transformation, animation ou tout autre processus. Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent être utilisés et associés qu’aux seules informations vérifiables. Ils ne peuvent être notamment utilisés que pour illustrer des relations avec la Métropole de Lyon ou des actions de sponsorings dûment établies. Quel que soit le cas d’espèce, la Métropole de Lyon se réserve le droit d’approuver ou de désapprouver toute utilisation des logos de la Métropole de Lyon et d’Ecolyo, pour assurer son utilisation correcte, conformément à l’éthique, la morale et aux intérêts de la Métropole de Lyon. Les conditions susmentionnées s’appliquent dans le cadre de pages web, elles ne font pas référence à l’utilisation des logos dans tout autre document. La Métropole de Lyon se réserve le droit de modifier les conditions d’utilisation des logos de la Métropole de Lyon et d’Ecolyo à tout moment et sans préavis.\",\"title6\":\"Droit des bases de données\",\"part6\":\"Les bases de données sont protégées par la loi du 1er juillet 1998 et le régime français du droit d’auteur.\",\"title7\":\"Établissements de liens vers le site Ecolyo\",\"part7-1\":\"La Métropole de Lyon autorise la mise en place d’un lien hypertexte vers son service Ecolyo pour tous les sites internet, à l’exclusion de ceux diffusant des informations à caractère polémique, pornographique, xénophobe ou pouvant, dans une plus large mesure porter atteinte à la sensibilité du plus grand nombre.\",\"part7-2\":\"Le lien doit aboutir à la page d’accueil du service (<a href=\\\"https://ecolyo.com\\\">https://ecolyo.com</a>), cette page devant apparaître dans une nouvelle fenêtre. Les pages du service Ecolyo ne doivent en aucun cas être intégrées à l’intérieur des pages d’un autre site (iframe).\",\"part7-3\":\"Dans tous les cas d’espèce, La Métropole de Lyon se réserve le droit de demander la suppression d’un lien si elle estime que le site cible ne respecte pas les règles ainsi définies.\",\"title8\":\"Liens vers des sites tiers depuis le site Ecolyo\",\"part8\":\"Les liens hypertextes mis en Å“uvre au sein du site en direction d’autres sites et/ou de pages personnelles et d’une manière générale vers toutes ressources existantes sur internet ne sauraient engager la responsabilité de la Métropole de Lyon quant aux liens qu’ils contiennent ou aux changements ou mises à jour qui leur sont apportés.\",\"title9\":\"Mise en garde générale\",\"part9-1\":\"Nos services mettent tout en Å“uvre pour offrir aux visiteurs de ce site web des informations fiables et vérifiées. Cependant, malgré tous les soins apportés, le site peut comporter des inexactitudes, des défauts de mise à jour ou des erreurs.\",\"part9-2\":\"Nous remercions les utilisateurs du site de nous faire part d’éventuelles omissions, erreurs ou corrections par mail sur la boite aux lettres du webmestre ou directement via le formulaire proposé dans le service.\",\"accessibility\":{\"button_close\":\"Fermer la fenêtre\"}},\"oauth\":{\"window\":{\"title\":\"OAuth\"}},\"onboarding\":{\"welcomeModal\":{\"title\":\"Vous êtes à mi-chemin !\",\"part1\":\"Votre cloud personnel a bien été créé.\",\"part2\":\"Il vous faut maintenant donner votre accord pour connecter vos compteurs au service.\",\"button_valid\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre de bienvenue\",\"button_valid\":\"Valider\"}}},\"performance_indicator\":{\"bilan\":{\"text1\":\"Par rapport à \",\"text2\":\"soit une différence de : \"},\"error_no_compare\":\"comparaison impossible\",\"error_no_compare_reason\":\"(manque de données)\",\"error_no_compare_no_data\":\"Vos consommations pour cette période sont incomplètes à cause d’un problème technique concernant :\",\"fpi\":{\"no_data\":\"Données non disponibles\",\"no_comparison\":\"Pas de comparaison possible\"}},\"profile\":{\"report\":{\"title_alert\":\"Alerte Consommation Excessive d'Eau\",\"title_bilan\":\"Notification par mail\",\"switch_label_bilan\":\"Je reçois la lettre mensuelle contenant un bilan et des conseils sur ma consommation.\",\"switch_label_alert\":\"Être prévenu d’un dépassement anormal de ma consommation d’eau\",\"input_label_alert\":\"Si ma consommation d’eau quotidienne dépasse :\",\"input_label_subtext_alert\":\"Votre consommation quotidienne maximum sur les 6 derniers mois : \",\"activate\":\"Activer\",\"deactivate\":\"Désactiver\"},\"accessibility\":{\"button_toggle_mail_report\":\"Recevoir mon bilan mensuel par mail\",\"button_toggle_consumption_alert\":\"Recevoir des alertes sur mes consommations journalières\",\"input_water_alert_report\":\"Indiquer une limite de consommation d'eau journalière\"}},\"profile_type\":{\"title_profile\":\"Mes données\",\"read_profile\":\"Ajuster mon profil\",\"button_update_profile\":\"J'ajuste mon profil\",\"your_profile\":\"Mon profil\",\"multi_choices\":\"Plusieurs réponses possibles\",\"housing_type\":{\"title\":\"Logement\",\"question\":\"De quel type de logement disposez-vous ?\",\"individual_house\":\"Maison individuelle\",\"apartment\":\"Appartement\"},\"construction_year\":{\"title\":\"Construction\",\"question\":\"Quelle est son année de construction ?\",\"text_before_1948\":\"Construit avant 1948\",\"text_between_1948_and_1974\":\"Construit entre 1948 et 1974\",\"text_between_1975_and_1989\":\"Construit entre 1975 et 1989\",\"text_between_1990_and_1998\":\"Construit entre 1990 et 1998\",\"text_after_1998\":\"Construit après 1998\",\"text_unknown\":\"Construit après 1998\",\"before_1948\":\"Avant 1948\",\"between_1948_and_1974\":\"Entre 1948 et 1974\",\"between_1975_and_1989\":\"Entre 1975 et 1989\",\"between_1990_and_1998\":\"Entre 1990 et 1998\",\"after_1998\":\"Après 1998\",\"unknown\":\"Je ne sais pas\"},\"occupantsNumber\":{\"single\":\" occupant\",\"multi\":\" occupants\"},\"area\":{\"title\":\"Surface\",\"question\":\"Quelle est sa surface en m² ?\",\"name\":\" m²\"},\"occupants_number\":{\"title\":\"Nombre d'occupants\",\"question\":\"Combien il y a-t-il d'occupants ?\"},\"outside_facing_walls\":{\"1\":\"1 façade\",\"2\":\"2 façades\",\"3\":\"3 façades\",\"4\":\"4 façades\",\"title\":\"Murs extérieurs\",\"question\":\"Combien de façades donnent sur l'extérieur ?\",\"text\":{\"single\":\" façade donne sur l'extérieur\",\"multi\":\" façades donnent sur l'extérieur\"}},\"floor\":{\"title\":\"Étage\",\"question\":\"À quel étage est votre appartement ?\",\"ground_floor\":\"Au rez-de-chaussée\",\"intermediate_floor\":\"Étage intermédiaire\",\"last_floor\":\"Dernier étage\",\"not_applicable\":\"Sans objet\"},\"heating\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"individual_insulation_work\":{\"title\":\"Travaux de rénovation\",\"question\":\"Quels travaux de rénovation avez-vous réalisés ces 10 dernières années ?\",\"none\":\"Aucun\",\"roof_insulation\":\"Isolation toiture\",\"window_replacement\":\"Remplacement fenêtres\",\"wall_insulation\":\"Isolation des murs\",\"window_replacement_and_wall_insulation\":\"Remplacement fenêtres et isolation des murs\",\"window_replacement_and_roof_insulation\":\"Remplacement fenêtres et isolation toiture\",\"roof_and_wall_insulation\":\"Isolation toiture et murs\",\"window_replacement_and_roof_and_wall_insulation\":\"Remplacement fenêtre et isolation des murs et isolation toiture\",\"built_after_1998\":\"construit après 1998\"},\"facilities_installation\":{\"title\":\"Équipement\"},\"ventilation\":{\"title\":\"Ventilation double flux\",\"question\":\"Êtes-vous équipé d'une ventilation double flux ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une ventilation double flux\"},\"heater_replacement\":{\"title\":\"Pompe à chaleur ou poêle à bois\",\"question\":\"Au cours de ces 10 dernières années, avez-vous remplacé votre chaudière ou vous êtes-vous équipé d'une pompe à chaleur ou d'un poêle à bois ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une pompe à chaleur ou poêle à bois\"},\"cold_water\":{\"title\":\"Eau\",\"question\":\"Votre eau est-elle comprise dans vos charges collectives ?\",\"individual\":\"Non\",\"collective\":\"Oui\",\"individual_text\":\"Individuelle\",\"collective_text\":\"Collective\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"},\"hot_water_equipment\":{\"title\":\"Eau chaude\",\"question\":\"Utilisez-vous l’un de ces équipements pour produire votre eau chaude ?\",\"solar\":\"Chauffe-eau solaire\",\"thermodynamic\":\"Chauffe-eau thermodynamique\",\"other\":\"Aucun des deux\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"5\":\"Autre\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\",\"5_text\":\"Produit grâce à un autre moyen\"},\"hot_water_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Autre (Fioul, Bois)\",\"title\":\"Source eau chaude\",\"question\":\"Avec quelle source d’énergie votre eau chaude est-elle produite ?\",\"no_fluid_text\":\"Produite ni par de l'électricité, ni par du gaz\",\"0_text\":\"Produite grâce à de l'électricité\",\"2_text\":\"Produite grâce au gaz\",\"3_text\":\"Produite à partir d'un autre moyen que l'électricité ou le gaz\"},\"cooking_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"title\":\"Source cuisson\",\"question\":\"Quel mode de cuisson principal utilisez-vous ?\"},\"update_date\":{\"title\":\"Date de prise d'effet\",\"question\":\"A partir de quelle date souhaitez-vous que ce nouveau profil soit pris en compte dans l'analyse de vos données ?\"},\"fluidType\":{\"0\":\"Électricité\",\"1\":\"Eau\",\"2\":\"Gaz\"},\"form\":{\"button_previous\":\"Précédent\",\"button_next\":\"Suivant\",\"button_end\":\"Terminer\",\"button_loading\":\"Chargement...\"},\"finished\":{\"title\":\"Terminé !\",\"label1\":\"Grâce à ces informations, vous pourrez comparer votre consommation avec celle d'un foyer vous ressemblant davantage !\",\"label2\":\"Nous pourrons aussi vous proposer des astuces pour maîtriser vos consommations adaptées à votre profil.\",\"button_validate\":\"OK\"},\"accessibility\":{\"button_end\":\"Terminer la mise à jour du profil\",\"button_next\":\"Aller à la section suivante\",\"button_previous\":\"Retour à la section précédente\",\"button_update_profile\":\"Ouvrir la page de mise à jour du profil\",\"button_toggle_detail_profile\":\"Afficher ou masquer le détail du profil\",\"button_toggle_export\":\"Afficher ou masquer l'export des données'\",\"button_toggle_average_home\":\"Afficher ou masquer les informations sur le comparatif'\",\"button_validate\":\"Valider\"}},\"export\":{\"title_export\":\"Télécharger mes données\",\"text1\":\"Vous allez télécharger l'historique mensuel de vos fluides sélectionnés\",\"fluid_select\":\"Pour quel(s) fluide(s) souhaitez vous exporter vos données ?\",\"no_data\":\"Vous n'avez aucune donnée de fluide...\",\"button_download\":\"Télécharger\",\"month\":\"Mois\",\"year\":\"Année\",\"consumption\":\"Consommation\",\"maxpower\":\"Puissance max (kVA)\",\"button_close\":\"Fermer la fenêtre\",\"modal_start\":{\"accessibility_title\":\"Commencer le téléchargement\",\"text1\":\"Vous allez télécharger des données personnelles, Ecolyo n’est plus responsable de celles-ci une fois téléchargées\",\"text2\":\"Les données seront téléchargées sous forme de document excel (.xls)\",\"text3\":\"Lancer le téléchargement ?\",\"button_cancel\":\"Annuler\"},\"modal_loading\":{\"accessibility_title\":\"Téléchargement en cours\",\"text1\":\"Données en cours de téléchargement\",\"text2\":\"Veuillez ne pas quitter l’application pendant la récupération et le téléchargement de vos données\",\"button_cancel\":\"Annuler le téléchargement\"},\"modal_done\":{\"accessibility_title\":\"Téléchargement terminé\",\"text1\":\"Vos données ont bien été téléchargées !\",\"text2\":\"Vous pouvez maintenant retrouver l’historique de vos données sur votre appareil\",\"error1\":\"Aïe !\",\"error2\":\"Il semblerait qu’une erreur se soit produite lors du téléchargement de vos données.\",\"button_close\":\"Fermer\",\"button_close_error\":\"Revenir plus tard\"}},\"quiz\":{\"explanation\":\"Répondez correctement aux 5 questions et remportez 5 des 15 étoiles nécessaires pour débloquer le duel final\",\"score_final\":\"SCORE FINAL\",\"correct\":\"Bravo !\",\"wrong\":\"Raté !\",\"rightAnswer\":\"Bonne réponse :\",\"earn\":\"Vous remportez\",\"button_go_back\":\"Retour\",\"button_end_quiz\":\"Youpi !\",\"button_try_again\":\"Réessayer\",\"button_validate\":\"Valider\",\"next\":\"Suivant\",\"consumption_question\":\"Question sur votre consommation\",\"accessibility\":{\"window_title\":\"Fenêtre de résultat\",\"button_end_quiz\":\"Terminer le quiz\",\"button_go_back\":\"Retour\",\"button_go_next\":\"Suivant\",\"button_try_again\":\"Relancer le quiz\",\"button_validate\":\"Valider\"}},\"splashscreen\":{\"error_loading\":\"Une erreur est survenue\",\"button_reload\":\"Réessayer\",\"accessibility\":{\"button_reload\":\"Recharger la page\"},\"migration_error\":\"Mise à jour de l'application\",\"consent_error\":\"Vérification de vos consentements pour partager vos données avec Ecolyo\",\"profile_error\":\"Chargement de votre profil utilisateur\",\"profileType_error\":\"Chargement de votre profil de consommation.\",\"challenges_error\":\"Actualisation de votre progression dans les défis\",\"analysis_error\":\"Chargement de votre analyse mensuelle\",\"index_error\":\"Chargement des index\",\"prices_error\":\"Mise à jour des prix\",\"consos_error\":\"Connexion à vos données de consommation\",\"partners_error\":\"Récupération de l'état des services partenaires\",\"unknown_error\":\"Veuillez vérifier votre connexion internet\",\"network_error\":\"Erreur de réseau\",\"step\":{\"0\":\"Mise à jour de l'application\",\"1\":\"Vérification de vos consentements pour partager vos données avec Ecolyo\",\"2\":\"Chargement de votre profil\",\"3\":\"Actualisation de votre progression dans les défis\",\"4\":\"Mise à jour des prix\",\"5\":\"Connexion à vos données de consommation\"}},\"timestep\":{\"today\":\"Aujourd'hui\",\"year\":{\"period\":\"5 ans\",\"comparelabel\":\"Comparer à l'année précédente\"},\"month\":{\"period\":\"Année\",\"comparelabel\":\"Comparer à l'année précédente\",\"current\":\"année actuelle\",\"last\":\"année précédente\"},\"day\":{\"period\":\"Mois\",\"comparelabel\":\"Comparer au mois précédent\",\"current\":\"mois actuel\",\"last\":\"mois précédent\"},\"week\":{\"period\":\"Semaine\",\"comparelabel\":\"Comparer à la semaine précédente\",\"current\":\"semaine actuelle\",\"last\":\"semaine précédente\"},\"half_an_hour\":{\"period\":\"Jour\",\"comparelabel\":\"Comparer à la journée précédente\",\"gather_data_title\":\"La récupération de vos données demi-horaires prend environ 24h.\",\"current\":\"jour actuel\",\"last\":\"jour précédent\",\"gather_data_subtitle\":\"Votre connexion a bien été prise en compte mais un délai de 24h est en général nécessaire à l’obtention de vos données.\\nÀ demain !\",\"analysis_waiting_data\":\"Pour bénéficier d'une analyse approfondie de votre consommation électrique, il nous faut récupérer vos données de consommation horaires. La récupération de ces données prend environ 24h. A bientôt !\"},\"accessibility\":{\"button_zoom_in\":\"Sélectionner le pas de temps précédent\",\"button_zoom_out\":\"Sélectionner le pas de temps suivant\"}},\"unsubscribe\":{\"title\":\"Êtes-vous sûr de ne plus vouloir recevoir notre email mensuel ?\",\"content\":\"Dans ce cas, vous ne recevrez plus la notification de votre bilan ainsi que les conseils associés au mois en cours.\",\"button_text\":\"Oui, je me désabonne\",\"button_accessibility\":\"Bouton de désinscription\"},\"welcome_modal\":{\"title\":\"Félicitations\",\"perso\":\"Votre espace personnel a bien été créé.\",\"connect\":\"Vous pouvez maintenant connecter vos compteurs d’énergie à Ecolyo en toute sécurité.\",\"button_valid\":\"Ok\",\"accessibility\":{\"title\":\"Fenêtre de félicitations\",\"button_valid\":\"Valider\"}}}"); /***/ }), @@ -24755,7 +24752,7 @@ var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WE exports = module.exports = __webpack_require__("JPst")(false); // Module -exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.eg-selection-detail-container {\n display: flex;\n flex-direction: column;\n text-align: center;\n color: #e0e0e0;\n padding: 0 1.5rem;\n flex: 1;\n max-height: calc(100vh - 60px - 72px - 0px);\n}\n.eg-selection-detail-container .content {\n display: flex;\n gap: 0.5rem;\n flex-direction: column;\n flex: 1;\n justify-content: flex-start;\n align-items: center;\n overflow-y: auto;\n}\n.eg-selection-detail-container .content .title {\n color: #a0a0a0;\n font-weight: 700;\n}\n.eg-selection-detail-container .content .iconContainer {\n height: 240px;\n}\n.eg-selection-detail-container .content .showMore {\n text-align: center;\n text-decoration: underline;\n margin-top: 1rem;\n cursor: pointer;\n}\n.eg-selection-detail-container .content .longDescription {\n margin: 1rem 0.5rem;\n text-align: left;\n}\n.eg-selection-detail-container .buttons {\n margin: 1rem 0;\n display: flex;\n gap: 0.5rem;\n flex-direction: row;\n justify-content: center;\n width: 100%;\n}\n.eg-selection-detail-container .buttons button.btn-secondary-negative {\n margin: 0;\n padding: 0.75rem 0.25rem;\n height: 7.375rem;\n border: 1px solid #e0e0e0;\n border-radius: 0.25rem;\n}\n.eg-selection-detail-container .buttons button.btn-secondary-negative:focus, .eg-selection-detail-container .buttons button.btn-secondary-negative.active, .eg-selection-detail-container .buttons button.btn-secondary-negative:disabled, .eg-selection-detail-container .buttons button.btn-secondary-negative:hover {\n background: transparent;\n}\n.eg-selection-detail-container .buttons button.btn-secondary-negative span {\n flex-direction: column;\n color: #e0e0e0;\n}\n.eg-selection-detail-container .buttons button.noFocus {\n background: transparent;\n}", ""]); +exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.eg-selection-detail-container {\n min-height: inherit;\n display: flex;\n flex-direction: column;\n text-align: center;\n color: #e0e0e0;\n padding: 0 1.5rem;\n}\n.eg-selection-detail-container .content {\n display: flex;\n gap: 0.5rem;\n flex-direction: column;\n flex: 1;\n justify-content: center;\n align-items: center;\n}\n.eg-selection-detail-container .content .title {\n color: #a0a0a0;\n font-weight: 700;\n}\n@media only screen and (max-width : 576px) {\n .eg-selection-detail-container .content .icon {\n width: 50%;\n height: 50%;\n }\n}\n@media only screen and (max-width : 320px) {\n .eg-selection-detail-container .content .icon {\n width: 30%;\n height: 30%;\n }\n}\n.eg-selection-detail-container .content .text {\n min-height: 4.875rem;\n display: flex;\n align-items: center;\n margin: 0 1rem;\n}\n.eg-selection-detail-container .buttons {\n margin: 1rem 0;\n display: flex;\n gap: 0.5rem;\n flex-direction: row;\n justify-content: center;\n width: 100%;\n}\n.eg-selection-detail-container .buttons button.btn-secondary-negative {\n margin: 0;\n padding: 0.75rem 0.25rem;\n height: 7.375rem;\n border: 1px solid #e0e0e0;\n border-radius: 0.25rem;\n}\n.eg-selection-detail-container .buttons button.btn-secondary-negative:focus, .eg-selection-detail-container .buttons button.btn-secondary-negative.active, .eg-selection-detail-container .buttons button.btn-secondary-negative:disabled, .eg-selection-detail-container .buttons button.btn-secondary-negative:hover {\n background: transparent;\n}\n.eg-selection-detail-container .buttons button.btn-secondary-negative span {\n flex-direction: column;\n color: #e0e0e0;\n}\n.eg-selection-detail-container .buttons button.noFocus {\n background: transparent;\n}", ""]); @@ -26656,12 +26653,6 @@ var Navbar = function Navbar() { return _ref.apply(this, arguments); }; }(), [client]); - /** Return class "is-active" if pathname includes matcher */ - - var isActive = function isActive(matcher) { - return pathname.includes(matcher) ? 'is-active' : ''; - }; - return /*#__PURE__*/_react.default.createElement("aside", { className: "o-sidebar" }, /*#__PURE__*/_react.default.createElement("nav", { @@ -26677,7 +26668,7 @@ var Navbar = function Navbar() { }, /*#__PURE__*/_react.default.createElement(_Link.default, { component: _reactRouterDom.NavLink, to: "/consumption", - className: "c-nav-link ".concat(isActive('/consumption')) + className: "c-nav-link ".concat(pathname.includes('/consumption') ? 'is-active' : '') }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, { className: "c-nav-icon off", icon: _consoOff.default @@ -26692,7 +26683,7 @@ var Navbar = function Navbar() { }, /*#__PURE__*/_react.default.createElement(_Link.default, { component: _reactRouterDom.NavLink, to: "/challenges", - className: "c-nav-link ".concat(isActive('/challenges')) + className: "c-nav-link ".concat(pathname.includes('/challenges') ? 'is-active' : '') }, (challengeExplorationNotification || challengeActionNotification || challengeDuelNotification) && /*#__PURE__*/_react.default.createElement("div", { className: "nb-notif" }, "1"), /*#__PURE__*/_react.default.createElement(_StyledIcon.default, { @@ -26709,7 +26700,7 @@ var Navbar = function Navbar() { }, /*#__PURE__*/_react.default.createElement(_Link.default, { component: _reactRouterDom.NavLink, to: "/ecogestures", - className: "c-nav-link ".concat(isActive('/ecogesture')) + className: "c-nav-link ".concat(pathname.includes('/ecogestures') ? 'is-active' : '') }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, { className: "c-nav-icon off", icon: _astucesOff.default @@ -26741,7 +26732,7 @@ var Navbar = function Navbar() { }, /*#__PURE__*/_react.default.createElement(_Link.default, { component: _reactRouterDom.NavLink, to: "/options", - className: "c-nav-link ".concat(isActive('/options')) + className: "c-nav-link ".concat(pathname.includes('/options') ? 'is-active' : '') }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, { className: "c-nav-icon off", icon: _parametreOff.default @@ -31871,7 +31862,7 @@ exports.i(__webpack_require__("tgIe"), ""); exports.push([module.i, "@import url(https://fonts.googleapis.com/css2?family=Lato:wght@400;700&display=swap);", ""]); // Module -exports.push([module.i, "/* Cozy UI utilities classes */\n/* Cozy UI React components styles */\n/* App styles */\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\nhtml {\n background: #121212;\n}\n\nbody {\n background: #121212;\n overflow: unset !important;\n}\n\n.column {\n display: flex;\n flex-direction: column;\n}\n\n.row {\n display: flex;\n flex-direction: row;\n}\n\n.cozy-bar {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: 0;\n}\n\n[role=banner] .coz-bar-container {\n background-color: #ffffff;\n}\n@media only screen and (max-width : 768px) {\n [role=banner] .coz-bar-container {\n padding: 0.6rem 0 0 0;\n background-color: unset;\n }\n}\n\n.coz-bar-wrapper {\n box-shadow: unset !important;\n background: unset !important;\n}\n\n.coz-label {\n color: #32363f;\n}\n\n.content-view-loading {\n height: 80vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n color: #e0e0e0;\n}\n.content-view-loading .content-view-loading-text {\n padding-top: 1rem;\n margin: 0 2rem;\n text-align: center;\n}\n.content-view-loading .content-view-loading-button {\n max-width: 50vw;\n margin-top: 1rem;\n}\n\n[role=main] {\n /* width */\n /* Track */\n /* Handle */\n}\n[role=main]::-webkit-scrollbar {\n width: 10px;\n}\n[role=main]::-webkit-scrollbar-track {\n background: #3e4045;\n}\n[role=main]::-webkit-scrollbar-thumb {\n background: #6f7074;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n* {\n font-family: Lato, sans-serif;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np {\n color: #a0a0a0;\n font-family: Lato, sans-serif;\n}\n\n.home-title {\n font-size: 1rem;\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: normal;\n line-height: 120%;\n text-transform: uppercase;\n}\n\n.app-title {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: bold;\n font-size: 21px;\n line-height: 24px;\n text-align: center;\n letter-spacing: 0.15px;\n color: #e0e0e0;\n text-shadow: 0px -1px 0px #060609, 0px 1px 0px rgba(255, 255, 255, 0.07);\n}\n\n.text-10, .text-10-italic, .text-10-bold, .text-10-bold-capitalize, .text-10-bold-uppercase, .text-10-normal, .text-10-normal-150, .text-10-normal-uppercase {\n font-style: normal;\n font-size: 0.625rem;\n line-height: 120%;\n}\n.text-10-normal, .text-10-normal-150, .text-10-normal-uppercase {\n font-weight: normal;\n}\n.text-10-normal-uppercase {\n text-transform: uppercase;\n}\n.text-10-normal-150 {\n line-height: 150%;\n}\n.text-10-bold, .text-10-bold-capitalize, .text-10-bold-uppercase {\n font-weight: 700;\n}\n.text-10-bold-uppercase {\n text-transform: uppercase;\n}\n.text-10-bold-capitalize {\n text-transform: capitalize;\n}\n.text-10-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-14, .text-14-italic, .text-14-bold, .text-14-bold-capitalize, .text-14-bold-uppercase, .text-14-normal, .text-14-normal-150, .text-14-normal-uppercase {\n font-style: normal;\n font-size: 0.875rem;\n line-height: 120%;\n}\n.text-14-normal, .text-14-normal-150, .text-14-normal-uppercase {\n font-weight: normal;\n}\n.text-14-normal-uppercase {\n text-transform: uppercase;\n}\n.text-14-normal-150 {\n line-height: 150%;\n}\n.text-14-bold, .text-14-bold-capitalize, .text-14-bold-uppercase {\n font-weight: 700;\n}\n.text-14-bold-uppercase {\n text-transform: uppercase;\n}\n.text-14-bold-capitalize {\n text-transform: capitalize;\n}\n.text-14-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-15, .text-15-italic, .text-15-bold, .text-15-bold-capitalize, .text-15-bold-uppercase, .text-15-normal, .text-15-normal-150, .text-15-normal-uppercase {\n font-style: normal;\n font-size: 0.938rem;\n line-height: 120%;\n}\n.text-15-normal, .text-15-normal-150, .text-15-normal-uppercase {\n font-weight: normal;\n}\n.text-15-normal-uppercase {\n text-transform: uppercase;\n}\n.text-15-normal-150 {\n line-height: 150%;\n}\n.text-15-bold, .text-15-bold-capitalize, .text-15-bold-uppercase {\n font-weight: 700;\n}\n.text-15-bold-uppercase {\n text-transform: uppercase;\n}\n.text-15-bold-capitalize {\n text-transform: capitalize;\n}\n.text-15-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-16, .text-16-italic, .text-16-bold, .text-16-bold-capitalize, .text-16-bold-uppercase, .text-16-normal, .text-16-normal-150, .text-16-normal-uppercase {\n font-style: normal;\n font-size: 1rem;\n line-height: 120%;\n}\n.text-16-normal, .text-16-normal-150, .text-16-normal-uppercase {\n font-weight: normal;\n}\n.text-16-normal-uppercase {\n text-transform: uppercase;\n}\n.text-16-normal-150 {\n line-height: 150%;\n}\n.text-16-bold, .text-16-bold-capitalize, .text-16-bold-uppercase {\n font-weight: 700;\n}\n.text-16-bold-uppercase {\n text-transform: uppercase;\n}\n.text-16-bold-capitalize {\n text-transform: capitalize;\n}\n.text-16-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-18, .text-18-italic, .text-18-bold, .text-18-bold-capitalize, .text-18-bold-uppercase, .text-18-normal, .text-18-normal-150, .text-18-normal-uppercase {\n font-style: normal;\n font-size: 1.125rem;\n line-height: 120%;\n}\n.text-18-normal, .text-18-normal-150, .text-18-normal-uppercase {\n font-weight: normal;\n}\n.text-18-normal-uppercase {\n text-transform: uppercase;\n}\n.text-18-normal-150 {\n line-height: 150%;\n}\n.text-18-bold, .text-18-bold-capitalize, .text-18-bold-uppercase {\n font-weight: 700;\n}\n.text-18-bold-uppercase {\n text-transform: uppercase;\n}\n.text-18-bold-capitalize {\n text-transform: capitalize;\n}\n.text-18-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-19, .text-19-italic, .text-19-bold, .text-19-bold-capitalize, .text-19-bold-uppercase, .text-19-normal, .text-19-normal-150, .text-19-normal-uppercase {\n font-style: normal;\n font-size: 1.188rem;\n line-height: 120%;\n}\n.text-19-normal, .text-19-normal-150, .text-19-normal-uppercase {\n font-weight: normal;\n}\n.text-19-normal-uppercase {\n text-transform: uppercase;\n}\n.text-19-normal-150 {\n line-height: 150%;\n}\n.text-19-bold, .text-19-bold-capitalize, .text-19-bold-uppercase {\n font-weight: 700;\n}\n.text-19-bold-uppercase {\n text-transform: uppercase;\n}\n.text-19-bold-capitalize {\n text-transform: capitalize;\n}\n.text-19-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-20, .text-20-italic, .text-20-bold, .text-20-bold-capitalize, .text-20-bold-uppercase, .text-20-normal, .text-20-normal-150, .text-20-normal-uppercase {\n font-style: normal;\n font-size: 1.25rem;\n line-height: 120%;\n}\n.text-20-normal, .text-20-normal-150, .text-20-normal-uppercase {\n font-weight: normal;\n}\n.text-20-normal-uppercase {\n text-transform: uppercase;\n}\n.text-20-normal-150 {\n line-height: 150%;\n}\n.text-20-bold, .text-20-bold-capitalize, .text-20-bold-uppercase {\n font-weight: 700;\n}\n.text-20-bold-uppercase {\n text-transform: uppercase;\n}\n.text-20-bold-capitalize {\n text-transform: capitalize;\n}\n.text-20-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-21, .text-21-italic, .text-21-bold, .text-21-bold-capitalize, .text-21-bold-uppercase, .text-21-normal, .text-21-normal-150, .text-21-normal-uppercase {\n font-style: normal;\n font-size: 1.313rem;\n line-height: 120%;\n}\n.text-21-normal, .text-21-normal-150, .text-21-normal-uppercase {\n font-weight: normal;\n}\n.text-21-normal-uppercase {\n text-transform: uppercase;\n}\n.text-21-normal-150 {\n line-height: 150%;\n}\n.text-21-bold, .text-21-bold-capitalize, .text-21-bold-uppercase {\n font-weight: 700;\n}\n.text-21-bold-uppercase {\n text-transform: uppercase;\n}\n.text-21-bold-capitalize {\n text-transform: capitalize;\n}\n.text-21-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-22, .text-22-italic, .text-22-bold, .text-22-bold-capitalize, .text-22-bold-uppercase, .text-22-normal, .text-22-normal-150, .text-22-normal-uppercase {\n font-style: normal;\n font-size: 1.375rem;\n line-height: 120%;\n}\n.text-22-normal, .text-22-normal-150, .text-22-normal-uppercase {\n font-weight: normal;\n}\n.text-22-normal-uppercase {\n text-transform: uppercase;\n}\n.text-22-normal-150 {\n line-height: 150%;\n}\n.text-22-bold, .text-22-bold-capitalize, .text-22-bold-uppercase {\n font-weight: 700;\n}\n.text-22-bold-uppercase {\n text-transform: uppercase;\n}\n.text-22-bold-capitalize {\n text-transform: capitalize;\n}\n.text-22-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-24, .text-24-italic, .text-24-bold, .text-24-bold-capitalize, .text-24-bold-uppercase, .text-24-normal, .text-24-normal-150, .text-24-normal-uppercase {\n font-style: normal;\n font-size: 1.5rem;\n line-height: 120%;\n}\n.text-24-normal, .text-24-normal-150, .text-24-normal-uppercase {\n font-weight: normal;\n}\n.text-24-normal-uppercase {\n text-transform: uppercase;\n}\n.text-24-normal-150 {\n line-height: 150%;\n}\n.text-24-bold, .text-24-bold-capitalize, .text-24-bold-uppercase {\n font-weight: 700;\n}\n.text-24-bold-uppercase {\n text-transform: uppercase;\n}\n.text-24-bold-capitalize {\n text-transform: capitalize;\n}\n.text-24-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-26, .text-26-italic, .text-26-bold, .text-26-bold-capitalize, .text-26-bold-uppercase, .text-26-normal, .text-26-normal-150, .text-26-normal-uppercase {\n font-style: normal;\n font-size: 1.625rem;\n line-height: 120%;\n}\n.text-26-normal, .text-26-normal-150, .text-26-normal-uppercase {\n font-weight: normal;\n}\n.text-26-normal-uppercase {\n text-transform: uppercase;\n}\n.text-26-normal-150 {\n line-height: 150%;\n}\n.text-26-bold, .text-26-bold-capitalize, .text-26-bold-uppercase {\n font-weight: 700;\n}\n.text-26-bold-uppercase {\n text-transform: uppercase;\n}\n.text-26-bold-capitalize {\n text-transform: capitalize;\n}\n.text-26-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-28, .text-28-italic, .text-28-bold, .text-28-bold-capitalize, .text-28-bold-uppercase, .text-28-normal, .text-28-normal-150, .text-28-normal-uppercase {\n font-style: normal;\n font-size: 1.75rem;\n line-height: 120%;\n}\n.text-28-normal, .text-28-normal-150, .text-28-normal-uppercase {\n font-weight: normal;\n}\n.text-28-normal-uppercase {\n text-transform: uppercase;\n}\n.text-28-normal-150 {\n line-height: 150%;\n}\n.text-28-bold, .text-28-bold-capitalize, .text-28-bold-uppercase {\n font-weight: 700;\n}\n.text-28-bold-uppercase {\n text-transform: uppercase;\n}\n.text-28-bold-capitalize {\n text-transform: capitalize;\n}\n.text-28-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-36, .text-36-italic, .text-36-bold, .text-36-bold-capitalize, .text-36-bold-uppercase, .text-36-normal, .text-36-normal-150, .text-36-normal-uppercase {\n font-style: normal;\n font-size: 2.25rem;\n line-height: 120%;\n}\n.text-36-normal, .text-36-normal-150, .text-36-normal-uppercase {\n font-weight: normal;\n}\n.text-36-normal-uppercase {\n text-transform: uppercase;\n}\n.text-36-normal-150 {\n line-height: 150%;\n}\n.text-36-bold, .text-36-bold-capitalize, .text-36-bold-uppercase {\n font-weight: 700;\n}\n.text-36-bold-uppercase {\n text-transform: uppercase;\n}\n.text-36-bold-capitalize {\n text-transform: capitalize;\n}\n.text-36-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n/* Card */\n.card-title-on {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: normal;\n font-size: 1.125rem;\n line-height: 120%;\n color: #e0e0e0;\n}\n\n.card-text-bold {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: bold;\n font-size: 1rem;\n line-height: 120%;\n color: #e0e0e0;\n}\n\n.card-indicator {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: normal;\n font-size: 1rem;\n line-height: 120%;\n color: #e0e0e0;\n}\n\n.card-text {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: normal;\n font-size: 1rem;\n line-height: 120%;\n color: #e0e0e0;\n}\n\n/* Chart */\n.chart-ticks-x-text {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: normal;\n font-size: 1rem;\n line-height: 120%;\n}\n@media only screen and (max-width : 768px) {\n .chart-ticks-x-text {\n font-size: 0.685rem;\n }\n}\n\n.chart-ticks-y-text {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: normal;\n font-size: 0.9rem;\n line-height: 120%;\n}\n@media only screen and (max-width : 768px) {\n .chart-ticks-y-text {\n font-size: 0.75rem;\n }\n}\n\n/* Cozy bar */\n.cozybar {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: bold;\n font-size: 1.3125rem;\n line-height: 120%;\n color: #e0e0e0;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.axis {\n color: #7b7b7b;\n}\n.axis .tick-text {\n fill: #7b7b7b;\n}\n.axis .tick-text.tick-text-selected {\n fill: #e0e0e0;\n}\n.axis .separator {\n text-align: center;\n margin: 0 2px;\n font-size: 1rem !important;\n}\n\n.value-text {\n fill: #7b7b7b;\n}\n.value-text.selected {\n fill: #e0e0e0;\n}\n\n.barContainer.disabled *,\n.barFill.disabled * {\n cursor: default !important;\n}\n.barContainer:hover,\n.barFill:hover {\n cursor: pointer;\n}\n\n.background-true {\n opacity: 0.1;\n}\n.background-true:hover {\n cursor: pointer;\n}\n\n.background-false {\n opacity: 0;\n}\n\n.bar-compare-ELECTRICITY:hover,\n.bar-compare-GAS:hover,\n.bar-compare-WATER:hover,\n.bar-compare-MULTIFLUID:hover,\n.bar-MULTIFLUID:hover,\n.bar-WATER:hover,\n.bar-GAS:hover,\n.bar-ELECTRICITY:hover {\n cursor: pointer;\n}\n.bar-compare-ELECTRICITY:hover.disabled,\n.bar-compare-GAS:hover.disabled,\n.bar-compare-WATER:hover.disabled,\n.bar-compare-MULTIFLUID:hover.disabled,\n.bar-MULTIFLUID:hover.disabled,\n.bar-WATER:hover.disabled,\n.bar-GAS:hover.disabled,\n.bar-ELECTRICITY:hover.disabled {\n cursor: default;\n}\n\n.bar-ELECTRICITY {\n fill: #5d3d2a;\n}\n.bar-ELECTRICITY.selected {\n fill: #d87b39;\n filter: drop-shadow(0 -0.1rem 0.2rem #d87b39);\n}\n\n.bar-compare-ELECTRICITY {\n fill: #795c47;\n}\n.bar-compare-ELECTRICITY.selected {\n fill: #e2bca1;\n filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);\n}\n\n.bar-WATER {\n fill: #20415e;\n}\n.bar-WATER.selected {\n fill: #3a98ec;\n filter: drop-shadow(0 -0.1rem 0.2rem #3a98ec);\n}\n\n.bar-compare-WATER {\n fill: #4d5c6e;\n}\n.bar-compare-WATER.selected {\n fill: #abd4fa;\n filter: drop-shadow(0 -0.1rem 0.2rem #abd4fa);\n}\n\n.bar-GAS {\n fill: #184940;\n}\n.bar-GAS.selected {\n fill: #45d1b8;\n filter: drop-shadow(0 -0.1rem 0.2rem #45d1b8);\n}\n\n.bar-compare-GAS {\n fill: #597773;\n}\n.bar-compare-GAS.selected {\n fill: #a8f7e9;\n filter: drop-shadow(0 -0.1rem 0.2rem #a8f7e9);\n}\n\n.bar-MULTIFLUID {\n fill: #705d1d;\n}\n.bar-MULTIFLUID.selected {\n fill: #e3b82a;\n filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n.bar-MULTIFLUID.disabled:hover {\n cursor: default;\n}\n\n.bar-duel {\n fill: #61f0f2;\n}\n.bar-duel.selected {\n fill: #61f0f2;\n filter: drop-shadow(0 -0.1rem 0.2rem #61f0f2);\n}\n.bar-duel.disabled:hover {\n cursor: default;\n}\n\n.bar-UNCOMING {\n fill: #7b7b7b;\n opacity: 0.6;\n}\n.bar-UNCOMING.selected {\n fill: #7b7b7b;\n}\n.bar-UNCOMING.disabled:hover {\n cursor: default;\n}\n\n.bar-compare-MULTIFLUID {\n fill: #7d6a4e;\n}\n.bar-compare-MULTIFLUID.selected {\n fill: #ffd597;\n filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n\n.bar-average {\n stroke-width: 2;\n stroke: #e3b82a;\n}\n\n.week {\n fill: #e2bca1;\n}\n.week.selected {\n fill: #e2bca1;\n filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);\n}\n\n.weekend {\n fill: #ffd597;\n}\n.weekend.selected {\n fill: #ffd597;\n filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n\n/** Animation **/\n.bounce-1 {\n animation-name: bounce-1;\n animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n animation-iteration-count: 1;\n transform-origin: bottom center;\n transform-box: fill-box;\n}\n\n@keyframes bounce-1 {\n 0% {\n transform: scale(0.1, 0.1);\n }\n 28% {\n transform: scale(0.1, 1.1);\n }\n 45% {\n transform: scale(0.8, 0.95);\n }\n 55% {\n transform: scale(1, 1);\n }\n 65% {\n transform: scale(1, 0.98);\n }\n 75% {\n transform: scale(1, 1);\n }\n}\n.bounce-2 {\n animation-name: bounce-2;\n animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n animation-iteration-count: 1;\n transform-origin: bottom center;\n transform-box: fill-box;\n}\n\n@keyframes bounce-2 {\n 0% {\n transform: scale(1, 1);\n }\n 28% {\n transform: scale(1, 1.1);\n }\n 45% {\n transform: scale(0.8, 0.95);\n }\n 55% {\n transform: scale(1, 1);\n }\n 65% {\n transform: scale(1, 0.98);\n }\n 75% {\n transform: scale(1, 1);\n }\n}\n.bounce-3 {\n animation-name: bounce-3;\n animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n animation-iteration-count: 1;\n transform-origin: bottom center;\n}\n\n@keyframes bounce-3 {\n 0% {\n opacity: 0.6;\n transform: scaleY(1);\n }\n 50% {\n transform: scaleY(1.1);\n opacity: 0.8;\n }\n 100% {\n transform: scaleY(1);\n opacity: 1;\n }\n}\n/** Animation delay **/\n.delay {\n animation-duration: 0.4s;\n}\n\n.delay--0 {\n animation-duration: 0.4s;\n}\n\n.delay--1 {\n animation-duration: 0.48s;\n}\n\n.delay--2 {\n animation-duration: 0.56s;\n}\n\n.delay--3 {\n animation-duration: 0.64s;\n}\n\n.delay--4 {\n animation-duration: 0.72s;\n}\n\n.delay--5 {\n animation-duration: 0.8s;\n}\n\n.delay--6 {\n animation-duration: 0.88s;\n}\n\n.delay--7 {\n animation-duration: 0.96s;\n}\n\n.delay--8 {\n animation-duration: 1.04s;\n}\n\n.delay--9 {\n animation-duration: 1.12s;\n}\n\n.delay--10 {\n animation-duration: 1.2s;\n}\n\n.delay--11 {\n animation-duration: 1.28s;\n}\n\n.delay--12 {\n animation-duration: 1.36s;\n}\n\n.delay--13 {\n animation-duration: 1.44s;\n}\n\n.delay--14 {\n animation-duration: 1.52s;\n}\n\n.delay--15 {\n animation-duration: 1.6s;\n}\n\n.delay--16 {\n animation-duration: 1.68s;\n}\n\n.delay--17 {\n animation-duration: 1.76s;\n}\n\n.delay--18 {\n animation-duration: 1.84s;\n}\n\n.delay--19 {\n animation-duration: 1.92s;\n}\n\n.delay--20 {\n animation-duration: 2s;\n}\n\n.delay--21 {\n animation-duration: 2.08s;\n}\n\n.delay--22 {\n animation-duration: 2.16s;\n}\n\n.delay--23 {\n animation-duration: 2.24s;\n}\n\n.delay--24 {\n animation-duration: 2.32s;\n}\n\n.delay--25 {\n animation-duration: 2.4s;\n}\n\n.delay--26 {\n animation-duration: 2.48s;\n}\n\n.delay--27 {\n animation-duration: 2.56s;\n}\n\n.delay--28 {\n animation-duration: 2.64s;\n}\n\n.delay--29 {\n animation-duration: 2.72s;\n}\n\n.delay--30 {\n animation-duration: 2.8s;\n}\n\n.delay--31 {\n animation-duration: 2.88s;\n}\n\n.delay--32 {\n animation-duration: 2.96s;\n}\n\n.delay--33 {\n animation-duration: 3.04s;\n}\n\n.delay--34 {\n animation-duration: 3.12s;\n}\n\n.delay--35 {\n animation-duration: 3.2s;\n}\n\n.delay--36 {\n animation-duration: 3.28s;\n}\n\n.delay--37 {\n animation-duration: 3.36s;\n}\n\n.delay--38 {\n animation-duration: 3.44s;\n}\n\n.delay--39 {\n animation-duration: 3.52s;\n}\n\n.delay--40 {\n animation-duration: 3.6s;\n}\n\n.delay--41 {\n animation-duration: 3.68s;\n}\n\n.delay--42 {\n animation-duration: 3.76s;\n}\n\n.delay--43 {\n animation-duration: 3.84s;\n}\n\n.delay--44 {\n animation-duration: 3.92s;\n}\n\n.delay--45 {\n animation-duration: 4s;\n}\n\n.delay--46 {\n animation-duration: 4.08s;\n}\n\n.delay--47 {\n animation-duration: 4.16s;\n}\n\n.delay--48 {\n animation-duration: 4.24s;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\nbutton.btn-highlight {\n background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n background-color: #e3b82a;\n border: none;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-highlight span:first-child {\n color: #000000;\n}\nbutton.btn-highlight:hover, button.btn-highlight:focus, button.btn-highlight.active, button.btn-highlight:disabled {\n background-color: #b89318;\n}\nbutton.btn-highlight:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-primary-positive {\n background: transparent;\n background-color: transparent;\n border: 1px solid #121212;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-primary-positive span:first-child {\n color: #e3b82a;\n}\nbutton.btn-primary-positive:hover, button.btn-primary-positive:focus, button.btn-primary-positive.active, button.btn-primary-positive:disabled {\n background-color: rgba(18, 18, 18, 0.2);\n}\nbutton.btn-primary-positive:hover span:first-child, button.btn-primary-positive:focus span:first-child, button.btn-primary-positive.active span:first-child, button.btn-primary-positive:disabled span:first-child {\n color: rgba(227, 184, 42, 0.7);\n}\nbutton.btn-primary-positive:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-primary-challenge {\n background: transparent;\n background-color: #61f0f2;\n border: 1px solid #61f0f2;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-primary-challenge span:first-child {\n color: black;\n}\nbutton.btn-primary-challenge:hover, button.btn-primary-challenge:focus, button.btn-primary-challenge.active, button.btn-primary-challenge:disabled {\n background-color: rgba(97, 240, 242, 0.2);\n}\nbutton.btn-primary-challenge:hover span:first-child, button.btn-primary-challenge:focus span:first-child, button.btn-primary-challenge.active span:first-child, button.btn-primary-challenge:disabled span:first-child {\n color: black;\n}\nbutton.btn-primary-challenge:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-secondary {\n background: transparent;\n background-color: transparent;\n border: 1px solid #7b7b7b;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-secondary span:first-child {\n color: #f1c017;\n}\nbutton.btn-secondary:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-secondary-positive {\n background: transparent;\n background-color: transparent;\n border: 1px solid #ffffff;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-secondary-positive span:first-child {\n color: #e0e0e0;\n}\nbutton.btn-secondary-positive:hover, button.btn-secondary-positive:focus, button.btn-secondary-positive.active, button.btn-secondary-positive:disabled {\n background-color: rgba(18, 18, 18, 0.2);\n}\nbutton.btn-secondary-positive:hover span:first-child, button.btn-secondary-positive:focus span:first-child, button.btn-secondary-positive.active span:first-child, button.btn-secondary-positive:disabled span:first-child {\n color: rgba(224, 224, 224, 0.7);\n}\nbutton.btn-secondary-positive:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-secondary-negative {\n background: transparent;\n background-color: transparent;\n border: 1px solid #7b7b7b;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-secondary-negative span:first-child {\n color: #e0e0e0;\n}\nbutton.btn-secondary-negative:hover, button.btn-secondary-negative:focus, button.btn-secondary-negative.active, button.btn-secondary-negative:disabled {\n background-color: rgba(123, 123, 123, 0.2);\n}\nbutton.btn-secondary-negative:hover span:first-child, button.btn-secondary-negative:focus span:first-child, button.btn-secondary-negative.active span:first-child, button.btn-secondary-negative:disabled span:first-child {\n color: rgba(224, 224, 224, 0.7);\n}\nbutton.btn-secondary-negative:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-duel-off {\n background: #121212;\n background-color: #121212;\n border: 1px solid rgba(97, 240, 242, 0.5);\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-duel-off span:first-child {\n color: #ffffff;\n}\nbutton.btn-duel-off:hover, button.btn-duel-off:focus, button.btn-duel-off.active, button.btn-duel-off:disabled {\n background-color: black;\n}\nbutton.btn-duel-off:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-duel-active {\n border-radius: 4px !important;\n background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n background-color: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n border: none;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-duel-active span:first-child {\n color: #121212;\n}\nbutton.btn-duel-active:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-duel-on {\n background: radial-gradient(60.65% 30.62% at 50% 3.13%, #2a2b30 0%, #1b1c22 100%);\n background-color: #121212;\n border: 1px solid #58ffff;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-duel-on span:first-child {\n color: #ffffff;\n}\nbutton.btn-duel-on:hover, button.btn-duel-on:focus, button.btn-duel-on.active, button.btn-duel-on:disabled {\n background-color: black;\n}\nbutton.btn-duel-on:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-profile-next {\n background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n background-color: #e3b82a;\n border: 1px solid #e3b82a;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-profile-next span:first-child {\n color: #000000;\n}\nbutton.btn-profile-next:hover, button.btn-profile-next:focus, button.btn-profile-next.active, button.btn-profile-next:disabled {\n background-color: #b89318;\n}\nbutton.btn-profile-next:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-profile-back {\n background: none;\n background-color: none;\n border: 1px solid #e0e0e0;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-profile-back span:first-child {\n color: #e0e0e0;\n}\nbutton.btn-profile-back:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.card {\n background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n box-sizing: border-box;\n box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);\n border-radius: 4px;\n padding: 16px;\n}\n.card:hover {\n background: linear-gradient(180deg, rgba(70, 71, 77, 0.7) 0%, rgba(57, 58, 63, 0.7) 100%);\n}\n.card.rich-card {\n padding: 16px;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.modal-root .MuiBackdrop-root {\n background-color: hsla(231deg, 11%, 12%, 0.85);\n}\n\ndiv.modal-paper {\n background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n width: 36rem;\n max-width: 100%;\n max-height: 90vh;\n padding: 2rem;\n box-sizing: border-box;\n box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n border-radius: 4px;\n margin: 0 0 0 13.75rem;\n align-items: center;\n color: #ffffff;\n}\n@media only screen and (max-width : 1023px) {\n div.modal-paper {\n width: 35rem;\n margin: 0;\n }\n}\n@media only screen and (max-width : 768px) {\n div.modal-paper {\n padding: 1rem 1rem 1.5rem;\n width: 85%;\n max-width: 35rem;\n margin: 0;\n }\n}\ndiv.modal-paper.no-padding {\n padding: 0;\n}\ndiv.modal-paper.blue-border {\n border: 1px solid rgba(88, 255, 255, 0.2509803922);\n}\ndiv.modal-paper.blue-light-border {\n border: 1px solid #61f0f2;\n}\ndiv.modal-paper.yellow-border {\n border: 1px solid rgba(227, 184, 42, 0.4);\n}\ndiv.modal-paper .modal-paper-close-button {\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n padding: 5px 5px;\n z-index: 10;\n}\n\ndiv.modal-paper-full-screen {\n background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n width: 100%;\n max-width: 100%;\n height: 100%;\n max-height: 100%;\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n border-radius: 4px;\n color: #ffffff;\n display: flex;\n align-items: center;\n}\ndiv.modal-paper-full-screen.dark-background {\n background: #121212;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.expansion-panel-root {\n margin: 1.2rem 0;\n color: #e0e0e0;\n background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n border-radius: 4px;\n box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);\n transition: background-color 0.6s ease;\n box-sizing: border-box;\n}\ndiv.expansion-panel-root.Mui-expanded:first-child {\n margin: 1.2rem 0;\n}\ndiv.expansion-panel-root.Mui-expanded:last-child {\n margin: 1.2rem 0;\n}\ndiv.expansion-panel-root.red-border {\n border: 1px solid #d25959;\n}\n\ndiv.expansion-panel-summary {\n padding: 0.25rem 1.2rem;\n min-height: 4rem;\n}\ndiv.expansion-panel-summary.Mui-focused {\n border-radius: 4px;\n background-color: unset;\n box-shadow: 0 0 0 1px #e0e0e0;\n}\ndiv.expansion-panel-summary.Mui-expanded {\n min-height: 4rem;\n}\ndiv.expansion-panel-summary.Mui-expanded.small {\n min-height: 3rem;\n}\ndiv.expansion-panel-summary.small {\n padding: 0 1.2rem;\n min-height: 3rem;\n}\ndiv.expansion-panel-summary.bold-text {\n font-weight: bold;\n}\n\ndiv.expansion-panel-content {\n display: flex;\n align-items: center;\n}\ndiv.expansion-panel-content.Mui-expanded {\n margin: 0.75rem 0;\n}\n\ndiv.expansion-panel-details {\n padding: 0 1.2rem 1.2rem;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\na {\n color: #deaf0e;\n}\na:visited {\n color: #deaf0e;\n}\n\na:focus {\n outline: none;\n box-shadow: inset 0 0 0 1px #e0e0e0;\n}\na:focus > div:first-child {\n box-shadow: 0 0 0 1px #e0e0e0;\n}\n\na.MuiLink-underlineHover:hover {\n text-decoration: none;\n}\n\na.MuiTypography-colorPrimary {\n color: #e0e0e0;\n}\n\n:root {\n white-space: pre-line;\n --blue: #58ffff;\n --blue40: rgba(88, 255, 255, 0.2509803922);\n --blueBackground: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n --blueRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n --blueRadialGradientTrans: radial-gradient(circle, #58ffff 0%, rgba(255, 255, 255, 0) 100%);\n --elecColor: #d87b39;\n --elecColor40: rgba(216, 123, 57, 0.4);\n --elecCompareColor: #e2bca1;\n --gasColor: #45d1b8;\n --gasColor40: rgba(69, 209, 184, 0.4);\n --gasCompareColor: #a8f7e9;\n --waterColor: #3a98ec;\n --waterColor40: rgba(58, 152, 236, 0.4);\n --waterCompareColor: #abd4fa;\n --multiColor: #e3b82a;\n --multiCompareColor: #ffd597;\n --redPrimary: #d25959;\n --greyBright: #e0e0e0;\n --greyDark: #7b7b7b;\n --textWhite: #ffffff;\n --softGrey: #a0a0a0;\n --darkLight: #25262b;\n --darkLight2: #121212;\n --textFont: Lato, sans-serif;\n --greyLinearGradientBackground: linear-gradient(180deg, #323339 0%, #25262b 100%);\n --multiColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);\n --elecColorRadialGradientTrans: radial-gradient(circle, #d87b39 0%, rgba(255, 255, 255, 0) 100%);\n --waterColorRadialGradientTrans: radial-gradient(circle, #3a98ec 0%, rgba(255, 255, 255, 0) 100%);\n --gasColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);\n --multiColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n --elecColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(158, 67, 2, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #d87b39;\n --gasColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(4, 106, 88, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #45d1b8;\n --waterColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(2, 93, 174, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #3a98ec;\n}\n\n.application {\n overflow-x: hidden;\n background-color: #121212;\n}\n\n.accordion-icon {\n color: #ffffff;\n}\n\n.loaderContainer {\n height: 80vh;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n}", ""]); +exports.push([module.i, "/* Cozy UI utilities classes */\n/* Cozy UI React components styles */\n/* App styles */\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\nhtml {\n background: #121212;\n}\n\nbody {\n background: #121212;\n overflow: unset !important;\n}\n\n.column {\n display: flex;\n flex-direction: column;\n}\n\n.row {\n display: flex;\n flex-direction: row;\n}\n\n.cozy-bar {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: 0;\n}\n\n[role=banner] .coz-bar-container {\n background-color: #ffffff;\n}\n@media only screen and (max-width : 768px) {\n [role=banner] .coz-bar-container {\n padding: 0.6rem 0 0 0;\n background-color: unset;\n }\n}\n\n.coz-bar-wrapper {\n box-shadow: unset !important;\n background: unset !important;\n}\n\n.coz-label {\n color: #32363f;\n}\n\n.content-view-loading {\n height: 80vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n color: #e0e0e0;\n}\n.content-view-loading .content-view-loading-text {\n padding-top: 1rem;\n margin: 0 2rem;\n text-align: center;\n}\n.content-view-loading .content-view-loading-button {\n max-width: 50vw;\n margin-top: 1rem;\n}\n\n[role=main] {\n /* width */\n /* Track */\n /* Handle */\n}\n[role=main]::-webkit-scrollbar {\n width: 10px;\n}\n[role=main]::-webkit-scrollbar-track {\n background: #3e4045;\n}\n[role=main]::-webkit-scrollbar-thumb {\n background: #6f7074;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n* {\n font-family: Lato, sans-serif;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np {\n color: #a0a0a0;\n font-family: Lato, sans-serif;\n}\n\n.home-title {\n font-size: 1rem;\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: normal;\n line-height: 120%;\n text-transform: uppercase;\n}\n\n.app-title {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: bold;\n font-size: 21px;\n line-height: 24px;\n text-align: center;\n letter-spacing: 0.15px;\n color: #e0e0e0;\n text-shadow: 0px -1px 0px #060609, 0px 1px 0px rgba(255, 255, 255, 0.07);\n}\n\n.text-10, .text-10-italic, .text-10-bold, .text-10-bold-capitalize, .text-10-bold-uppercase, .text-10-normal, .text-10-normal-150, .text-10-normal-uppercase {\n font-style: normal;\n font-size: 0.625rem;\n line-height: 120%;\n}\n.text-10-normal, .text-10-normal-150, .text-10-normal-uppercase {\n font-weight: normal;\n}\n.text-10-normal-uppercase {\n text-transform: uppercase;\n}\n.text-10-normal-150 {\n line-height: 150%;\n}\n.text-10-bold, .text-10-bold-capitalize, .text-10-bold-uppercase {\n font-weight: 700;\n}\n.text-10-bold-uppercase {\n text-transform: uppercase;\n}\n.text-10-bold-capitalize {\n text-transform: capitalize;\n}\n.text-10-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-14, .text-14-italic, .text-14-bold, .text-14-bold-capitalize, .text-14-bold-uppercase, .text-14-normal, .text-14-normal-150, .text-14-normal-uppercase {\n font-style: normal;\n font-size: 0.875rem;\n line-height: 120%;\n}\n.text-14-normal, .text-14-normal-150, .text-14-normal-uppercase {\n font-weight: normal;\n}\n.text-14-normal-uppercase {\n text-transform: uppercase;\n}\n.text-14-normal-150 {\n line-height: 150%;\n}\n.text-14-bold, .text-14-bold-capitalize, .text-14-bold-uppercase {\n font-weight: 700;\n}\n.text-14-bold-uppercase {\n text-transform: uppercase;\n}\n.text-14-bold-capitalize {\n text-transform: capitalize;\n}\n.text-14-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-15, .text-15-italic, .text-15-bold, .text-15-bold-capitalize, .text-15-bold-uppercase, .text-15-normal, .text-15-normal-150, .text-15-normal-uppercase {\n font-style: normal;\n font-size: 0.938rem;\n line-height: 120%;\n}\n.text-15-normal, .text-15-normal-150, .text-15-normal-uppercase {\n font-weight: normal;\n}\n.text-15-normal-uppercase {\n text-transform: uppercase;\n}\n.text-15-normal-150 {\n line-height: 150%;\n}\n.text-15-bold, .text-15-bold-capitalize, .text-15-bold-uppercase {\n font-weight: 700;\n}\n.text-15-bold-uppercase {\n text-transform: uppercase;\n}\n.text-15-bold-capitalize {\n text-transform: capitalize;\n}\n.text-15-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-16, .text-16-italic, .text-16-bold, .text-16-bold-capitalize, .text-16-bold-uppercase, .text-16-normal, .text-16-normal-150, .text-16-normal-uppercase {\n font-style: normal;\n font-size: 1rem;\n line-height: 120%;\n}\n.text-16-normal, .text-16-normal-150, .text-16-normal-uppercase {\n font-weight: normal;\n}\n.text-16-normal-uppercase {\n text-transform: uppercase;\n}\n.text-16-normal-150 {\n line-height: 150%;\n}\n.text-16-bold, .text-16-bold-capitalize, .text-16-bold-uppercase {\n font-weight: 700;\n}\n.text-16-bold-uppercase {\n text-transform: uppercase;\n}\n.text-16-bold-capitalize {\n text-transform: capitalize;\n}\n.text-16-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-18, .text-18-italic, .text-18-bold, .text-18-bold-capitalize, .text-18-bold-uppercase, .text-18-normal, .text-18-normal-150, .text-18-normal-uppercase {\n font-style: normal;\n font-size: 1.125rem;\n line-height: 120%;\n}\n.text-18-normal, .text-18-normal-150, .text-18-normal-uppercase {\n font-weight: normal;\n}\n.text-18-normal-uppercase {\n text-transform: uppercase;\n}\n.text-18-normal-150 {\n line-height: 150%;\n}\n.text-18-bold, .text-18-bold-capitalize, .text-18-bold-uppercase {\n font-weight: 700;\n}\n.text-18-bold-uppercase {\n text-transform: uppercase;\n}\n.text-18-bold-capitalize {\n text-transform: capitalize;\n}\n.text-18-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-19, .text-19-italic, .text-19-bold, .text-19-bold-capitalize, .text-19-bold-uppercase, .text-19-normal, .text-19-normal-150, .text-19-normal-uppercase {\n font-style: normal;\n font-size: 1.188rem;\n line-height: 120%;\n}\n.text-19-normal, .text-19-normal-150, .text-19-normal-uppercase {\n font-weight: normal;\n}\n.text-19-normal-uppercase {\n text-transform: uppercase;\n}\n.text-19-normal-150 {\n line-height: 150%;\n}\n.text-19-bold, .text-19-bold-capitalize, .text-19-bold-uppercase {\n font-weight: 700;\n}\n.text-19-bold-uppercase {\n text-transform: uppercase;\n}\n.text-19-bold-capitalize {\n text-transform: capitalize;\n}\n.text-19-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-20, .text-20-italic, .text-20-bold, .text-20-bold-capitalize, .text-20-bold-uppercase, .text-20-normal, .text-20-normal-150, .text-20-normal-uppercase {\n font-style: normal;\n font-size: 1.25rem;\n line-height: 120%;\n}\n.text-20-normal, .text-20-normal-150, .text-20-normal-uppercase {\n font-weight: normal;\n}\n.text-20-normal-uppercase {\n text-transform: uppercase;\n}\n.text-20-normal-150 {\n line-height: 150%;\n}\n.text-20-bold, .text-20-bold-capitalize, .text-20-bold-uppercase {\n font-weight: 700;\n}\n.text-20-bold-uppercase {\n text-transform: uppercase;\n}\n.text-20-bold-capitalize {\n text-transform: capitalize;\n}\n.text-20-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-21, .text-21-italic, .text-21-bold, .text-21-bold-capitalize, .text-21-bold-uppercase, .text-21-normal, .text-21-normal-150, .text-21-normal-uppercase {\n font-style: normal;\n font-size: 1.313rem;\n line-height: 120%;\n}\n.text-21-normal, .text-21-normal-150, .text-21-normal-uppercase {\n font-weight: normal;\n}\n.text-21-normal-uppercase {\n text-transform: uppercase;\n}\n.text-21-normal-150 {\n line-height: 150%;\n}\n.text-21-bold, .text-21-bold-capitalize, .text-21-bold-uppercase {\n font-weight: 700;\n}\n.text-21-bold-uppercase {\n text-transform: uppercase;\n}\n.text-21-bold-capitalize {\n text-transform: capitalize;\n}\n.text-21-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-22, .text-22-italic, .text-22-bold, .text-22-bold-capitalize, .text-22-bold-uppercase, .text-22-normal, .text-22-normal-150, .text-22-normal-uppercase {\n font-style: normal;\n font-size: 1.375rem;\n line-height: 120%;\n}\n.text-22-normal, .text-22-normal-150, .text-22-normal-uppercase {\n font-weight: normal;\n}\n.text-22-normal-uppercase {\n text-transform: uppercase;\n}\n.text-22-normal-150 {\n line-height: 150%;\n}\n.text-22-bold, .text-22-bold-capitalize, .text-22-bold-uppercase {\n font-weight: 700;\n}\n.text-22-bold-uppercase {\n text-transform: uppercase;\n}\n.text-22-bold-capitalize {\n text-transform: capitalize;\n}\n.text-22-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-24, .text-24-italic, .text-24-bold, .text-24-bold-capitalize, .text-24-bold-uppercase, .text-24-normal, .text-24-normal-150, .text-24-normal-uppercase {\n font-style: normal;\n font-size: 1.5rem;\n line-height: 120%;\n}\n.text-24-normal, .text-24-normal-150, .text-24-normal-uppercase {\n font-weight: normal;\n}\n.text-24-normal-uppercase {\n text-transform: uppercase;\n}\n.text-24-normal-150 {\n line-height: 150%;\n}\n.text-24-bold, .text-24-bold-capitalize, .text-24-bold-uppercase {\n font-weight: 700;\n}\n.text-24-bold-uppercase {\n text-transform: uppercase;\n}\n.text-24-bold-capitalize {\n text-transform: capitalize;\n}\n.text-24-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-26, .text-26-italic, .text-26-bold, .text-26-bold-capitalize, .text-26-bold-uppercase, .text-26-normal, .text-26-normal-150, .text-26-normal-uppercase {\n font-style: normal;\n font-size: 1.625rem;\n line-height: 120%;\n}\n.text-26-normal, .text-26-normal-150, .text-26-normal-uppercase {\n font-weight: normal;\n}\n.text-26-normal-uppercase {\n text-transform: uppercase;\n}\n.text-26-normal-150 {\n line-height: 150%;\n}\n.text-26-bold, .text-26-bold-capitalize, .text-26-bold-uppercase {\n font-weight: 700;\n}\n.text-26-bold-uppercase {\n text-transform: uppercase;\n}\n.text-26-bold-capitalize {\n text-transform: capitalize;\n}\n.text-26-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-28, .text-28-italic, .text-28-bold, .text-28-bold-capitalize, .text-28-bold-uppercase, .text-28-normal, .text-28-normal-150, .text-28-normal-uppercase {\n font-style: normal;\n font-size: 1.75rem;\n line-height: 120%;\n}\n.text-28-normal, .text-28-normal-150, .text-28-normal-uppercase {\n font-weight: normal;\n}\n.text-28-normal-uppercase {\n text-transform: uppercase;\n}\n.text-28-normal-150 {\n line-height: 150%;\n}\n.text-28-bold, .text-28-bold-capitalize, .text-28-bold-uppercase {\n font-weight: 700;\n}\n.text-28-bold-uppercase {\n text-transform: uppercase;\n}\n.text-28-bold-capitalize {\n text-transform: capitalize;\n}\n.text-28-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n.text-36, .text-36-italic, .text-36-bold, .text-36-bold-capitalize, .text-36-bold-uppercase, .text-36-normal, .text-36-normal-150, .text-36-normal-uppercase {\n font-style: normal;\n font-size: 2.25rem;\n line-height: 120%;\n}\n.text-36-normal, .text-36-normal-150, .text-36-normal-uppercase {\n font-weight: normal;\n}\n.text-36-normal-uppercase {\n text-transform: uppercase;\n}\n.text-36-normal-150 {\n line-height: 150%;\n}\n.text-36-bold, .text-36-bold-capitalize, .text-36-bold-uppercase {\n font-weight: 700;\n}\n.text-36-bold-uppercase {\n text-transform: uppercase;\n}\n.text-36-bold-capitalize {\n text-transform: capitalize;\n}\n.text-36-italic {\n font-style: italic;\n font-weight: normal;\n}\n\n/* Card */\n.card-title-on {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: normal;\n font-size: 1.125rem;\n line-height: 120%;\n color: #e0e0e0;\n}\n\n.card-text-bold {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: bold;\n font-size: 1rem;\n line-height: 120%;\n color: #e0e0e0;\n}\n\n.card-indicator {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: normal;\n font-size: 1rem;\n line-height: 120%;\n color: #e0e0e0;\n}\n\n.card-text {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: normal;\n font-size: 1rem;\n line-height: 120%;\n color: #e0e0e0;\n}\n\n/* Chart */\n.chart-ticks-x-text {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: normal;\n font-size: 1rem;\n line-height: 120%;\n}\n@media only screen and (max-width : 768px) {\n .chart-ticks-x-text {\n font-size: 0.685rem;\n }\n}\n\n.chart-ticks-y-text {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: normal;\n font-size: 0.9rem;\n line-height: 120%;\n}\n@media only screen and (max-width : 768px) {\n .chart-ticks-y-text {\n font-size: 0.75rem;\n }\n}\n\n/* Cozy bar */\n.cozybar {\n font-family: Lato, sans-serif;\n font-style: normal;\n font-weight: bold;\n font-size: 1.3125rem;\n line-height: 120%;\n color: #e0e0e0;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.axis {\n color: #7b7b7b;\n}\n.axis .tick-text {\n fill: #7b7b7b;\n}\n.axis .tick-text.tick-text-selected {\n fill: #e0e0e0;\n}\n.axis .separator {\n text-align: center;\n margin: 0 2px;\n font-size: 1rem !important;\n}\n\n.value-text {\n fill: #7b7b7b;\n}\n.value-text.selected {\n fill: #e0e0e0;\n}\n\n.barContainer.disabled *,\n.barFill.disabled * {\n cursor: default !important;\n}\n.barContainer:hover,\n.barFill:hover {\n cursor: pointer;\n}\n\n.background-true {\n opacity: 0.1;\n}\n.background-true:hover {\n cursor: pointer;\n}\n\n.background-false {\n opacity: 0;\n}\n\n.bar-compare-ELECTRICITY:hover,\n.bar-compare-GAS:hover,\n.bar-compare-WATER:hover,\n.bar-compare-MULTIFLUID:hover,\n.bar-MULTIFLUID:hover,\n.bar-WATER:hover,\n.bar-GAS:hover,\n.bar-ELECTRICITY:hover {\n cursor: pointer;\n}\n.bar-compare-ELECTRICITY:hover.disabled,\n.bar-compare-GAS:hover.disabled,\n.bar-compare-WATER:hover.disabled,\n.bar-compare-MULTIFLUID:hover.disabled,\n.bar-MULTIFLUID:hover.disabled,\n.bar-WATER:hover.disabled,\n.bar-GAS:hover.disabled,\n.bar-ELECTRICITY:hover.disabled {\n cursor: default;\n}\n\n.bar-ELECTRICITY {\n fill: #5d3d2a;\n}\n.bar-ELECTRICITY.selected {\n fill: #d87b39;\n filter: drop-shadow(0 -0.1rem 0.2rem #d87b39);\n}\n\n.bar-compare-ELECTRICITY {\n fill: #795c47;\n}\n.bar-compare-ELECTRICITY.selected {\n fill: #e2bca1;\n filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);\n}\n\n.bar-WATER {\n fill: #20415e;\n}\n.bar-WATER.selected {\n fill: #3a98ec;\n filter: drop-shadow(0 -0.1rem 0.2rem #3a98ec);\n}\n\n.bar-compare-WATER {\n fill: #4d5c6e;\n}\n.bar-compare-WATER.selected {\n fill: #abd4fa;\n filter: drop-shadow(0 -0.1rem 0.2rem #abd4fa);\n}\n\n.bar-GAS {\n fill: #184940;\n}\n.bar-GAS.selected {\n fill: #45d1b8;\n filter: drop-shadow(0 -0.1rem 0.2rem #45d1b8);\n}\n\n.bar-compare-GAS {\n fill: #597773;\n}\n.bar-compare-GAS.selected {\n fill: #a8f7e9;\n filter: drop-shadow(0 -0.1rem 0.2rem #a8f7e9);\n}\n\n.bar-MULTIFLUID {\n fill: #705d1d;\n}\n.bar-MULTIFLUID.selected {\n fill: #e3b82a;\n filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n.bar-MULTIFLUID.disabled:hover {\n cursor: default;\n}\n\n.bar-duel {\n fill: #61f0f2;\n}\n.bar-duel.selected {\n fill: #61f0f2;\n filter: drop-shadow(0 -0.1rem 0.2rem #61f0f2);\n}\n.bar-duel.disabled:hover {\n cursor: default;\n}\n\n.bar-UNCOMING {\n fill: #7b7b7b;\n opacity: 0.6;\n}\n.bar-UNCOMING.selected {\n fill: #7b7b7b;\n}\n.bar-UNCOMING.disabled:hover {\n cursor: default;\n}\n\n.bar-compare-MULTIFLUID {\n fill: #7d6a4e;\n}\n.bar-compare-MULTIFLUID.selected {\n fill: #ffd597;\n filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n\n.bar-average {\n stroke-width: 2;\n stroke: #e3b82a;\n}\n\n.week {\n fill: #e2bca1;\n}\n.week.selected {\n fill: #e2bca1;\n filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);\n}\n\n.weekend {\n fill: #ffd597;\n}\n.weekend.selected {\n fill: #ffd597;\n filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n\n/** Animation **/\n.bounce-1 {\n animation-name: bounce-1;\n animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n animation-iteration-count: 1;\n transform-origin: bottom center;\n transform-box: fill-box;\n}\n\n@keyframes bounce-1 {\n 0% {\n transform: scale(0.1, 0.1);\n }\n 28% {\n transform: scale(0.1, 1.1);\n }\n 45% {\n transform: scale(0.8, 0.95);\n }\n 55% {\n transform: scale(1, 1);\n }\n 65% {\n transform: scale(1, 0.98);\n }\n 75% {\n transform: scale(1, 1);\n }\n}\n.bounce-2 {\n animation-name: bounce-2;\n animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n animation-iteration-count: 1;\n transform-origin: bottom center;\n transform-box: fill-box;\n}\n\n@keyframes bounce-2 {\n 0% {\n transform: scale(1, 1);\n }\n 28% {\n transform: scale(1, 1.1);\n }\n 45% {\n transform: scale(0.8, 0.95);\n }\n 55% {\n transform: scale(1, 1);\n }\n 65% {\n transform: scale(1, 0.98);\n }\n 75% {\n transform: scale(1, 1);\n }\n}\n.bounce-3 {\n animation-name: bounce-3;\n animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n animation-iteration-count: 1;\n transform-origin: bottom center;\n}\n\n@keyframes bounce-3 {\n 0% {\n opacity: 0.6;\n transform: scaleY(1);\n }\n 50% {\n transform: scaleY(1.1);\n opacity: 0.8;\n }\n 100% {\n transform: scaleY(1);\n opacity: 1;\n }\n}\n/** Animation delay **/\n.delay {\n animation-duration: 0.4s;\n}\n\n.delay--0 {\n animation-duration: 0.4s;\n}\n\n.delay--1 {\n animation-duration: 0.48s;\n}\n\n.delay--2 {\n animation-duration: 0.56s;\n}\n\n.delay--3 {\n animation-duration: 0.64s;\n}\n\n.delay--4 {\n animation-duration: 0.72s;\n}\n\n.delay--5 {\n animation-duration: 0.8s;\n}\n\n.delay--6 {\n animation-duration: 0.88s;\n}\n\n.delay--7 {\n animation-duration: 0.96s;\n}\n\n.delay--8 {\n animation-duration: 1.04s;\n}\n\n.delay--9 {\n animation-duration: 1.12s;\n}\n\n.delay--10 {\n animation-duration: 1.2s;\n}\n\n.delay--11 {\n animation-duration: 1.28s;\n}\n\n.delay--12 {\n animation-duration: 1.36s;\n}\n\n.delay--13 {\n animation-duration: 1.44s;\n}\n\n.delay--14 {\n animation-duration: 1.52s;\n}\n\n.delay--15 {\n animation-duration: 1.6s;\n}\n\n.delay--16 {\n animation-duration: 1.68s;\n}\n\n.delay--17 {\n animation-duration: 1.76s;\n}\n\n.delay--18 {\n animation-duration: 1.84s;\n}\n\n.delay--19 {\n animation-duration: 1.92s;\n}\n\n.delay--20 {\n animation-duration: 2s;\n}\n\n.delay--21 {\n animation-duration: 2.08s;\n}\n\n.delay--22 {\n animation-duration: 2.16s;\n}\n\n.delay--23 {\n animation-duration: 2.24s;\n}\n\n.delay--24 {\n animation-duration: 2.32s;\n}\n\n.delay--25 {\n animation-duration: 2.4s;\n}\n\n.delay--26 {\n animation-duration: 2.48s;\n}\n\n.delay--27 {\n animation-duration: 2.56s;\n}\n\n.delay--28 {\n animation-duration: 2.64s;\n}\n\n.delay--29 {\n animation-duration: 2.72s;\n}\n\n.delay--30 {\n animation-duration: 2.8s;\n}\n\n.delay--31 {\n animation-duration: 2.88s;\n}\n\n.delay--32 {\n animation-duration: 2.96s;\n}\n\n.delay--33 {\n animation-duration: 3.04s;\n}\n\n.delay--34 {\n animation-duration: 3.12s;\n}\n\n.delay--35 {\n animation-duration: 3.2s;\n}\n\n.delay--36 {\n animation-duration: 3.28s;\n}\n\n.delay--37 {\n animation-duration: 3.36s;\n}\n\n.delay--38 {\n animation-duration: 3.44s;\n}\n\n.delay--39 {\n animation-duration: 3.52s;\n}\n\n.delay--40 {\n animation-duration: 3.6s;\n}\n\n.delay--41 {\n animation-duration: 3.68s;\n}\n\n.delay--42 {\n animation-duration: 3.76s;\n}\n\n.delay--43 {\n animation-duration: 3.84s;\n}\n\n.delay--44 {\n animation-duration: 3.92s;\n}\n\n.delay--45 {\n animation-duration: 4s;\n}\n\n.delay--46 {\n animation-duration: 4.08s;\n}\n\n.delay--47 {\n animation-duration: 4.16s;\n}\n\n.delay--48 {\n animation-duration: 4.24s;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\nbutton.btn-highlight {\n background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n background-color: #e3b82a;\n border: none;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-highlight span:first-child {\n color: #000000;\n}\nbutton.btn-highlight:hover, button.btn-highlight:focus, button.btn-highlight.active, button.btn-highlight:disabled {\n background-color: #b89318;\n}\nbutton.btn-highlight:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-primary-positive {\n background: transparent;\n background-color: transparent;\n border: 1px solid #121212;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-primary-positive span:first-child {\n color: #e3b82a;\n}\nbutton.btn-primary-positive:hover, button.btn-primary-positive:focus, button.btn-primary-positive.active, button.btn-primary-positive:disabled {\n background-color: rgba(18, 18, 18, 0.2);\n}\nbutton.btn-primary-positive:hover span:first-child, button.btn-primary-positive:focus span:first-child, button.btn-primary-positive.active span:first-child, button.btn-primary-positive:disabled span:first-child {\n color: rgba(227, 184, 42, 0.7);\n}\nbutton.btn-primary-positive:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-primary-challenge {\n background: transparent;\n background-color: #61f0f2;\n border: 1px solid #61f0f2;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-primary-challenge span:first-child {\n color: black;\n}\nbutton.btn-primary-challenge:hover, button.btn-primary-challenge:focus, button.btn-primary-challenge.active, button.btn-primary-challenge:disabled {\n background-color: rgba(97, 240, 242, 0.2);\n}\nbutton.btn-primary-challenge:hover span:first-child, button.btn-primary-challenge:focus span:first-child, button.btn-primary-challenge.active span:first-child, button.btn-primary-challenge:disabled span:first-child {\n color: black;\n}\nbutton.btn-primary-challenge:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-secondary {\n background: transparent;\n background-color: transparent;\n border: 1px solid #7b7b7b;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-secondary span:first-child {\n color: #f1c017;\n}\nbutton.btn-secondary:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-secondary-positive {\n background: transparent;\n background-color: transparent;\n border: 1px solid #121212;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-secondary-positive span:first-child {\n color: #e0e0e0;\n}\nbutton.btn-secondary-positive:hover, button.btn-secondary-positive:focus, button.btn-secondary-positive.active, button.btn-secondary-positive:disabled {\n background-color: rgba(18, 18, 18, 0.2);\n}\nbutton.btn-secondary-positive:hover span:first-child, button.btn-secondary-positive:focus span:first-child, button.btn-secondary-positive.active span:first-child, button.btn-secondary-positive:disabled span:first-child {\n color: rgba(224, 224, 224, 0.7);\n}\nbutton.btn-secondary-positive:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-secondary-negative {\n background: transparent;\n background-color: transparent;\n border: 1px solid #7b7b7b;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-secondary-negative span:first-child {\n color: #e0e0e0;\n}\nbutton.btn-secondary-negative:hover, button.btn-secondary-negative:focus, button.btn-secondary-negative.active, button.btn-secondary-negative:disabled {\n background-color: rgba(123, 123, 123, 0.2);\n}\nbutton.btn-secondary-negative:hover span:first-child, button.btn-secondary-negative:focus span:first-child, button.btn-secondary-negative.active span:first-child, button.btn-secondary-negative:disabled span:first-child {\n color: rgba(224, 224, 224, 0.7);\n}\nbutton.btn-secondary-negative:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-duel-off {\n background: #121212;\n background-color: #121212;\n border: 1px solid rgba(97, 240, 242, 0.5);\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-duel-off span:first-child {\n color: #ffffff;\n}\nbutton.btn-duel-off:hover, button.btn-duel-off:focus, button.btn-duel-off.active, button.btn-duel-off:disabled {\n background-color: black;\n}\nbutton.btn-duel-off:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-duel-active {\n border-radius: 4px !important;\n background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n background-color: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n border: none;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-duel-active span:first-child {\n color: #121212;\n}\nbutton.btn-duel-active:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-duel-on {\n background: radial-gradient(60.65% 30.62% at 50% 3.13%, #2a2b30 0%, #1b1c22 100%);\n background-color: #121212;\n border: 1px solid #58ffff;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-duel-on span:first-child {\n color: #ffffff;\n}\nbutton.btn-duel-on:hover, button.btn-duel-on:focus, button.btn-duel-on.active, button.btn-duel-on:disabled {\n background-color: black;\n}\nbutton.btn-duel-on:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-profile-next {\n background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n background-color: #e3b82a;\n border: 1px solid #e3b82a;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-profile-next span:first-child {\n color: #000000;\n}\nbutton.btn-profile-next:hover, button.btn-profile-next:focus, button.btn-profile-next.active, button.btn-profile-next:disabled {\n background-color: #b89318;\n}\nbutton.btn-profile-next:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton.btn-profile-back {\n background: none;\n background-color: none;\n border: 1px solid #e0e0e0;\n border-radius: 2px;\n margin: 1.5rem 0 0;\n width: 100%;\n text-transform: initial;\n cursor: pointer;\n}\nbutton.btn-profile-back span:first-child {\n color: #e0e0e0;\n}\nbutton.btn-profile-back:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.card {\n background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n box-sizing: border-box;\n box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);\n border-radius: 4px;\n padding: 16px;\n}\n.card:hover {\n background: linear-gradient(180deg, rgba(70, 71, 77, 0.7) 0%, rgba(57, 58, 63, 0.7) 100%);\n}\n.card.rich-card {\n padding: 16px;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.modal-root .MuiBackdrop-root {\n background-color: hsla(231deg, 11%, 12%, 0.85);\n}\n\ndiv.modal-paper {\n background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n width: 36rem;\n max-width: 100%;\n max-height: 90vh;\n padding: 2rem;\n box-sizing: border-box;\n box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n border-radius: 4px;\n margin: 0 0 0 13.75rem;\n align-items: center;\n color: #ffffff;\n}\n@media only screen and (max-width : 1023px) {\n div.modal-paper {\n width: 35rem;\n margin: 0;\n }\n}\n@media only screen and (max-width : 768px) {\n div.modal-paper {\n padding: 1rem 1rem 1.5rem;\n width: 85%;\n max-width: 35rem;\n margin: 0;\n }\n}\ndiv.modal-paper.no-padding {\n padding: 0;\n}\ndiv.modal-paper.blue-border {\n border: 1px solid rgba(88, 255, 255, 0.2509803922);\n}\ndiv.modal-paper.blue-light-border {\n border: 1px solid #61f0f2;\n}\ndiv.modal-paper.yellow-border {\n border: 1px solid rgba(227, 184, 42, 0.4);\n}\ndiv.modal-paper .modal-paper-close-button {\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n padding: 5px 5px;\n z-index: 10;\n}\n\ndiv.modal-paper-full-screen {\n background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n width: 100%;\n max-width: 100%;\n height: 100%;\n max-height: 100%;\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n border-radius: 4px;\n color: #ffffff;\n display: flex;\n align-items: center;\n}\ndiv.modal-paper-full-screen.dark-background {\n background: #121212;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.expansion-panel-root {\n margin: 1.2rem 0;\n color: #e0e0e0;\n background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n border-radius: 4px;\n box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);\n transition: background-color 0.6s ease;\n box-sizing: border-box;\n}\ndiv.expansion-panel-root.Mui-expanded:first-child {\n margin: 1.2rem 0;\n}\ndiv.expansion-panel-root.Mui-expanded:last-child {\n margin: 1.2rem 0;\n}\ndiv.expansion-panel-root.red-border {\n border: 1px solid #d25959;\n}\n\ndiv.expansion-panel-summary {\n padding: 0.25rem 1.2rem;\n min-height: 4rem;\n}\ndiv.expansion-panel-summary.Mui-focused {\n border-radius: 4px;\n background-color: unset;\n box-shadow: 0 0 0 1px #e0e0e0;\n}\ndiv.expansion-panel-summary.Mui-expanded {\n min-height: 4rem;\n}\ndiv.expansion-panel-summary.Mui-expanded.small {\n min-height: 3rem;\n}\ndiv.expansion-panel-summary.small {\n padding: 0 1.2rem;\n min-height: 3rem;\n}\ndiv.expansion-panel-summary.bold-text {\n font-weight: bold;\n}\n\ndiv.expansion-panel-content {\n display: flex;\n align-items: center;\n}\ndiv.expansion-panel-content.Mui-expanded {\n margin: 0.75rem 0;\n}\n\ndiv.expansion-panel-details {\n padding: 0 1.2rem 1.2rem;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\na {\n color: #deaf0e;\n}\na:visited {\n color: #deaf0e;\n}\n\na:focus {\n outline: none;\n box-shadow: inset 0 0 0 1px #e0e0e0;\n}\na:focus > div:first-child {\n box-shadow: 0 0 0 1px #e0e0e0;\n}\n\na.MuiLink-underlineHover:hover {\n text-decoration: none;\n}\n\na.MuiTypography-colorPrimary {\n color: #e0e0e0;\n}\n\n:root {\n white-space: pre-line;\n --blue: #58ffff;\n --blue40: rgba(88, 255, 255, 0.2509803922);\n --blueBackground: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n --blueRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n --blueRadialGradientTrans: radial-gradient(circle, #58ffff 0%, rgba(255, 255, 255, 0) 100%);\n --elecColor: #d87b39;\n --elecColor40: rgba(216, 123, 57, 0.4);\n --elecCompareColor: #e2bca1;\n --gasColor: #45d1b8;\n --gasColor40: rgba(69, 209, 184, 0.4);\n --gasCompareColor: #a8f7e9;\n --waterColor: #3a98ec;\n --waterColor40: rgba(58, 152, 236, 0.4);\n --waterCompareColor: #abd4fa;\n --multiColor: #e3b82a;\n --multiCompareColor: #ffd597;\n --redPrimary: #d25959;\n --greyBright: #e0e0e0;\n --greyDark: #7b7b7b;\n --textWhite: #ffffff;\n --softGrey: #a0a0a0;\n --darkLight: #25262b;\n --darkLight2: #121212;\n --textFont: Lato, sans-serif;\n --greyLinearGradientBackground: linear-gradient(180deg, #323339 0%, #25262b 100%);\n --multiColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);\n --elecColorRadialGradientTrans: radial-gradient(circle, #d87b39 0%, rgba(255, 255, 255, 0) 100%);\n --waterColorRadialGradientTrans: radial-gradient(circle, #3a98ec 0%, rgba(255, 255, 255, 0) 100%);\n --gasColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);\n --multiColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n --elecColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(158, 67, 2, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #d87b39;\n --gasColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(4, 106, 88, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #45d1b8;\n --waterColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(2, 93, 174, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #3a98ec;\n}\n\n.application {\n overflow-x: hidden;\n background-color: #121212;\n}\n\n.accordion-icon {\n color: #ffffff;\n}\n\n.loaderContainer {\n height: 80vh;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n}", ""]); diff --git a/index.html b/index.html index d07400e0a20ec9d6846f5825e513c9cffd9ffc5e..570750f0d9c26db9e4268e2f63ecc3c5fb6cbea8 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.fbf1f65c47dc10085503.js"></script><script src="app/ecolyo.cdcd255bcdeb5c5c25b7.js"></script></div></body></html> \ No newline at end of file +<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.dba9a33a322e0a4bb98e.js"></script><script src="app/ecolyo.4fa5fb5eb571bc5de1f9.js"></script></div></body></html> \ No newline at end of file diff --git a/vendors/ecolyo.fbf1f65c47dc10085503.js b/vendors/ecolyo.dba9a33a322e0a4bb98e.js similarity index 99% rename from vendors/ecolyo.fbf1f65c47dc10085503.js rename to vendors/ecolyo.dba9a33a322e0a4bb98e.js index 94600eeac13e1abccbd7fb9bda96774b1686f8ee..b14df6621add3beac5e2b142d561f12a572c8bcc 100644 --- a/vendors/ecolyo.fbf1f65c47dc10085503.js +++ b/vendors/ecolyo.dba9a33a322e0a4bb98e.js @@ -1192,15 +1192,6 @@ var Backdrop = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__["forwardRef"](fun name: 'MuiBackdrop' })(Backdrop)); -/***/ }), - -/***/ "+Jcq": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); - - /***/ }), /***/ "+JwS": @@ -7223,52 +7214,39 @@ exports.getTheme = getTheme; "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var use_sync_external_store_shim__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("at8e"); -/* harmony import */ var use_sync_external_store_shim__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(use_sync_external_store_shim__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var use_sync_external_store_shim_with_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("ejks"); -/* harmony import */ var use_sync_external_store_shim_with_selector__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(use_sync_external_store_shim_with_selector__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("9fXD"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "batch", function() { return _utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_2__["unstable_batchedUpdates"]; }); - -/* harmony import */ var _utils_batch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("TfIc"); -/* harmony import */ var _hooks_useSelector__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("M5x7"); -/* harmony import */ var _components_connect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("yNq8"); -/* harmony import */ var _exports__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("SnGl"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Provider", function() { return _exports__WEBPACK_IMPORTED_MODULE_6__["Provider"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReactReduxContext", function() { return _exports__WEBPACK_IMPORTED_MODULE_6__["ReactReduxContext"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "connect", function() { return _exports__WEBPACK_IMPORTED_MODULE_6__["connect"]; }); +/* harmony import */ var _exports__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("SnGl"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Provider", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["Provider"]; }); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useDispatch", function() { return _exports__WEBPACK_IMPORTED_MODULE_6__["useDispatch"]; }); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "connectAdvanced", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["connectAdvanced"]; }); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createDispatchHook", function() { return _exports__WEBPACK_IMPORTED_MODULE_6__["createDispatchHook"]; }); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReactReduxContext", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["ReactReduxContext"]; }); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useSelector", function() { return _exports__WEBPACK_IMPORTED_MODULE_6__["useSelector"]; }); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "connect", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["connect"]; }); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createSelectorHook", function() { return _exports__WEBPACK_IMPORTED_MODULE_6__["createSelectorHook"]; }); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useDispatch", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["useDispatch"]; }); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useStore", function() { return _exports__WEBPACK_IMPORTED_MODULE_6__["useStore"]; }); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createDispatchHook", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["createDispatchHook"]; }); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createStoreHook", function() { return _exports__WEBPACK_IMPORTED_MODULE_6__["createStoreHook"]; }); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useSelector", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["useSelector"]; }); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shallowEqual", function() { return _exports__WEBPACK_IMPORTED_MODULE_6__["shallowEqual"]; }); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createSelectorHook", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["createSelectorHook"]; }); -// The primary entry point assumes we're working with standard ReactDOM/RN, but -// older versions that do not include `useSyncExternalStore` (React 16.9 - 17.x). -// Because of that, the useSyncExternalStore compat shim is needed. +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useStore", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["useStore"]; }); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createStoreHook", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["createStoreHook"]; }); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shallowEqual", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["shallowEqual"]; }); +/* harmony import */ var _utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("9fXD"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "batch", function() { return _utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_1__["unstable_batchedUpdates"]; }); +/* harmony import */ var _utils_batch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("TfIc"); -Object(_hooks_useSelector__WEBPACK_IMPORTED_MODULE_4__["initializeUseSelector"])(use_sync_external_store_shim_with_selector__WEBPACK_IMPORTED_MODULE_1__["useSyncExternalStoreWithSelector"]); -Object(_components_connect__WEBPACK_IMPORTED_MODULE_5__["initializeConnect"])(use_sync_external_store_shim__WEBPACK_IMPORTED_MODULE_0__["useSyncExternalStore"]); // Enable batched updates in our subscriptions for use + // Enable batched updates in our subscriptions for use // with standard React renderers (ReactDOM, React Native) -Object(_utils_batch__WEBPACK_IMPORTED_MODULE_3__["setBatch"])(_utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_2__["unstable_batchedUpdates"]); - +Object(_utils_batch__WEBPACK_IMPORTED_MODULE_2__["setBatch"])(_utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_1__["unstable_batchedUpdates"]); /***/ }), @@ -14113,6 +14091,385 @@ var EnvironmentService = /*#__PURE__*/function () { /***/ }), +/***/ "/jNT": +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return connectAdvanced; }); +/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("wx14"); +/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("zLVn"); +/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("2mql"); +/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("q1tI"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("0vxD"); +/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _utils_Subscription__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("edbT"); +/* harmony import */ var _utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("V+Yl"); +/* harmony import */ var _Context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("joe6"); + + +var _excluded = ["getDisplayName", "methodName", "renderCountProp", "shouldHandleStateChanges", "storeKey", "withRef", "forwardRef", "context"], + _excluded2 = ["reactReduxForwardedRef"]; + + + + + + // Define some constant arrays just to avoid re-creating these + +var EMPTY_ARRAY = []; +var NO_SUBSCRIPTION_ARRAY = [null, null]; + +var stringifyComponent = function stringifyComponent(Comp) { + try { + return JSON.stringify(Comp); + } catch (err) { + return String(Comp); + } +}; + +function storeStateUpdatesReducer(state, action) { + var updateCount = state[1]; + return [action.payload, updateCount + 1]; +} + +function useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) { + Object(_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_6__["useIsomorphicLayoutEffect"])(function () { + return effectFunc.apply(void 0, effectArgs); + }, dependencies); +} + +function captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs) { + // We want to capture the wrapper props and child props we used for later comparisons + lastWrapperProps.current = wrapperProps; + lastChildProps.current = actualChildProps; + renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update + + if (childPropsFromStoreUpdate.current) { + childPropsFromStoreUpdate.current = null; + notifyNestedSubs(); + } +} + +function subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch) { + // If we're not subscribed to the store, nothing to do here + if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts + + var didUnsubscribe = false; + var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component + + var checkForUpdates = function checkForUpdates() { + if (didUnsubscribe) { + // Don't run stale listeners. + // Redux doesn't guarantee unsubscriptions happen until next dispatch. + return; + } + + var latestStoreState = store.getState(); + var newChildProps, error; + + try { + // Actually run the selector with the most recent store state and wrapper props + // to determine what the child props should be + newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current); + } catch (e) { + error = e; + lastThrownError = e; + } + + if (!error) { + lastThrownError = null; + } // If the child props haven't changed, nothing to do here - cascade the subscription update + + + if (newChildProps === lastChildProps.current) { + if (!renderIsScheduled.current) { + notifyNestedSubs(); + } + } else { + // Save references to the new child props. Note that we track the "child props from store update" + // as a ref instead of a useState/useReducer because we need a way to determine if that value has + // been processed. If this went into useState/useReducer, we couldn't clear out the value without + // forcing another re-render, which we don't want. + lastChildProps.current = newChildProps; + childPropsFromStoreUpdate.current = newChildProps; + renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render + + forceComponentUpdateDispatch({ + type: 'STORE_UPDATED', + payload: { + error: error + } + }); + } + }; // Actually subscribe to the nearest connected ancestor (or store) + + + subscription.onStateChange = checkForUpdates; + subscription.trySubscribe(); // Pull data from the store after first render in case the store has + // changed since we began. + + checkForUpdates(); + + var unsubscribeWrapper = function unsubscribeWrapper() { + didUnsubscribe = true; + subscription.tryUnsubscribe(); + subscription.onStateChange = null; + + if (lastThrownError) { + // It's possible that we caught an error due to a bad mapState function, but the + // parent re-rendered without this component and we're about to unmount. + // This shouldn't happen as long as we do top-down subscriptions correctly, but + // if we ever do those wrong, this throw will surface the error in our tests. + // In that case, throw the error from here so it doesn't get lost. + throw lastThrownError; + } + }; + + return unsubscribeWrapper; +} + +var initStateUpdates = function initStateUpdates() { + return [null, 0]; +}; + +function connectAdvanced( +/* + selectorFactory is a func that is responsible for returning the selector function used to + compute new props from state, props, and dispatch. For example: + export default connectAdvanced((dispatch, options) => (state, props) => ({ + thing: state.things[props.thingId], + saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)), + }))(YourComponent) + Access to dispatch is provided to the factory so selectorFactories can bind actionCreators + outside of their selector as an optimization. Options passed to connectAdvanced are passed to + the selectorFactory, along with displayName and WrappedComponent, as the second argument. + Note that selectorFactory is responsible for all caching/memoization of inbound and outbound + props. Do not use connectAdvanced directly without memoizing results between calls to your + selector, otherwise the Connect component will re-render on every state or props change. +*/ +selectorFactory, // options object: +_ref) { + if (_ref === void 0) { + _ref = {}; + } + + var _ref2 = _ref, + _ref2$getDisplayName = _ref2.getDisplayName, + getDisplayName = _ref2$getDisplayName === void 0 ? function (name) { + return "ConnectAdvanced(" + name + ")"; + } : _ref2$getDisplayName, + _ref2$methodName = _ref2.methodName, + methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName, + _ref2$renderCountProp = _ref2.renderCountProp, + renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp, + _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges, + shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta, + _ref2$storeKey = _ref2.storeKey, + storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey, + _ref2$withRef = _ref2.withRef, + withRef = _ref2$withRef === void 0 ? false : _ref2$withRef, + _ref2$forwardRef = _ref2.forwardRef, + forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef, + _ref2$context = _ref2.context, + context = _ref2$context === void 0 ? _Context__WEBPACK_IMPORTED_MODULE_7__["ReactReduxContext"] : _ref2$context, + connectOptions = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref2, _excluded); + + if (false) { var customStoreWarningMessage; } + + var Context = context; + return function wrapWithConnect(WrappedComponent) { + if (false) {} + + var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component'; + var displayName = getDisplayName(wrappedComponentName); + + var selectorFactoryOptions = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, connectOptions, { + getDisplayName: getDisplayName, + methodName: methodName, + renderCountProp: renderCountProp, + shouldHandleStateChanges: shouldHandleStateChanges, + storeKey: storeKey, + displayName: displayName, + wrappedComponentName: wrappedComponentName, + WrappedComponent: WrappedComponent + }); + + var pure = connectOptions.pure; + + function createChildSelector(store) { + return selectorFactory(store.dispatch, selectorFactoryOptions); + } // If we aren't running in "pure" mode, we don't want to memoize values. + // To avoid conditionally calling hooks, we fall back to a tiny wrapper + // that just executes the given callback immediately. + + + var usePureOnlyMemo = pure ? react__WEBPACK_IMPORTED_MODULE_3__["useMemo"] : function (callback) { + return callback(); + }; + + function ConnectFunction(props) { + var _useMemo = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { + // Distinguish between actual "data" props that were passed to the wrapper component, + // and values needed to control behavior (forwarded refs, alternate context instances). + // To maintain the wrapperProps object reference, memoize this destructuring. + var reactReduxForwardedRef = props.reactReduxForwardedRef, + wrapperProps = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded2); + + return [props.context, reactReduxForwardedRef, wrapperProps]; + }, [props]), + propsContext = _useMemo[0], + reactReduxForwardedRef = _useMemo[1], + wrapperProps = _useMemo[2]; + + var ContextToUse = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { + // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext. + // Memoize the check that determines which context instance we should use. + return propsContext && propsContext.Consumer && Object(react_is__WEBPACK_IMPORTED_MODULE_4__["isContextConsumer"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(propsContext.Consumer, null)) ? propsContext : Context; + }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available + + var contextValue = Object(react__WEBPACK_IMPORTED_MODULE_3__["useContext"])(ContextToUse); // The store _must_ exist as either a prop or in context. + // We'll check to see if it _looks_ like a Redux store first. + // This allows us to pass through a `store` prop that is just a plain value. + + var didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch); + var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store); + + if (false) {} // Based on the previous check, one of these must be true + + + var store = didStoreComeFromProps ? props.store : contextValue.store; + var childPropsSelector = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { + // The child props selector needs the store reference as an input. + // Re-create this selector whenever the store changes. + return createChildSelector(store); + }, [store]); + + var _useMemo2 = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { + if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component + // connected to the store via props shouldn't use subscription from context, or vice versa. + + // This Subscription's source should match where store came from: props vs. context. A component + // connected to the store via props shouldn't use subscription from context, or vice versa. + var subscription = Object(_utils_Subscription__WEBPACK_IMPORTED_MODULE_5__["createSubscription"])(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in + // the middle of the notification loop, where `subscription` will then be null. This can + // probably be avoided if Subscription's listeners logic is changed to not call listeners + // that have been unsubscribed in the middle of the notification loop. + + // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in + // the middle of the notification loop, where `subscription` will then be null. This can + // probably be avoided if Subscription's listeners logic is changed to not call listeners + // that have been unsubscribed in the middle of the notification loop. + var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription); + return [subscription, notifyNestedSubs]; + }, [store, didStoreComeFromProps, contextValue]), + subscription = _useMemo2[0], + notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary, + // and memoize that value to avoid unnecessary context updates. + + + var overriddenContextValue = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { + if (didStoreComeFromProps) { + // This component is directly subscribed to a store from props. + // We don't want descendants reading from this store - pass down whatever + // the existing context value is from the nearest connected ancestor. + return contextValue; + } // Otherwise, put this component's subscription instance into context, so that + // connected descendants won't update until after this component is done + + + return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, contextValue, { + subscription: subscription + }); + }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update + // causes a change to the calculated child component props (or we caught an error in mapState) + + var _useReducer = Object(react__WEBPACK_IMPORTED_MODULE_3__["useReducer"])(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates), + _useReducer$ = _useReducer[0], + previousStateUpdateResult = _useReducer$[0], + forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards + + + if (previousStateUpdateResult && previousStateUpdateResult.error) { + throw previousStateUpdateResult.error; + } // Set up refs to coordinate values between the subscription effect and the render logic + + + var lastChildProps = Object(react__WEBPACK_IMPORTED_MODULE_3__["useRef"])(); + var lastWrapperProps = Object(react__WEBPACK_IMPORTED_MODULE_3__["useRef"])(wrapperProps); + var childPropsFromStoreUpdate = Object(react__WEBPACK_IMPORTED_MODULE_3__["useRef"])(); + var renderIsScheduled = Object(react__WEBPACK_IMPORTED_MODULE_3__["useRef"])(false); + var actualChildProps = usePureOnlyMemo(function () { + // Tricky logic here: + // - This render may have been triggered by a Redux store update that produced new child props + // - However, we may have gotten new wrapper props after that + // If we have new child props, and the same wrapper props, we know we should use the new child props as-is. + // But, if we have new wrapper props, those might change the child props, so we have to recalculate things. + // So, we'll use the child props from store update only if the wrapper props are the same as last time. + if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) { + return childPropsFromStoreUpdate.current; + } // TODO We're reading the store directly in render() here. Bad idea? + // This will likely cause Bad Things (TM) to happen in Concurrent Mode. + // Note that we do this because on renders _not_ caused by store updates, we need the latest store state + // to determine what the child props should be. + + + return childPropsSelector(store.getState(), wrapperProps); + }, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns + // about useLayoutEffect in SSR, so we try to detect environment and fall back to + // just useEffect instead to avoid the warning, since neither will run anyway. + + useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs]); // Our re-subscribe logic only runs when the store/subscription setup changes + + useIsomorphicLayoutEffectWithArgs(subscribeUpdates, [shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch], [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component. + // We memoize the elements for the rendered child component as an optimization. + + var renderedWrappedComponent = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(WrappedComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, actualChildProps, { + ref: reactReduxForwardedRef + })); + }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering + // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate. + + var renderedChild = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { + if (shouldHandleStateChanges) { + // If this component is subscribed to store updates, we need to pass its own + // subscription instance down to our descendants. That means rendering the same + // Context instance, and putting a different value into the context. + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(ContextToUse.Provider, { + value: overriddenContextValue + }, renderedWrappedComponent); + } + + return renderedWrappedComponent; + }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]); + return renderedChild; + } // If we're in "pure" mode, ensure our wrapper component only re-renders when incoming props have changed. + + + var Connect = pure ? react__WEBPACK_IMPORTED_MODULE_3___default.a.memo(ConnectFunction) : ConnectFunction; + Connect.WrappedComponent = WrappedComponent; + Connect.displayName = ConnectFunction.displayName = displayName; + + if (forwardRef) { + var forwarded = react__WEBPACK_IMPORTED_MODULE_3___default.a.forwardRef(function forwardConnectRef(props, ref) { + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(Connect, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { + reactReduxForwardedRef: ref + })); + }); + forwarded.displayName = displayName; + forwarded.WrappedComponent = WrappedComponent; + return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default()(forwarded, WrappedComponent); + } + + return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default()(Connect, WrappedComponent); + }; +} + +/***/ }), + /***/ "/jZz": /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -16406,20 +16763,6 @@ function styleMaybeRemove(id, name) { }); -/***/ }), - -/***/ "0P1g": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createInvalidArgFactory", function() { return createInvalidArgFactory; }); -function createInvalidArgFactory(arg, name) { - return (dispatch, options) => { - throw new Error(`Invalid value of type ${typeof arg} for ${name} argument when connecting component ${options.wrappedComponentName}.`); - }; -} - /***/ }), /***/ "0PSK": @@ -26178,82 +26521,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = (Object(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999")); -/***/ }), - -/***/ "1kj9": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wrapMapToPropsConstant", function() { return wrapMapToPropsConstant; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDependsOnOwnProps", function() { return getDependsOnOwnProps; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wrapMapToPropsFunc", function() { return wrapMapToPropsFunc; }); -/* harmony import */ var _utils_verifyPlainObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("6dDM"); - -function wrapMapToPropsConstant(getConstant) { - return function initConstantSelector(dispatch, options) { - var constant = getConstant(dispatch, options); - - function constantSelector() { - return constant; - } - - constantSelector.dependsOnOwnProps = false; - return constantSelector; - }; -} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args -// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine -// whether mapToProps needs to be invoked when props have changed. -// -// A length of one signals that mapToProps does not depend on props from the parent component. -// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and -// therefore not reporting its length accurately.. - -function getDependsOnOwnProps(mapToProps) { - return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1; -} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction, -// this function wraps mapToProps in a proxy function which does several things: -// -// * Detects whether the mapToProps function being called depends on props, which -// is used by selectorFactory to decide if it should reinvoke on props changes. -// -// * On first call, handles mapToProps if returns another function, and treats that -// new function as the true mapToProps for subsequent calls. -// -// * On first call, verifies the first result is a plain object, in order to warn -// the developer that their mapToProps function is not returning a valid result. -// - -function wrapMapToPropsFunc(mapToProps, methodName) { - return function initProxySelector(dispatch, _ref) { - var displayName = _ref.displayName; - - var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) { - return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch); - }; // allow detectFactoryAndVerify to get ownProps - - - proxy.dependsOnOwnProps = true; - - proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) { - proxy.mapToProps = mapToProps; - proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps); - var props = proxy(stateOrDispatch, ownProps); - - if (typeof props === 'function') { - proxy.mapToProps = props; - proxy.dependsOnOwnProps = getDependsOnOwnProps(props); - props = proxy(stateOrDispatch, ownProps); - } - - if (false) {} - return props; - }; - - return proxy; - }; -} - /***/ }), /***/ "1kpM": @@ -27585,11 +27852,11 @@ function clearCachedFetchImplementation() { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return warning; }); -/** - * Prints a warning in the console if it exists. - * - * @param {String} message The warning message. - * @returns {void} +/** + * Prints a warning in the console if it exists. + * + * @param {String} message The warning message. + * @returns {void} */ function warning(message) { /* eslint-disable no-console */ @@ -27756,70 +28023,6 @@ var scheme = new Array(3).concat( /* harmony default export */ __webpack_exports__["default"] = (Object(_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); -/***/ }), - -/***/ "2ZlZ": -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! - Copyright (c) 2018 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames -*/ -/* global define */ - -(function () { - 'use strict'; - - var hasOwn = {}.hasOwnProperty; - - function classNames() { - var classes = []; - - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i]; - if (!arg) continue; - - var argType = typeof arg; - - if (argType === 'string' || argType === 'number') { - classes.push(arg); - } else if (Array.isArray(arg)) { - if (arg.length) { - var inner = classNames.apply(null, arg); - if (inner) { - classes.push(inner); - } - } - } else if (argType === 'object') { - if (arg.toString === Object.prototype.toString) { - for (var key in arg) { - if (hasOwn.call(arg, key) && arg[key]) { - classes.push(key); - } - } - } else { - classes.push(arg.toString()); - } - } - } - - return classes.join(' '); - } - - if ( true && module.exports) { - classNames.default = classNames; - module.exports = classNames; - } else if (true) { - // register as 'classnames', consistent with npm package name - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { - return classNames; - }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else {} -}()); - - /***/ }), /***/ "2ajD": @@ -31106,7 +31309,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("q1tI"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("2ZlZ"); +/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("TSYQ"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("mwIZ"); /* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_5__); @@ -32950,39 +33153,6 @@ exports.getSharingLink = getSharingLink; /***/ }), -/***/ "3TCD": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return warning; }); -/** - * Prints a warning in the console if it exists. - * - * @param {String} message The warning message. - * @returns {void} - */ -function warning(message) { - /* eslint-disable no-console */ - if (typeof console !== 'undefined' && typeof console.error === 'function') { - console.error(message); - } - /* eslint-enable no-console */ - - - try { - // This error was thrown as a convenience so that if you enable - // "break on all exceptions" in your console, - // it would pause the execution at this line. - throw new Error(message); - /* eslint-disable no-empty */ - } catch (e) {} - /* eslint-enable no-empty */ - -} - -/***/ }), - /***/ "3UD+": /***/ (function(module, exports) { @@ -43028,15 +43198,19 @@ function centroidPointRing(x, y) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapStateToPropsFactory", function() { return mapStateToPropsFactory; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMapStateToPropsIsFunction", function() { return whenMapStateToPropsIsFunction; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMapStateToPropsIsMissing", function() { return whenMapStateToPropsIsMissing; }); /* harmony import */ var _wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("JCXH"); -/* harmony import */ var _invalidArgFactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("0P1g"); - -function mapStateToPropsFactory(mapStateToProps) { - return !mapStateToProps ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__["wrapMapToPropsConstant"])(() => ({})) : typeof mapStateToProps === 'function' ? // @ts-ignore - Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__["wrapMapToPropsFunc"])(mapStateToProps, 'mapStateToProps') : Object(_invalidArgFactory__WEBPACK_IMPORTED_MODULE_1__["createInvalidArgFactory"])(mapStateToProps, 'mapStateToProps'); +function whenMapStateToPropsIsFunction(mapStateToProps) { + return typeof mapStateToProps === 'function' ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__["wrapMapToPropsFunc"])(mapStateToProps, 'mapStateToProps') : undefined; +} +function whenMapStateToPropsIsMissing(mapStateToProps) { + return !mapStateToProps ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__["wrapMapToPropsConstant"])(function () { + return {}; + }) : undefined; } +/* harmony default export */ __webpack_exports__["default"] = ([whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing]); /***/ }), @@ -48721,24 +48895,6 @@ var borders = Object(_compose__WEBPACK_IMPORTED_MODULE_1__["default"])(border, b /***/ }), -/***/ "6dDM": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return verifyPlainObject; }); -/* harmony import */ var _isPlainObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("G5XY"); -/* harmony import */ var _warning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("3TCD"); - - -function verifyPlainObject(value, displayName, methodName) { - if (!Object(_isPlainObject__WEBPACK_IMPORTED_MODULE_0__["default"])(value)) { - Object(_warning__WEBPACK_IMPORTED_MODULE_1__["default"])(methodName + "() in " + displayName + " must return a plain object. Instead received " + value + "."); - } -} - -/***/ }), - /***/ "6f8O": /***/ (function(module, exports, __webpack_require__) { @@ -49822,7 +49978,7 @@ var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA")); var _react = _interopRequireDefault(__webpack_require__("q1tI")); -var _dedupe = _interopRequireDefault(__webpack_require__("dogg")); +var _dedupe = _interopRequireDefault(__webpack_require__("A/WM")); var _useCozyDialog2 = _interopRequireDefault(__webpack_require__("mB6O")); @@ -53979,45 +54135,47 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _useStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("y4dS"); -/** - * Hook factory, which creates a `useDispatch` hook bound to a given context. - * - * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. - * @returns {Function} A `useDispatch` hook bound to the specified context. +/** + * Hook factory, which creates a `useDispatch` hook bound to a given context. + * + * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. + * @returns {Function} A `useDispatch` hook bound to the specified context. */ -function createDispatchHook(context = _components_Context__WEBPACK_IMPORTED_MODULE_0__["ReactReduxContext"]) { - const useStore = // @ts-ignore - context === _components_Context__WEBPACK_IMPORTED_MODULE_0__["ReactReduxContext"] ? _useStore__WEBPACK_IMPORTED_MODULE_1__["useStore"] : Object(_useStore__WEBPACK_IMPORTED_MODULE_1__["createStoreHook"])(context); - return function useDispatch() { - const store = useStore(); // @ts-ignore +function createDispatchHook(context) { + if (context === void 0) { + context = _components_Context__WEBPACK_IMPORTED_MODULE_0__["ReactReduxContext"]; + } + var useStore = context === _components_Context__WEBPACK_IMPORTED_MODULE_0__["ReactReduxContext"] ? _useStore__WEBPACK_IMPORTED_MODULE_1__["useStore"] : Object(_useStore__WEBPACK_IMPORTED_MODULE_1__["createStoreHook"])(context); + return function useDispatch() { + var store = useStore(); return store.dispatch; }; } -/** - * A hook to access the redux `dispatch` function. - * - * @returns {any|function} redux store's `dispatch` function - * - * @example - * - * import React, { useCallback } from 'react' - * import { useDispatch } from 'react-redux' - * - * export const CounterComponent = ({ value }) => { - * const dispatch = useDispatch() - * const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), []) - * return ( - * <div> - * <span>{value}</span> - * <button onClick={increaseCounter}>Increase counter</button> - * </div> - * ) - * } +/** + * A hook to access the redux `dispatch` function. + * + * @returns {any|function} redux store's `dispatch` function + * + * @example + * + * import React, { useCallback } from 'react' + * import { useDispatch } from 'react-redux' + * + * export const CounterComponent = ({ value }) => { + * const dispatch = useDispatch() + * const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), []) + * return ( + * <div> + * <span>{value}</span> + * <button onClick={increaseCounter}>Increase counter</button> + * </div> + * ) + * } */ -const useDispatch = /*#__PURE__*/createDispatchHook(); +var useDispatch = /*#__PURE__*/createDispatchHook(); /***/ }), @@ -61368,168 +61526,6 @@ var html = parser("text/html"); var svg = parser("image/svg+xml"); -/***/ }), - -/***/ "8n2A": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createSelectorHook", function() { return createSelectorHook; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useSelector", function() { return useSelector; }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("q1tI"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _useReduxContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("dewd"); -/* harmony import */ var _utils_Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("qQVc"); -/* harmony import */ var _utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("hCSu"); -/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("lPiA"); - - - - - - -var refEquality = function refEquality(a, b) { - return a === b; -}; - -function useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub) { - var _useReducer = Object(react__WEBPACK_IMPORTED_MODULE_0__["useReducer"])(function (s) { - return s + 1; - }, 0), - forceRender = _useReducer[1]; - - var subscription = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(function () { - return Object(_utils_Subscription__WEBPACK_IMPORTED_MODULE_2__["createSubscription"])(store, contextSub); - }, [store, contextSub]); - var latestSubscriptionCallbackError = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])(); - var latestSelector = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])(); - var latestStoreState = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])(); - var latestSelectedState = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])(); - var storeState = store.getState(); - var selectedState; - - try { - if (selector !== latestSelector.current || storeState !== latestStoreState.current || latestSubscriptionCallbackError.current) { - var newSelectedState = selector(storeState); // ensure latest selected state is reused so that a custom equality function can result in identical references - - if (latestSelectedState.current === undefined || !equalityFn(newSelectedState, latestSelectedState.current)) { - selectedState = newSelectedState; - } else { - selectedState = latestSelectedState.current; - } - } else { - selectedState = latestSelectedState.current; - } - } catch (err) { - if (latestSubscriptionCallbackError.current) { - err.message += "\nThe error may be correlated with this previous error:\n" + latestSubscriptionCallbackError.current.stack + "\n\n"; - } - - throw err; - } - - Object(_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__["useIsomorphicLayoutEffect"])(function () { - latestSelector.current = selector; - latestStoreState.current = storeState; - latestSelectedState.current = selectedState; - latestSubscriptionCallbackError.current = undefined; - }); - Object(_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__["useIsomorphicLayoutEffect"])(function () { - function checkForUpdates() { - try { - var newStoreState = store.getState(); // Avoid calling selector multiple times if the store's state has not changed - - if (newStoreState === latestStoreState.current) { - return; - } - - var _newSelectedState = latestSelector.current(newStoreState); - - if (equalityFn(_newSelectedState, latestSelectedState.current)) { - return; - } - - latestSelectedState.current = _newSelectedState; - latestStoreState.current = newStoreState; - } catch (err) { - // we ignore all errors here, since when the component - // is re-rendered, the selectors are called again, and - // will throw again, if neither props nor store state - // changed - latestSubscriptionCallbackError.current = err; - } - - forceRender(); - } - - subscription.onStateChange = checkForUpdates; - subscription.trySubscribe(); - checkForUpdates(); - return function () { - return subscription.tryUnsubscribe(); - }; - }, [store, subscription]); - return selectedState; -} -/** - * Hook factory, which creates a `useSelector` hook bound to a given context. - * - * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. - * @returns {Function} A `useSelector` hook bound to the specified context. - */ - - -function createSelectorHook(context) { - if (context === void 0) { - context = _components_Context__WEBPACK_IMPORTED_MODULE_4__["ReactReduxContext"]; - } - - var useReduxContext = context === _components_Context__WEBPACK_IMPORTED_MODULE_4__["ReactReduxContext"] ? _useReduxContext__WEBPACK_IMPORTED_MODULE_1__["useReduxContext"] : function () { - return Object(react__WEBPACK_IMPORTED_MODULE_0__["useContext"])(context); - }; - return function useSelector(selector, equalityFn) { - if (equalityFn === void 0) { - equalityFn = refEquality; - } - - if (false) {} - - var _useReduxContext = useReduxContext(), - store = _useReduxContext.store, - contextSub = _useReduxContext.subscription; - - var selectedState = useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub); - Object(react__WEBPACK_IMPORTED_MODULE_0__["useDebugValue"])(selectedState); - return selectedState; - }; -} -/** - * A hook to access the redux store's state. This hook takes a selector function - * as an argument. The selector is called with the store state. - * - * This hook takes an optional equality comparison function as the second parameter - * that allows you to customize the way the selected state is compared to determine - * whether the component needs to be re-rendered. - * - * @param {Function} selector the selector function - * @param {Function=} equalityFn the function that will be used to determine equality - * - * @returns {any} the selected state - * - * @example - * - * import React from 'react' - * import { useSelector } from 'react-redux' - * - * export const CounterComponent = () => { - * const counter = useSelector(state => state.counter) - * return <div>{counter}</div> - * } - */ - -var useSelector = /*#__PURE__*/createSelectorHook(); - /***/ }), /***/ "8nOX": @@ -65560,48 +65556,6 @@ __webpack_require__.r(__webpack_exports__); }); -/***/ }), - -/***/ "9cub": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _exports__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("Qajp"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Provider", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["Provider"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "connectAdvanced", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["connectAdvanced"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReactReduxContext", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["ReactReduxContext"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "connect", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["connect"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useDispatch", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["useDispatch"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createDispatchHook", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["createDispatchHook"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useSelector", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["useSelector"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createSelectorHook", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["createSelectorHook"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useStore", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["useStore"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createStoreHook", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["createStoreHook"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shallowEqual", function() { return _exports__WEBPACK_IMPORTED_MODULE_0__["shallowEqual"]; }); - -/* harmony import */ var _utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("OrTd"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "batch", function() { return _utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_1__["unstable_batchedUpdates"]; }); - -/* harmony import */ var _utils_batch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("SDKn"); - - - // Enable batched updates in our subscriptions for use -// with standard React renderers (ReactDOM, React Native) - -Object(_utils_batch__WEBPACK_IMPORTED_MODULE_2__["setBatch"])(_utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_1__["unstable_batchedUpdates"]); - - /***/ }), /***/ "9d03": @@ -65770,6 +65724,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_0__); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unstable_batchedUpdates", function() { return react_dom__WEBPACK_IMPORTED_MODULE_0__["unstable_batchedUpdates"]; }); +/* eslint-disable import/no-unresolved */ /***/ }), @@ -68694,6 +68649,126 @@ function getThemeProps(params) { return props; } +/***/ }), + +/***/ "A/WM": +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + Copyright (c) 2018 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ +/* global define */ + +(function () { + 'use strict'; + + var classNames = (function () { + // don't inherit from Object so we can skip hasOwnProperty check later + // http://stackoverflow.com/questions/15518328/creating-js-object-with-object-createnull#answer-21079232 + function StorageObject() {} + StorageObject.prototype = Object.create(null); + + function _parseArray (resultSet, array) { + var length = array.length; + + for (var i = 0; i < length; ++i) { + _parse(resultSet, array[i]); + } + } + + var hasOwn = {}.hasOwnProperty; + + function _parseNumber (resultSet, num) { + resultSet[num] = true; + } + + function _parseObject (resultSet, object) { + if (object.toString === Object.prototype.toString) { + for (var k in object) { + if (hasOwn.call(object, k)) { + // set value to false instead of deleting it to avoid changing object structure + // https://www.smashingmagazine.com/2012/11/writing-fast-memory-efficient-javascript/#de-referencing-misconceptions + resultSet[k] = !!object[k]; + } + } + } else { + resultSet[object.toString()] = true; + } + } + + var SPACE = /\s+/; + function _parseString (resultSet, str) { + var array = str.split(SPACE); + var length = array.length; + + for (var i = 0; i < length; ++i) { + resultSet[array[i]] = true; + } + } + + function _parse (resultSet, arg) { + if (!arg) return; + var argType = typeof arg; + + // 'foo bar' + if (argType === 'string') { + _parseString(resultSet, arg); + + // ['foo', 'bar', ...] + } else if (Array.isArray(arg)) { + _parseArray(resultSet, arg); + + // { 'foo': true, ... } + } else if (argType === 'object') { + _parseObject(resultSet, arg); + + // '130' + } else if (argType === 'number') { + _parseNumber(resultSet, arg); + } + } + + function _classNames () { + // don't leak arguments + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var len = arguments.length; + var args = Array(len); + for (var i = 0; i < len; i++) { + args[i] = arguments[i]; + } + + var classSet = new StorageObject(); + _parseArray(classSet, args); + + var list = []; + + for (var k in classSet) { + if (classSet[k]) { + list.push(k) + } + } + + return list.join(' '); + } + + return _classNames; + })(); + + if ( true && module.exports) { + classNames.default = classNames; + module.exports = classNames; + } else if (true) { + // register as 'classnames', consistent with npm package name + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { + return classNames; + }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else {} +}()); + + /***/ }), /***/ "A204": @@ -69646,26 +69721,6 @@ function baseKeys(object) { module.exports = baseKeys; -/***/ }), - -/***/ "AB4A": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * @license React - * use-sync-external-store-shim/with-selector.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -var h=__webpack_require__("q1tI"),n=__webpack_require__("at8e");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q="function"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue; -exports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]); -u(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d}; - - /***/ }), /***/ "ABe8": @@ -76567,7 +76622,7 @@ var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA")); var _react = _interopRequireWildcard(__webpack_require__("q1tI")); -var _classnames = _interopRequireDefault(__webpack_require__("d2Ux")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); var _omit = _interopRequireDefault(__webpack_require__("Puqe")); @@ -77871,62 +77926,6 @@ function getGlobalSingleton(name, creator, obj) { /***/ }), -/***/ "Bj2+": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createStoreHook", function() { return createStoreHook; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useStore", function() { return useStore; }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("q1tI"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("lPiA"); -/* harmony import */ var _useReduxContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("dewd"); - - - -/** - * Hook factory, which creates a `useStore` hook bound to a given context. - * - * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. - * @returns {Function} A `useStore` hook bound to the specified context. - */ - -function createStoreHook(context) { - if (context === void 0) { - context = _components_Context__WEBPACK_IMPORTED_MODULE_1__["ReactReduxContext"]; - } - - var useReduxContext = context === _components_Context__WEBPACK_IMPORTED_MODULE_1__["ReactReduxContext"] ? _useReduxContext__WEBPACK_IMPORTED_MODULE_2__["useReduxContext"] : function () { - return Object(react__WEBPACK_IMPORTED_MODULE_0__["useContext"])(context); - }; - return function useStore() { - var _useReduxContext = useReduxContext(), - store = _useReduxContext.store; - - return store; - }; -} -/** - * A hook to access the redux store. - * - * @returns {any} the redux store - * - * @example - * - * import React from 'react' - * import { useStore } from 'react-redux' - * - * export const ExampleComponent = () => { - * const store = useStore() - * return <div>{store.getState()}</div> - * } - */ - -var useStore = /*#__PURE__*/createStoreHook(); - -/***/ }), - /***/ "BjbT": /***/ (function(module, exports, __webpack_require__) { @@ -86240,8 +86239,7 @@ function getNumberOfUrlSegments(url) { /***/ (function(module, exports, __webpack_require__) { "use strict"; -/** - * @license React +/** @license React v17.0.2 * react-is.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. @@ -86249,11 +86247,12 @@ function getNumberOfUrlSegments(url) { * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var b=Symbol.for("react.element"),c=Symbol.for("react.portal"),d=Symbol.for("react.fragment"),e=Symbol.for("react.strict_mode"),f=Symbol.for("react.profiler"),g=Symbol.for("react.provider"),h=Symbol.for("react.context"),k=Symbol.for("react.server_context"),l=Symbol.for("react.forward_ref"),m=Symbol.for("react.suspense"),n=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),q=Symbol.for("react.lazy"),t=Symbol.for("react.offscreen"),u;u=Symbol.for("react.module.reference"); -function v(a){if("object"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m; -exports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p}; -exports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n}; -exports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||"object"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v; +var b=60103,c=60106,d=60107,e=60108,f=60114,g=60109,h=60110,k=60112,l=60113,m=60120,n=60115,p=60116,q=60121,r=60122,u=60117,v=60129,w=60131; +if("function"===typeof Symbol&&Symbol.for){var x=Symbol.for;b=x("react.element");c=x("react.portal");d=x("react.fragment");e=x("react.strict_mode");f=x("react.profiler");g=x("react.provider");h=x("react.context");k=x("react.forward_ref");l=x("react.suspense");m=x("react.suspense_list");n=x("react.memo");p=x("react.lazy");q=x("react.block");r=x("react.server.block");u=x("react.fundamental");v=x("react.debug_trace_mode");w=x("react.legacy_hidden")} +function y(a){if("object"===typeof a&&null!==a){var t=a.$$typeof;switch(t){case b:switch(a=a.type,a){case d:case f:case e:case l:case m:return a;default:switch(a=a&&a.$$typeof,a){case h:case k:case p:case n:case g:return a;default:return t}}case c:return t}}}var z=g,A=b,B=k,C=d,D=p,E=n,F=c,G=f,H=e,I=l;exports.ContextConsumer=h;exports.ContextProvider=z;exports.Element=A;exports.ForwardRef=B;exports.Fragment=C;exports.Lazy=D;exports.Memo=E;exports.Portal=F;exports.Profiler=G;exports.StrictMode=H; +exports.Suspense=I;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return y(a)===h};exports.isContextProvider=function(a){return y(a)===g};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return y(a)===k};exports.isFragment=function(a){return y(a)===d};exports.isLazy=function(a){return y(a)===p};exports.isMemo=function(a){return y(a)===n}; +exports.isPortal=function(a){return y(a)===c};exports.isProfiler=function(a){return y(a)===f};exports.isStrictMode=function(a){return y(a)===e};exports.isSuspense=function(a){return y(a)===l};exports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===d||a===f||a===v||a===e||a===l||a===m||a===w||"object"===typeof a&&null!==a&&(a.$$typeof===p||a.$$typeof===n||a.$$typeof===g||a.$$typeof===h||a.$$typeof===k||a.$$typeof===u||a.$$typeof===q||a[0]===r)?!0:!1}; +exports.typeOf=y; /***/ }), @@ -86600,385 +86599,6 @@ exports.default = _default; /***/ }), -/***/ "DZyx": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return connectAdvanced; }); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("wx14"); -/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("zLVn"); -/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("2mql"); -/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("q1tI"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("zMbt"); -/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _utils_Subscription__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("qQVc"); -/* harmony import */ var _utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("hCSu"); -/* harmony import */ var _Context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("lPiA"); - - -var _excluded = ["getDisplayName", "methodName", "renderCountProp", "shouldHandleStateChanges", "storeKey", "withRef", "forwardRef", "context"], - _excluded2 = ["reactReduxForwardedRef"]; - - - - - - // Define some constant arrays just to avoid re-creating these - -var EMPTY_ARRAY = []; -var NO_SUBSCRIPTION_ARRAY = [null, null]; - -var stringifyComponent = function stringifyComponent(Comp) { - try { - return JSON.stringify(Comp); - } catch (err) { - return String(Comp); - } -}; - -function storeStateUpdatesReducer(state, action) { - var updateCount = state[1]; - return [action.payload, updateCount + 1]; -} - -function useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) { - Object(_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_6__["useIsomorphicLayoutEffect"])(function () { - return effectFunc.apply(void 0, effectArgs); - }, dependencies); -} - -function captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs) { - // We want to capture the wrapper props and child props we used for later comparisons - lastWrapperProps.current = wrapperProps; - lastChildProps.current = actualChildProps; - renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update - - if (childPropsFromStoreUpdate.current) { - childPropsFromStoreUpdate.current = null; - notifyNestedSubs(); - } -} - -function subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch) { - // If we're not subscribed to the store, nothing to do here - if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts - - var didUnsubscribe = false; - var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component - - var checkForUpdates = function checkForUpdates() { - if (didUnsubscribe) { - // Don't run stale listeners. - // Redux doesn't guarantee unsubscriptions happen until next dispatch. - return; - } - - var latestStoreState = store.getState(); - var newChildProps, error; - - try { - // Actually run the selector with the most recent store state and wrapper props - // to determine what the child props should be - newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current); - } catch (e) { - error = e; - lastThrownError = e; - } - - if (!error) { - lastThrownError = null; - } // If the child props haven't changed, nothing to do here - cascade the subscription update - - - if (newChildProps === lastChildProps.current) { - if (!renderIsScheduled.current) { - notifyNestedSubs(); - } - } else { - // Save references to the new child props. Note that we track the "child props from store update" - // as a ref instead of a useState/useReducer because we need a way to determine if that value has - // been processed. If this went into useState/useReducer, we couldn't clear out the value without - // forcing another re-render, which we don't want. - lastChildProps.current = newChildProps; - childPropsFromStoreUpdate.current = newChildProps; - renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render - - forceComponentUpdateDispatch({ - type: 'STORE_UPDATED', - payload: { - error: error - } - }); - } - }; // Actually subscribe to the nearest connected ancestor (or store) - - - subscription.onStateChange = checkForUpdates; - subscription.trySubscribe(); // Pull data from the store after first render in case the store has - // changed since we began. - - checkForUpdates(); - - var unsubscribeWrapper = function unsubscribeWrapper() { - didUnsubscribe = true; - subscription.tryUnsubscribe(); - subscription.onStateChange = null; - - if (lastThrownError) { - // It's possible that we caught an error due to a bad mapState function, but the - // parent re-rendered without this component and we're about to unmount. - // This shouldn't happen as long as we do top-down subscriptions correctly, but - // if we ever do those wrong, this throw will surface the error in our tests. - // In that case, throw the error from here so it doesn't get lost. - throw lastThrownError; - } - }; - - return unsubscribeWrapper; -} - -var initStateUpdates = function initStateUpdates() { - return [null, 0]; -}; - -function connectAdvanced( -/* - selectorFactory is a func that is responsible for returning the selector function used to - compute new props from state, props, and dispatch. For example: - export default connectAdvanced((dispatch, options) => (state, props) => ({ - thing: state.things[props.thingId], - saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)), - }))(YourComponent) - Access to dispatch is provided to the factory so selectorFactories can bind actionCreators - outside of their selector as an optimization. Options passed to connectAdvanced are passed to - the selectorFactory, along with displayName and WrappedComponent, as the second argument. - Note that selectorFactory is responsible for all caching/memoization of inbound and outbound - props. Do not use connectAdvanced directly without memoizing results between calls to your - selector, otherwise the Connect component will re-render on every state or props change. -*/ -selectorFactory, // options object: -_ref) { - if (_ref === void 0) { - _ref = {}; - } - - var _ref2 = _ref, - _ref2$getDisplayName = _ref2.getDisplayName, - getDisplayName = _ref2$getDisplayName === void 0 ? function (name) { - return "ConnectAdvanced(" + name + ")"; - } : _ref2$getDisplayName, - _ref2$methodName = _ref2.methodName, - methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName, - _ref2$renderCountProp = _ref2.renderCountProp, - renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp, - _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges, - shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta, - _ref2$storeKey = _ref2.storeKey, - storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey, - _ref2$withRef = _ref2.withRef, - withRef = _ref2$withRef === void 0 ? false : _ref2$withRef, - _ref2$forwardRef = _ref2.forwardRef, - forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef, - _ref2$context = _ref2.context, - context = _ref2$context === void 0 ? _Context__WEBPACK_IMPORTED_MODULE_7__["ReactReduxContext"] : _ref2$context, - connectOptions = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref2, _excluded); - - if (false) { var customStoreWarningMessage; } - - var Context = context; - return function wrapWithConnect(WrappedComponent) { - if (false) {} - - var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component'; - var displayName = getDisplayName(wrappedComponentName); - - var selectorFactoryOptions = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, connectOptions, { - getDisplayName: getDisplayName, - methodName: methodName, - renderCountProp: renderCountProp, - shouldHandleStateChanges: shouldHandleStateChanges, - storeKey: storeKey, - displayName: displayName, - wrappedComponentName: wrappedComponentName, - WrappedComponent: WrappedComponent - }); - - var pure = connectOptions.pure; - - function createChildSelector(store) { - return selectorFactory(store.dispatch, selectorFactoryOptions); - } // If we aren't running in "pure" mode, we don't want to memoize values. - // To avoid conditionally calling hooks, we fall back to a tiny wrapper - // that just executes the given callback immediately. - - - var usePureOnlyMemo = pure ? react__WEBPACK_IMPORTED_MODULE_3__["useMemo"] : function (callback) { - return callback(); - }; - - function ConnectFunction(props) { - var _useMemo = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { - // Distinguish between actual "data" props that were passed to the wrapper component, - // and values needed to control behavior (forwarded refs, alternate context instances). - // To maintain the wrapperProps object reference, memoize this destructuring. - var reactReduxForwardedRef = props.reactReduxForwardedRef, - wrapperProps = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded2); - - return [props.context, reactReduxForwardedRef, wrapperProps]; - }, [props]), - propsContext = _useMemo[0], - reactReduxForwardedRef = _useMemo[1], - wrapperProps = _useMemo[2]; - - var ContextToUse = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { - // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext. - // Memoize the check that determines which context instance we should use. - return propsContext && propsContext.Consumer && Object(react_is__WEBPACK_IMPORTED_MODULE_4__["isContextConsumer"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(propsContext.Consumer, null)) ? propsContext : Context; - }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available - - var contextValue = Object(react__WEBPACK_IMPORTED_MODULE_3__["useContext"])(ContextToUse); // The store _must_ exist as either a prop or in context. - // We'll check to see if it _looks_ like a Redux store first. - // This allows us to pass through a `store` prop that is just a plain value. - - var didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch); - var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store); - - if (false) {} // Based on the previous check, one of these must be true - - - var store = didStoreComeFromProps ? props.store : contextValue.store; - var childPropsSelector = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { - // The child props selector needs the store reference as an input. - // Re-create this selector whenever the store changes. - return createChildSelector(store); - }, [store]); - - var _useMemo2 = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { - if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component - // connected to the store via props shouldn't use subscription from context, or vice versa. - - // This Subscription's source should match where store came from: props vs. context. A component - // connected to the store via props shouldn't use subscription from context, or vice versa. - var subscription = Object(_utils_Subscription__WEBPACK_IMPORTED_MODULE_5__["createSubscription"])(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in - // the middle of the notification loop, where `subscription` will then be null. This can - // probably be avoided if Subscription's listeners logic is changed to not call listeners - // that have been unsubscribed in the middle of the notification loop. - - // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in - // the middle of the notification loop, where `subscription` will then be null. This can - // probably be avoided if Subscription's listeners logic is changed to not call listeners - // that have been unsubscribed in the middle of the notification loop. - var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription); - return [subscription, notifyNestedSubs]; - }, [store, didStoreComeFromProps, contextValue]), - subscription = _useMemo2[0], - notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary, - // and memoize that value to avoid unnecessary context updates. - - - var overriddenContextValue = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { - if (didStoreComeFromProps) { - // This component is directly subscribed to a store from props. - // We don't want descendants reading from this store - pass down whatever - // the existing context value is from the nearest connected ancestor. - return contextValue; - } // Otherwise, put this component's subscription instance into context, so that - // connected descendants won't update until after this component is done - - - return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, contextValue, { - subscription: subscription - }); - }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update - // causes a change to the calculated child component props (or we caught an error in mapState) - - var _useReducer = Object(react__WEBPACK_IMPORTED_MODULE_3__["useReducer"])(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates), - _useReducer$ = _useReducer[0], - previousStateUpdateResult = _useReducer$[0], - forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards - - - if (previousStateUpdateResult && previousStateUpdateResult.error) { - throw previousStateUpdateResult.error; - } // Set up refs to coordinate values between the subscription effect and the render logic - - - var lastChildProps = Object(react__WEBPACK_IMPORTED_MODULE_3__["useRef"])(); - var lastWrapperProps = Object(react__WEBPACK_IMPORTED_MODULE_3__["useRef"])(wrapperProps); - var childPropsFromStoreUpdate = Object(react__WEBPACK_IMPORTED_MODULE_3__["useRef"])(); - var renderIsScheduled = Object(react__WEBPACK_IMPORTED_MODULE_3__["useRef"])(false); - var actualChildProps = usePureOnlyMemo(function () { - // Tricky logic here: - // - This render may have been triggered by a Redux store update that produced new child props - // - However, we may have gotten new wrapper props after that - // If we have new child props, and the same wrapper props, we know we should use the new child props as-is. - // But, if we have new wrapper props, those might change the child props, so we have to recalculate things. - // So, we'll use the child props from store update only if the wrapper props are the same as last time. - if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) { - return childPropsFromStoreUpdate.current; - } // TODO We're reading the store directly in render() here. Bad idea? - // This will likely cause Bad Things (TM) to happen in Concurrent Mode. - // Note that we do this because on renders _not_ caused by store updates, we need the latest store state - // to determine what the child props should be. - - - return childPropsSelector(store.getState(), wrapperProps); - }, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns - // about useLayoutEffect in SSR, so we try to detect environment and fall back to - // just useEffect instead to avoid the warning, since neither will run anyway. - - useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs]); // Our re-subscribe logic only runs when the store/subscription setup changes - - useIsomorphicLayoutEffectWithArgs(subscribeUpdates, [shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch], [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component. - // We memoize the elements for the rendered child component as an optimization. - - var renderedWrappedComponent = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(WrappedComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, actualChildProps, { - ref: reactReduxForwardedRef - })); - }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering - // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate. - - var renderedChild = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(function () { - if (shouldHandleStateChanges) { - // If this component is subscribed to store updates, we need to pass its own - // subscription instance down to our descendants. That means rendering the same - // Context instance, and putting a different value into the context. - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(ContextToUse.Provider, { - value: overriddenContextValue - }, renderedWrappedComponent); - } - - return renderedWrappedComponent; - }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]); - return renderedChild; - } // If we're in "pure" mode, ensure our wrapper component only re-renders when incoming props have changed. - - - var Connect = pure ? react__WEBPACK_IMPORTED_MODULE_3___default.a.memo(ConnectFunction) : ConnectFunction; - Connect.WrappedComponent = WrappedComponent; - Connect.displayName = ConnectFunction.displayName = displayName; - - if (forwardRef) { - var forwarded = react__WEBPACK_IMPORTED_MODULE_3___default.a.forwardRef(function forwardConnectRef(props, ref) { - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(Connect, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { - reactReduxForwardedRef: ref - })); - }); - forwarded.displayName = displayName; - forwarded.WrappedComponent = WrappedComponent; - return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default()(forwarded, WrappedComponent); - } - - return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default()(Connect, WrappedComponent); - }; -} - -/***/ }), - /***/ "DbRV": /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -93913,20 +93533,20 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_warning__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("2V/z"); -function verify(selector, methodName) { +function verify(selector, methodName, displayName) { if (!selector) { - throw new Error(`Unexpected value for ${methodName} in connect.`); + throw new Error("Unexpected value for " + methodName + " in " + displayName + "."); } else if (methodName === 'mapStateToProps' || methodName === 'mapDispatchToProps') { if (!Object.prototype.hasOwnProperty.call(selector, 'dependsOnOwnProps')) { - Object(_utils_warning__WEBPACK_IMPORTED_MODULE_0__["default"])(`The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`); + Object(_utils_warning__WEBPACK_IMPORTED_MODULE_0__["default"])("The selector for " + methodName + " of " + displayName + " did not specify a value for dependsOnOwnProps."); } } } -function verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps) { - verify(mapStateToProps, 'mapStateToProps'); - verify(mapDispatchToProps, 'mapDispatchToProps'); - verify(mergeProps, 'mergeProps'); +function verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, displayName) { + verify(mapStateToProps, 'mapStateToProps', displayName); + verify(mapDispatchToProps, 'mapDispatchToProps', displayName); + verify(mergeProps, 'mergeProps', displayName); } /***/ }), @@ -95395,37 +95015,33 @@ exports.f = __webpack_require__("nh4g") ? gOPD : function getOwnPropertyDescript __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("q1tI"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _Context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("joe6"); -/* harmony import */ var _utils_Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("edbT"); -/* harmony import */ var _utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("V+Yl"); +/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("17x9"); +/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _Context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("joe6"); +/* harmony import */ var _utils_Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("edbT"); +/* harmony import */ var _utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("V+Yl"); -function Provider({ - store, - context, - children, - serverState, - stabilityCheck = 'once', - noopCheck = 'once' -}) { - const contextValue = react__WEBPACK_IMPORTED_MODULE_0__["useMemo"](() => { - const subscription = Object(_utils_Subscription__WEBPACK_IMPORTED_MODULE_2__["createSubscription"])(store); + +function Provider(_ref) { + var store = _ref.store, + context = _ref.context, + children = _ref.children; + var contextValue = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(function () { + var subscription = Object(_utils_Subscription__WEBPACK_IMPORTED_MODULE_3__["createSubscription"])(store); return { - store, - subscription, - getServerState: serverState ? () => serverState : undefined, - stabilityCheck, - noopCheck + store: store, + subscription: subscription }; - }, [store, serverState, stabilityCheck, noopCheck]); - const previousState = react__WEBPACK_IMPORTED_MODULE_0__["useMemo"](() => store.getState(), [store]); - Object(_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__["useIsomorphicLayoutEffect"])(() => { - const { - subscription - } = contextValue; + }, [store]); + var previousState = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(function () { + return store.getState(); + }, [store]); + Object(_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_4__["useIsomorphicLayoutEffect"])(function () { + var subscription = contextValue.subscription; subscription.onStateChange = subscription.notifyNestedSubs; subscription.trySubscribe(); @@ -95433,18 +95049,19 @@ function Provider({ subscription.notifyNestedSubs(); } - return () => { + return function () { subscription.tryUnsubscribe(); - subscription.onStateChange = undefined; + subscription.onStateChange = null; }; }, [contextValue, previousState]); - const Context = context || _Context__WEBPACK_IMPORTED_MODULE_1__["ReactReduxContext"]; // @ts-ignore 'AnyAction' is assignable to the constraint of type 'A', but 'A' could be instantiated with a different subtype - - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["createElement"](Context.Provider, { + var Context = context || _Context__WEBPACK_IMPORTED_MODULE_2__["ReactReduxContext"]; + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Context.Provider, { value: contextValue }, children); } +if (false) {} + /* harmony default export */ __webpack_exports__["default"] = (Provider); /***/ }), @@ -110279,7 +109896,7 @@ var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA")); var _react = __webpack_require__("q1tI"); -var _reactRedux = __webpack_require__("9cub"); +var _reactRedux = __webpack_require__("/MKj"); var _get = _interopRequireDefault(__webpack_require__("mwIZ")); @@ -111875,31 +111492,6 @@ var createStructuredSelector = function createStructuredSelector(selectors, sele /***/ }), -/***/ "G5XY": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return isPlainObject; }); -/** - * @param {any} obj The object to inspect. - * @returns {boolean} True if the argument appears to be a plain object. - */ -function isPlainObject(obj) { - if (typeof obj !== 'object' || obj === null) return false; - var proto = Object.getPrototypeOf(obj); - if (proto === null) return true; - var baseProto = proto; - - while (Object.getPrototypeOf(baseProto) !== null) { - baseProto = Object.getPrototypeOf(baseProto); - } - - return proto === baseProto; -} - -/***/ }), - /***/ "G6+r": /***/ (function(module, exports, __webpack_require__) { @@ -113558,7 +113150,7 @@ var _extends2 = _interopRequireDefault(__webpack_require__("pVnL")); var _react = _interopRequireDefault(__webpack_require__("q1tI")); -var _classnames = _interopRequireDefault(__webpack_require__("d2Ux")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); var _useCozyDialog2 = _interopRequireDefault(__webpack_require__("mB6O")); @@ -115108,11 +114700,11 @@ function shallowEqual(objA, objB) { return false; } - const keysA = Object.keys(objA); - const keysB = Object.keys(objB); + var keysA = Object.keys(objA); + var keysB = Object.keys(objB); if (keysA.length !== keysB.length) return false; - for (let i = 0; i < keysA.length; i++) { + for (var i = 0; i < keysA.length; i++) { if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) { return false; } @@ -131853,14 +131445,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wrapMapToPropsFunc", function() { return wrapMapToPropsFunc; }); /* harmony import */ var _utils_verifyPlainObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("TLKv"); -function wrapMapToPropsConstant( // * Note: -// It seems that the dispatch argument -// could be a dispatch function in some cases (ex: whenMapDispatchToPropsIsMissing) -// and a state object in some others (ex: whenMapStateToPropsIsMissing) -// eslint-disable-next-line no-unused-vars -getConstant) { - return function initConstantSelector(dispatch) { - const constant = getConstant(dispatch); +function wrapMapToPropsConstant(getConstant) { + return function initConstantSelector(dispatch, options) { + var constant = getConstant(dispatch, options); function constantSelector() { return constant; @@ -131876,10 +131463,9 @@ getConstant) { // A length of one signals that mapToProps does not depend on props from the parent component. // A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and // therefore not reporting its length accurately.. -// TODO Can this get pulled out so that we can subscribe directly to the store if we don't need ownProps? function getDependsOnOwnProps(mapToProps) { - return mapToProps.dependsOnOwnProps ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1; + return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1; } // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction, // this function wraps mapToProps in a proxy function which does several things: // @@ -131894,11 +131480,11 @@ function getDependsOnOwnProps(mapToProps) { // function wrapMapToPropsFunc(mapToProps, methodName) { - return function initProxySelector(dispatch, { - displayName - }) { - const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) { - return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch, undefined); + return function initProxySelector(dispatch, _ref) { + var displayName = _ref.displayName; + + var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) { + return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch); }; // allow detectFactoryAndVerify to get ownProps @@ -131907,7 +131493,7 @@ function wrapMapToPropsFunc(mapToProps, methodName) { proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) { proxy.mapToProps = mapToProps; proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps); - let props = proxy(stateOrDispatch, ownProps); + var props = proxy(stateOrDispatch, ownProps); if (typeof props === 'function') { proxy.mapToProps = props; @@ -133064,7 +132650,7 @@ var _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__("QILm var _react = _interopRequireDefault(__webpack_require__("q1tI")); -var _classnames = _interopRequireDefault(__webpack_require__("d2Ux")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); var _propTypes = _interopRequireDefault(__webpack_require__("17x9")); @@ -163744,7 +163330,7 @@ var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA")); var _react = _interopRequireDefault(__webpack_require__("q1tI")); -var _classnames = _interopRequireDefault(__webpack_require__("d2Ux")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); var _propTypes = _interopRequireDefault(__webpack_require__("17x9")); @@ -167155,20 +166741,29 @@ module.exports = isSameISOYear "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapDispatchToPropsFactory", function() { return mapDispatchToPropsFactory; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMapDispatchToPropsIsFunction", function() { return whenMapDispatchToPropsIsFunction; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMapDispatchToPropsIsMissing", function() { return whenMapDispatchToPropsIsMissing; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMapDispatchToPropsIsObject", function() { return whenMapDispatchToPropsIsObject; }); /* harmony import */ var _utils_bindActionCreators__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("iJT+"); /* harmony import */ var _wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("JCXH"); -/* harmony import */ var _invalidArgFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("0P1g"); - -function mapDispatchToPropsFactory(mapDispatchToProps) { - return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__["wrapMapToPropsConstant"])(dispatch => // @ts-ignore - Object(_utils_bindActionCreators__WEBPACK_IMPORTED_MODULE_0__["default"])(mapDispatchToProps, dispatch)) : !mapDispatchToProps ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__["wrapMapToPropsConstant"])(dispatch => ({ - dispatch - })) : typeof mapDispatchToProps === 'function' ? // @ts-ignore - Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__["wrapMapToPropsFunc"])(mapDispatchToProps, 'mapDispatchToProps') : Object(_invalidArgFactory__WEBPACK_IMPORTED_MODULE_2__["createInvalidArgFactory"])(mapDispatchToProps, 'mapDispatchToProps'); +function whenMapDispatchToPropsIsFunction(mapDispatchToProps) { + return typeof mapDispatchToProps === 'function' ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__["wrapMapToPropsFunc"])(mapDispatchToProps, 'mapDispatchToProps') : undefined; } +function whenMapDispatchToPropsIsMissing(mapDispatchToProps) { + return !mapDispatchToProps ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__["wrapMapToPropsConstant"])(function (dispatch) { + return { + dispatch: dispatch + }; + }) : undefined; +} +function whenMapDispatchToPropsIsObject(mapDispatchToProps) { + return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__["wrapMapToPropsConstant"])(function (dispatch) { + return Object(_utils_bindActionCreators__WEBPACK_IMPORTED_MODULE_0__["default"])(mapDispatchToProps, dispatch); + }) : undefined; +} +/* harmony default export */ __webpack_exports__["default"] = ([whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject]); /***/ }), @@ -193111,93 +192706,160 @@ exports.default = _default; "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initializeUseSelector", function() { return initializeUseSelector; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createSelectorHook", function() { return createSelectorHook; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useSelector", function() { return useSelector; }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("q1tI"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _useReduxContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("mCWk"); -/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("joe6"); -/* harmony import */ var _utils_useSyncExternalStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("tIC4"); +/* harmony import */ var _utils_Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("edbT"); +/* harmony import */ var _utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("V+Yl"); +/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("joe6"); + -let useSyncExternalStoreWithSelector = _utils_useSyncExternalStore__WEBPACK_IMPORTED_MODULE_3__["notInitialized"]; -const initializeUseSelector = fn => { - useSyncExternalStoreWithSelector = fn; + +var refEquality = function refEquality(a, b) { + return a === b; }; -const refEquality = (a, b) => a === b; -/** - * Hook factory, which creates a `useSelector` hook bound to a given context. - * - * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. - * @returns {Function} A `useSelector` hook bound to the specified context. - */ +function useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub) { + var _useReducer = Object(react__WEBPACK_IMPORTED_MODULE_0__["useReducer"])(function (s) { + return s + 1; + }, 0), + forceRender = _useReducer[1]; + + var subscription = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(function () { + return Object(_utils_Subscription__WEBPACK_IMPORTED_MODULE_2__["createSubscription"])(store, contextSub); + }, [store, contextSub]); + var latestSubscriptionCallbackError = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])(); + var latestSelector = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])(); + var latestStoreState = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])(); + var latestSelectedState = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])(); + var storeState = store.getState(); + var selectedState; + try { + if (selector !== latestSelector.current || storeState !== latestStoreState.current || latestSubscriptionCallbackError.current) { + var newSelectedState = selector(storeState); // ensure latest selected state is reused so that a custom equality function can result in identical references -function createSelectorHook(context = _components_Context__WEBPACK_IMPORTED_MODULE_2__["ReactReduxContext"]) { - const useReduxContext = context === _components_Context__WEBPACK_IMPORTED_MODULE_2__["ReactReduxContext"] ? _useReduxContext__WEBPACK_IMPORTED_MODULE_1__["useReduxContext"] : Object(_useReduxContext__WEBPACK_IMPORTED_MODULE_1__["createReduxContextHook"])(context); - return function useSelector(selector, equalityFnOrOptions = {}) { - const { - equalityFn = refEquality, - stabilityCheck = undefined, - noopCheck = undefined - } = typeof equalityFnOrOptions === 'function' ? { - equalityFn: equalityFnOrOptions - } : equalityFnOrOptions; + if (latestSelectedState.current === undefined || !equalityFn(newSelectedState, latestSelectedState.current)) { + selectedState = newSelectedState; + } else { + selectedState = latestSelectedState.current; + } + } else { + selectedState = latestSelectedState.current; + } + } catch (err) { + if (latestSubscriptionCallbackError.current) { + err.message += "\nThe error may be correlated with this previous error:\n" + latestSubscriptionCallbackError.current.stack + "\n\n"; + } - if (false) {} + throw err; + } - const { - store, - subscription, - getServerState, - stabilityCheck: globalStabilityCheck, - noopCheck: globalNoopCheck - } = useReduxContext(); - const firstRun = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])(true); - const wrappedSelector = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])({ - [selector.name](state) { - const selected = selector(state); + Object(_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__["useIsomorphicLayoutEffect"])(function () { + latestSelector.current = selector; + latestStoreState.current = storeState; + latestSelectedState.current = selectedState; + latestSubscriptionCallbackError.current = undefined; + }); + Object(_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__["useIsomorphicLayoutEffect"])(function () { + function checkForUpdates() { + try { + var newStoreState = store.getState(); // Avoid calling selector multiple times if the store's state has not changed - if (false) {} + if (newStoreState === latestStoreState.current) { + return; + } - return selected; + var _newSelectedState = latestSelector.current(newStoreState); + + if (equalityFn(_newSelectedState, latestSelectedState.current)) { + return; + } + + latestSelectedState.current = _newSelectedState; + latestStoreState.current = newStoreState; + } catch (err) { + // we ignore all errors here, since when the component + // is re-rendered, the selectors are called again, and + // will throw again, if neither props nor store state + // changed + latestSubscriptionCallbackError.current = err; } - }[selector.name], [selector, globalStabilityCheck, stabilityCheck]); - const selectedState = useSyncExternalStoreWithSelector(subscription.addNestedSub, store.getState, getServerState || store.getState, wrappedSelector, equalityFn); + forceRender(); + } + + subscription.onStateChange = checkForUpdates; + subscription.trySubscribe(); + checkForUpdates(); + return function () { + return subscription.tryUnsubscribe(); + }; + }, [store, subscription]); + return selectedState; +} +/** + * Hook factory, which creates a `useSelector` hook bound to a given context. + * + * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. + * @returns {Function} A `useSelector` hook bound to the specified context. + */ + + +function createSelectorHook(context) { + if (context === void 0) { + context = _components_Context__WEBPACK_IMPORTED_MODULE_4__["ReactReduxContext"]; + } + + var useReduxContext = context === _components_Context__WEBPACK_IMPORTED_MODULE_4__["ReactReduxContext"] ? _useReduxContext__WEBPACK_IMPORTED_MODULE_1__["useReduxContext"] : function () { + return Object(react__WEBPACK_IMPORTED_MODULE_0__["useContext"])(context); + }; + return function useSelector(selector, equalityFn) { + if (equalityFn === void 0) { + equalityFn = refEquality; + } + + if (false) {} + + var _useReduxContext = useReduxContext(), + store = _useReduxContext.store, + contextSub = _useReduxContext.subscription; + + var selectedState = useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub); Object(react__WEBPACK_IMPORTED_MODULE_0__["useDebugValue"])(selectedState); return selectedState; }; } -/** - * A hook to access the redux store's state. This hook takes a selector function - * as an argument. The selector is called with the store state. - * - * This hook takes an optional equality comparison function as the second parameter - * that allows you to customize the way the selected state is compared to determine - * whether the component needs to be re-rendered. - * - * @param {Function} selector the selector function - * @param {Function=} equalityFn the function that will be used to determine equality - * - * @returns {any} the selected state - * - * @example - * - * import React from 'react' - * import { useSelector } from 'react-redux' - * - * export const CounterComponent = () => { - * const counter = useSelector(state => state.counter) - * return <div>{counter}</div> - * } +/** + * A hook to access the redux store's state. This hook takes a selector function + * as an argument. The selector is called with the store state. + * + * This hook takes an optional equality comparison function as the second parameter + * that allows you to customize the way the selected state is compared to determine + * whether the component needs to be re-rendered. + * + * @param {Function} selector the selector function + * @param {Function=} equalityFn the function that will be used to determine equality + * + * @returns {any} the selected state + * + * @example + * + * import React from 'react' + * import { useSelector } from 'react-redux' + * + * export const CounterComponent = () => { + * const counter = useSelector(state => state.counter) + * return <div>{counter}</div> + * } */ -const useSelector = /*#__PURE__*/createSelectorHook(); +var useSelector = /*#__PURE__*/createSelectorHook(); /***/ }), @@ -199698,122 +199360,6 @@ var SendType; /***/ }), -/***/ "NIZ9": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createConnect", function() { return createConnect; }); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("wx14"); -/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("zLVn"); -/* harmony import */ var _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("DZyx"); -/* harmony import */ var _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("nTZl"); -/* harmony import */ var _mapDispatchToProps__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("jNCK"); -/* harmony import */ var _mapStateToProps__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("wmYm"); -/* harmony import */ var _mergeProps__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("wq4p"); -/* harmony import */ var _selectorFactory__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("XGIc"); - - -var _excluded = ["pure", "areStatesEqual", "areOwnPropsEqual", "areStatePropsEqual", "areMergedPropsEqual"]; - - - - - - -/* - connect is a facade over connectAdvanced. It turns its args into a compatible - selectorFactory, which has the signature: - - (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps - - connect passes its args to connectAdvanced as options, which will in turn pass them to - selectorFactory each time a Connect component instance is instantiated or hot reloaded. - - selectorFactory returns a final props selector from its mapStateToProps, - mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps, - mergePropsFactories, and pure args. - - The resulting final props selector is called by the Connect component instance whenever - it receives new props or store state. - */ - -function match(arg, factories, name) { - for (var i = factories.length - 1; i >= 0; i--) { - var result = factories[i](arg); - if (result) return result; - } - - return function (dispatch, options) { - throw new Error("Invalid value of type " + typeof arg + " for " + name + " argument when connecting component " + options.wrappedComponentName + "."); - }; -} - -function strictEqual(a, b) { - return a === b; -} // createConnect with default args builds the 'official' connect behavior. Calling it with -// different options opens up some testing and extensibility scenarios - - -function createConnect(_temp) { - var _ref = _temp === void 0 ? {} : _temp, - _ref$connectHOC = _ref.connectHOC, - connectHOC = _ref$connectHOC === void 0 ? _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_2__["default"] : _ref$connectHOC, - _ref$mapStateToPropsF = _ref.mapStateToPropsFactories, - mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? _mapStateToProps__WEBPACK_IMPORTED_MODULE_5__["default"] : _ref$mapStateToPropsF, - _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories, - mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? _mapDispatchToProps__WEBPACK_IMPORTED_MODULE_4__["default"] : _ref$mapDispatchToPro, - _ref$mergePropsFactor = _ref.mergePropsFactories, - mergePropsFactories = _ref$mergePropsFactor === void 0 ? _mergeProps__WEBPACK_IMPORTED_MODULE_6__["default"] : _ref$mergePropsFactor, - _ref$selectorFactory = _ref.selectorFactory, - selectorFactory = _ref$selectorFactory === void 0 ? _selectorFactory__WEBPACK_IMPORTED_MODULE_7__["default"] : _ref$selectorFactory; - - return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) { - if (_ref2 === void 0) { - _ref2 = {}; - } - - var _ref3 = _ref2, - _ref3$pure = _ref3.pure, - pure = _ref3$pure === void 0 ? true : _ref3$pure, - _ref3$areStatesEqual = _ref3.areStatesEqual, - areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual, - _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual, - areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__["default"] : _ref3$areOwnPropsEqua, - _ref3$areStatePropsEq = _ref3.areStatePropsEqual, - areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__["default"] : _ref3$areStatePropsEq, - _ref3$areMergedPropsE = _ref3.areMergedPropsEqual, - areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__["default"] : _ref3$areMergedPropsE, - extraOptions = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref3, _excluded); - - var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps'); - var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps'); - var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps'); - return connectHOC(selectorFactory, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ - // used in error messages - methodName: 'connect', - // used to compute Connect's displayName from the wrapped component's displayName. - getDisplayName: function getDisplayName(name) { - return "Connect(" + name + ")"; - }, - // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes - shouldHandleStateChanges: Boolean(mapStateToProps), - // passed through to selectorFactory - initMapStateToProps: initMapStateToProps, - initMapDispatchToProps: initMapDispatchToProps, - initMergeProps: initMergeProps, - pure: pure, - areStatesEqual: areStatesEqual, - areOwnPropsEqual: areOwnPropsEqual, - areStatePropsEqual: areStatePropsEqual, - areMergedPropsEqual: areMergedPropsEqual - }, extraOptions)); - }; -} -/* harmony default export */ __webpack_exports__["default"] = (/*#__PURE__*/createConnect()); - -/***/ }), - /***/ "NKxu": /***/ (function(module, exports, __webpack_require__) { @@ -202244,6 +201790,122 @@ __webpack_require__.r(__webpack_exports__); +/***/ }), + +/***/ "O1HA": +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createConnect", function() { return createConnect; }); +/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("wx14"); +/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("zLVn"); +/* harmony import */ var _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("/jNT"); +/* harmony import */ var _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("Ggip"); +/* harmony import */ var _mapDispatchToProps__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("L13z"); +/* harmony import */ var _mapStateToProps__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("5Ffo"); +/* harmony import */ var _mergeProps__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("v0yM"); +/* harmony import */ var _selectorFactory__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("eQam"); + + +var _excluded = ["pure", "areStatesEqual", "areOwnPropsEqual", "areStatePropsEqual", "areMergedPropsEqual"]; + + + + + + +/* + connect is a facade over connectAdvanced. It turns its args into a compatible + selectorFactory, which has the signature: + + (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps + + connect passes its args to connectAdvanced as options, which will in turn pass them to + selectorFactory each time a Connect component instance is instantiated or hot reloaded. + + selectorFactory returns a final props selector from its mapStateToProps, + mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps, + mergePropsFactories, and pure args. + + The resulting final props selector is called by the Connect component instance whenever + it receives new props or store state. + */ + +function match(arg, factories, name) { + for (var i = factories.length - 1; i >= 0; i--) { + var result = factories[i](arg); + if (result) return result; + } + + return function (dispatch, options) { + throw new Error("Invalid value of type " + typeof arg + " for " + name + " argument when connecting component " + options.wrappedComponentName + "."); + }; +} + +function strictEqual(a, b) { + return a === b; +} // createConnect with default args builds the 'official' connect behavior. Calling it with +// different options opens up some testing and extensibility scenarios + + +function createConnect(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + _ref$connectHOC = _ref.connectHOC, + connectHOC = _ref$connectHOC === void 0 ? _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_2__["default"] : _ref$connectHOC, + _ref$mapStateToPropsF = _ref.mapStateToPropsFactories, + mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? _mapStateToProps__WEBPACK_IMPORTED_MODULE_5__["default"] : _ref$mapStateToPropsF, + _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories, + mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? _mapDispatchToProps__WEBPACK_IMPORTED_MODULE_4__["default"] : _ref$mapDispatchToPro, + _ref$mergePropsFactor = _ref.mergePropsFactories, + mergePropsFactories = _ref$mergePropsFactor === void 0 ? _mergeProps__WEBPACK_IMPORTED_MODULE_6__["default"] : _ref$mergePropsFactor, + _ref$selectorFactory = _ref.selectorFactory, + selectorFactory = _ref$selectorFactory === void 0 ? _selectorFactory__WEBPACK_IMPORTED_MODULE_7__["default"] : _ref$selectorFactory; + + return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) { + if (_ref2 === void 0) { + _ref2 = {}; + } + + var _ref3 = _ref2, + _ref3$pure = _ref3.pure, + pure = _ref3$pure === void 0 ? true : _ref3$pure, + _ref3$areStatesEqual = _ref3.areStatesEqual, + areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual, + _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual, + areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__["default"] : _ref3$areOwnPropsEqua, + _ref3$areStatePropsEq = _ref3.areStatePropsEqual, + areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__["default"] : _ref3$areStatePropsEq, + _ref3$areMergedPropsE = _ref3.areMergedPropsEqual, + areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__["default"] : _ref3$areMergedPropsE, + extraOptions = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref3, _excluded); + + var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps'); + var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps'); + var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps'); + return connectHOC(selectorFactory, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ + // used in error messages + methodName: 'connect', + // used to compute Connect's displayName from the wrapped component's displayName. + getDisplayName: function getDisplayName(name) { + return "Connect(" + name + ")"; + }, + // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes + shouldHandleStateChanges: Boolean(mapStateToProps), + // passed through to selectorFactory + initMapStateToProps: initMapStateToProps, + initMapDispatchToProps: initMapDispatchToProps, + initMergeProps: initMergeProps, + pure: pure, + areStatesEqual: areStatesEqual, + areOwnPropsEqual: areOwnPropsEqual, + areStatePropsEqual: areStatePropsEqual, + areMergedPropsEqual: areMergedPropsEqual + }, extraOptions)); + }; +} +/* harmony default export */ __webpack_exports__["default"] = (/*#__PURE__*/createConnect()); + /***/ }), /***/ "O2Uo": @@ -205381,61 +205043,6 @@ function nopropagation(event) { }); -/***/ }), - -/***/ "OVzC": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDispatchHook", function() { return createDispatchHook; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useDispatch", function() { return useDispatch; }); -/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("lPiA"); -/* harmony import */ var _useStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Bj2+"); - - -/** - * Hook factory, which creates a `useDispatch` hook bound to a given context. - * - * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. - * @returns {Function} A `useDispatch` hook bound to the specified context. - */ - -function createDispatchHook(context) { - if (context === void 0) { - context = _components_Context__WEBPACK_IMPORTED_MODULE_0__["ReactReduxContext"]; - } - - var useStore = context === _components_Context__WEBPACK_IMPORTED_MODULE_0__["ReactReduxContext"] ? _useStore__WEBPACK_IMPORTED_MODULE_1__["useStore"] : Object(_useStore__WEBPACK_IMPORTED_MODULE_1__["createStoreHook"])(context); - return function useDispatch() { - var store = useStore(); - return store.dispatch; - }; -} -/** - * A hook to access the redux `dispatch` function. - * - * @returns {any|function} redux store's `dispatch` function - * - * @example - * - * import React, { useCallback } from 'react' - * import { useDispatch } from 'react-redux' - * - * export const CounterComponent = ({ value }) => { - * const dispatch = useDispatch() - * const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), []) - * return ( - * <div> - * <span>{value}</span> - * <button onClick={increaseCounter}>Increase counter</button> - * </div> - * ) - * } - */ - -var useDispatch = /*#__PURE__*/createDispatchHook(); - /***/ }), /***/ "OWWo": @@ -205938,20 +205545,6 @@ function radial() { } -/***/ }), - -/***/ "OrTd": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("i8i4"); -/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_0__); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unstable_batchedUpdates", function() { return react_dom__WEBPACK_IMPORTED_MODULE_0__["unstable_batchedUpdates"]; }); - -/* eslint-disable import/no-unresolved */ - - /***/ }), /***/ "OsOA": @@ -212188,53 +211781,6 @@ module.exports = function (Constructor, NAME, next) { }; -/***/ }), - -/***/ "Qajp": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _components_Provider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("f24j"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Provider", function() { return _components_Provider__WEBPACK_IMPORTED_MODULE_0__["default"]; }); - -/* harmony import */ var _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("DZyx"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "connectAdvanced", function() { return _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_1__["default"]; }); - -/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("lPiA"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReactReduxContext", function() { return _components_Context__WEBPACK_IMPORTED_MODULE_2__["ReactReduxContext"]; }); - -/* harmony import */ var _connect_connect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("NIZ9"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "connect", function() { return _connect_connect__WEBPACK_IMPORTED_MODULE_3__["default"]; }); - -/* harmony import */ var _hooks_useDispatch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("OVzC"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useDispatch", function() { return _hooks_useDispatch__WEBPACK_IMPORTED_MODULE_4__["useDispatch"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createDispatchHook", function() { return _hooks_useDispatch__WEBPACK_IMPORTED_MODULE_4__["createDispatchHook"]; }); - -/* harmony import */ var _hooks_useSelector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("8n2A"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useSelector", function() { return _hooks_useSelector__WEBPACK_IMPORTED_MODULE_5__["useSelector"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createSelectorHook", function() { return _hooks_useSelector__WEBPACK_IMPORTED_MODULE_5__["createSelectorHook"]; }); - -/* harmony import */ var _hooks_useStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("Bj2+"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useStore", function() { return _hooks_useStore__WEBPACK_IMPORTED_MODULE_6__["useStore"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createStoreHook", function() { return _hooks_useStore__WEBPACK_IMPORTED_MODULE_6__["createStoreHook"]; }); - -/* harmony import */ var _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("nTZl"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shallowEqual", function() { return _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_7__["default"]; }); - - - - - - - - - - - /***/ }), /***/ "QcOe": @@ -218470,30 +218016,6 @@ Linear.prototype = { }); -/***/ }), - -/***/ "SDKn": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setBatch", function() { return setBatch; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBatch", function() { return getBatch; }); -// Default to a dummy "batch" implementation that just runs the callback -function defaultNoopBatch(callback) { - callback(); -} - -var batch = defaultNoopBatch; // Allow injecting another batching function later - -var setBatch = function setBatch(newBatch) { - return batch = newBatch; -}; // Supply a getter just to skip dealing with ESM bindings - -var getBatch = function getBatch() { - return batch; -}; - /***/ }), /***/ "SGTC": @@ -222688,32 +222210,34 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _components_Provider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("Efht"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Provider", function() { return _components_Provider__WEBPACK_IMPORTED_MODULE_0__["default"]; }); -/* harmony import */ var _components_connect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("yNq8"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "connect", function() { return _components_connect__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +/* harmony import */ var _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("/jNT"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "connectAdvanced", function() { return _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_1__["default"]; }); /* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("joe6"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReactReduxContext", function() { return _components_Context__WEBPACK_IMPORTED_MODULE_2__["ReactReduxContext"]; }); -/* harmony import */ var _hooks_useDispatch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("7iT0"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useDispatch", function() { return _hooks_useDispatch__WEBPACK_IMPORTED_MODULE_3__["useDispatch"]; }); +/* harmony import */ var _connect_connect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("O1HA"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "connect", function() { return _connect_connect__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _hooks_useDispatch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("7iT0"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useDispatch", function() { return _hooks_useDispatch__WEBPACK_IMPORTED_MODULE_4__["useDispatch"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createDispatchHook", function() { return _hooks_useDispatch__WEBPACK_IMPORTED_MODULE_4__["createDispatchHook"]; }); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createDispatchHook", function() { return _hooks_useDispatch__WEBPACK_IMPORTED_MODULE_3__["createDispatchHook"]; }); +/* harmony import */ var _hooks_useSelector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("M5x7"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useSelector", function() { return _hooks_useSelector__WEBPACK_IMPORTED_MODULE_5__["useSelector"]; }); -/* harmony import */ var _hooks_useSelector__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("M5x7"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useSelector", function() { return _hooks_useSelector__WEBPACK_IMPORTED_MODULE_4__["useSelector"]; }); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createSelectorHook", function() { return _hooks_useSelector__WEBPACK_IMPORTED_MODULE_5__["createSelectorHook"]; }); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createSelectorHook", function() { return _hooks_useSelector__WEBPACK_IMPORTED_MODULE_4__["createSelectorHook"]; }); +/* harmony import */ var _hooks_useStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("y4dS"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useStore", function() { return _hooks_useStore__WEBPACK_IMPORTED_MODULE_6__["useStore"]; }); -/* harmony import */ var _hooks_useStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("y4dS"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useStore", function() { return _hooks_useStore__WEBPACK_IMPORTED_MODULE_5__["useStore"]; }); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createStoreHook", function() { return _hooks_useStore__WEBPACK_IMPORTED_MODULE_6__["createStoreHook"]; }); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createStoreHook", function() { return _hooks_useStore__WEBPACK_IMPORTED_MODULE_5__["createStoreHook"]; }); +/* harmony import */ var _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("Ggip"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shallowEqual", function() { return _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_7__["default"]; }); -/* harmony import */ var _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("Ggip"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shallowEqual", function() { return _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_6__["default"]; }); -/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("+Jcq"); -/* empty/unused harmony star reexport */ @@ -224608,7 +224132,7 @@ __webpack_require__.r(__webpack_exports__); function verifyPlainObject(value, displayName, methodName) { if (!Object(_isPlainObject__WEBPACK_IMPORTED_MODULE_0__["default"])(value)) { - Object(_warning__WEBPACK_IMPORTED_MODULE_1__["default"])(`${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`); + Object(_warning__WEBPACK_IMPORTED_MODULE_1__["default"])(methodName + "() in " + displayName + " must return a plain object. Instead received " + value + "."); } } @@ -225394,9 +224918,9 @@ module.exports = isUndefined; /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! - Copyright (c) 2018 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames + Copyright (c) 2018 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames */ /* global define */ @@ -225404,7 +224928,6 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 'use strict'; var hasOwn = {}.hasOwnProperty; - var nativeCodeString = '[native code]'; function classNames() { var classes = []; @@ -225425,15 +224948,14 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! } } } else if (argType === 'object') { - if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) { - classes.push(arg.toString()); - continue; - } - - for (var key in arg) { - if (hasOwn.call(arg, key) && arg[key]) { - classes.push(key); + if (arg.toString === Object.prototype.toString) { + for (var key in arg) { + if (hasOwn.call(arg, key) && arg[key]) { + classes.push(key); + } } + } else { + classes.push(arg.toString()); } } } @@ -226887,11 +226409,15 @@ function defaultNoopBatch(callback) { callback(); } -let batch = defaultNoopBatch; // Allow injecting another batching function later +var batch = defaultNoopBatch; // Allow injecting another batching function later -const setBatch = newBatch => batch = newBatch; // Supply a getter just to skip dealing with ESM bindings +var setBatch = function setBatch(newBatch) { + return batch = newBatch; +}; // Supply a getter just to skip dealing with ESM bindings -const getBatch = () => batch; +var getBatch = function getBatch() { + return batch; +}; /***/ }), @@ -238656,7 +238182,6 @@ module.exports = buildDistanceInWordsLocale "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "canUseDOM", function() { return canUseDOM; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useIsomorphicLayoutEffect", function() { return useIsomorphicLayoutEffect; }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("q1tI"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); @@ -238668,10 +238193,8 @@ __webpack_require__.r(__webpack_exports__); // which may cause missed updates; we also must ensure the store subscription // is created synchronously, otherwise a store update may occur before the // subscription is created and an inconsistent state may be observed -// Matches logic in React's `shared/ExecutionEnvironment` file -const canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined'); -const useIsomorphicLayoutEffect = canUseDOM ? react__WEBPACK_IMPORTED_MODULE_0__["useLayoutEffect"] : react__WEBPACK_IMPORTED_MODULE_0__["useEffect"]; +var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__["useLayoutEffect"] : react__WEBPACK_IMPORTED_MODULE_0__["useEffect"]; /***/ }), @@ -238809,7 +238332,7 @@ var _react = _interopRequireDefault(__webpack_require__("q1tI")); var _propTypes = _interopRequireDefault(__webpack_require__("17x9")); -var _classnames = _interopRequireDefault(__webpack_require__("d2Ux")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); var _Icon = _interopRequireDefault(__webpack_require__("y6ex")); @@ -243564,15 +243087,15 @@ var csvFormatValue = csv.formatValue; "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return isPlainObject; }); -/** - * @param {any} obj The object to inspect. - * @returns {boolean} True if the argument appears to be a plain object. +/** + * @param {any} obj The object to inspect. + * @returns {boolean} True if the argument appears to be a plain object. */ function isPlainObject(obj) { if (typeof obj !== 'object' || obj === null) return false; - let proto = Object.getPrototypeOf(obj); + var proto = Object.getPrototypeOf(obj); if (proto === null) return true; - let baseProto = proto; + var baseProto = proto; while (Object.getPrototypeOf(baseProto) !== null) { baseProto = Object.getPrototypeOf(baseProto); @@ -250012,105 +249535,6 @@ const [timeTicks, timeTickInterval] = ticker(_year_js__WEBPACK_IMPORTED_MODULE_9 -/***/ }), - -/***/ "XGIc": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "impureFinalPropsSelectorFactory", function() { return impureFinalPropsSelectorFactory; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pureFinalPropsSelectorFactory", function() { return pureFinalPropsSelectorFactory; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return finalPropsSelectorFactory; }); -/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("zLVn"); -/* harmony import */ var _verifySubselectors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("jcGw"); - -var _excluded = ["initMapStateToProps", "initMapDispatchToProps", "initMergeProps"]; - -function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) { - return function impureFinalPropsSelector(state, ownProps) { - return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps); - }; -} -function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) { - var areStatesEqual = _ref.areStatesEqual, - areOwnPropsEqual = _ref.areOwnPropsEqual, - areStatePropsEqual = _ref.areStatePropsEqual; - var hasRunAtLeastOnce = false; - var state; - var ownProps; - var stateProps; - var dispatchProps; - var mergedProps; - - function handleFirstCall(firstState, firstOwnProps) { - state = firstState; - ownProps = firstOwnProps; - stateProps = mapStateToProps(state, ownProps); - dispatchProps = mapDispatchToProps(dispatch, ownProps); - mergedProps = mergeProps(stateProps, dispatchProps, ownProps); - hasRunAtLeastOnce = true; - return mergedProps; - } - - function handleNewPropsAndNewState() { - stateProps = mapStateToProps(state, ownProps); - if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps); - mergedProps = mergeProps(stateProps, dispatchProps, ownProps); - return mergedProps; - } - - function handleNewProps() { - if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps); - if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps); - mergedProps = mergeProps(stateProps, dispatchProps, ownProps); - return mergedProps; - } - - function handleNewState() { - var nextStateProps = mapStateToProps(state, ownProps); - var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps); - stateProps = nextStateProps; - if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps); - return mergedProps; - } - - function handleSubsequentCalls(nextState, nextOwnProps) { - var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps); - var stateChanged = !areStatesEqual(nextState, state); - state = nextState; - ownProps = nextOwnProps; - if (propsChanged && stateChanged) return handleNewPropsAndNewState(); - if (propsChanged) return handleNewProps(); - if (stateChanged) return handleNewState(); - return mergedProps; - } - - return function pureFinalPropsSelector(nextState, nextOwnProps) { - return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps); - }; -} // TODO: Add more comments -// If pure is true, the selector returned by selectorFactory will memoize its results, -// allowing connectAdvanced's shouldComponentUpdate to return false if final -// props have not changed. If false, the selector will always return a new -// object and shouldComponentUpdate will always return true. - -function finalPropsSelectorFactory(dispatch, _ref2) { - var initMapStateToProps = _ref2.initMapStateToProps, - initMapDispatchToProps = _ref2.initMapDispatchToProps, - initMergeProps = _ref2.initMergeProps, - options = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref2, _excluded); - - var mapStateToProps = initMapStateToProps(dispatch, options); - var mapDispatchToProps = initMapDispatchToProps(dispatch, options); - var mergeProps = initMergeProps(dispatch, options); - - if (false) {} - - var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory; - return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options); -} - /***/ }), /***/ "XGnz": @@ -271714,19 +271138,6 @@ var PasswordGenerationService = /*#__PURE__*/function () { return PasswordGenerationService; }(); -/***/ }), - -/***/ "at8e": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -if (true) { - module.exports = __webpack_require__("lKJe"); -} else {} - - /***/ }), /***/ "atdx": @@ -272939,28 +272350,6 @@ function arrayLikeKeys(value, inherited) { module.exports = arrayLikeKeys; -/***/ }), - -/***/ "b83/": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** @license React v17.0.2 - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -var b=60103,c=60106,d=60107,e=60108,f=60114,g=60109,h=60110,k=60112,l=60113,m=60120,n=60115,p=60116,q=60121,r=60122,u=60117,v=60129,w=60131; -if("function"===typeof Symbol&&Symbol.for){var x=Symbol.for;b=x("react.element");c=x("react.portal");d=x("react.fragment");e=x("react.strict_mode");f=x("react.profiler");g=x("react.provider");h=x("react.context");k=x("react.forward_ref");l=x("react.suspense");m=x("react.suspense_list");n=x("react.memo");p=x("react.lazy");q=x("react.block");r=x("react.server.block");u=x("react.fundamental");v=x("react.debug_trace_mode");w=x("react.legacy_hidden")} -function y(a){if("object"===typeof a&&null!==a){var t=a.$$typeof;switch(t){case b:switch(a=a.type,a){case d:case f:case e:case l:case m:return a;default:switch(a=a&&a.$$typeof,a){case h:case k:case p:case n:case g:return a;default:return t}}case c:return t}}}var z=g,A=b,B=k,C=d,D=p,E=n,F=c,G=f,H=e,I=l;exports.ContextConsumer=h;exports.ContextProvider=z;exports.Element=A;exports.ForwardRef=B;exports.Fragment=C;exports.Lazy=D;exports.Memo=E;exports.Portal=F;exports.Profiler=G;exports.StrictMode=H; -exports.Suspense=I;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return y(a)===h};exports.isContextProvider=function(a){return y(a)===g};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return y(a)===k};exports.isFragment=function(a){return y(a)===d};exports.isLazy=function(a){return y(a)===p};exports.isMemo=function(a){return y(a)===n}; -exports.isPortal=function(a){return y(a)===c};exports.isProfiler=function(a){return y(a)===f};exports.isStrictMode=function(a){return y(a)===e};exports.isSuspense=function(a){return y(a)===l};exports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===d||a===f||a===v||a===e||a===l||a===m||a===w||"object"===typeof a&&null!==a&&(a.$$typeof===p||a.$$typeof===n||a.$$typeof===g||a.$$typeof===h||a.$$typeof===k||a.$$typeof===u||a.$$typeof===q||a[0]===r)?!0:!1}; -exports.typeOf=y; - - /***/ }), /***/ "b8ws": @@ -282876,70 +282265,6 @@ Apps.propTypes = { }; /* harmony default export */ __webpack_exports__["default"] = (Apps); -/***/ }), - -/***/ "d2Ux": -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! - Copyright (c) 2018 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames -*/ -/* global define */ - -(function () { - 'use strict'; - - var hasOwn = {}.hasOwnProperty; - - function classNames() { - var classes = []; - - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i]; - if (!arg) continue; - - var argType = typeof arg; - - if (argType === 'string' || argType === 'number') { - classes.push(arg); - } else if (Array.isArray(arg)) { - if (arg.length) { - var inner = classNames.apply(null, arg); - if (inner) { - classes.push(inner); - } - } - } else if (argType === 'object') { - if (arg.toString === Object.prototype.toString) { - for (var key in arg) { - if (hasOwn.call(arg, key) && arg[key]) { - classes.push(key); - } - } - } else { - classes.push(arg.toString()); - } - } - } - - return classes.join(' '); - } - - if ( true && module.exports) { - classNames.default = classNames; - module.exports = classNames; - } else if (true) { - // register as 'classnames', consistent with npm package name - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { - return classNames; - }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else {} -}()); - - /***/ }), /***/ "d4HN": @@ -287439,44 +286764,6 @@ var LinearProgress = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__["forwardRef /***/ }), -/***/ "dewd": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useReduxContext", function() { return useReduxContext; }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("q1tI"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("lPiA"); - - -/** - * A hook to access the value of the `ReactReduxContext`. This is a low-level - * hook that you should usually not need to call directly. - * - * @returns {any} the value of the `ReactReduxContext` - * - * @example - * - * import React from 'react' - * import { useReduxContext } from 'react-redux' - * - * export const CounterComponent = ({ value }) => { - * const { store } = useReduxContext() - * return <div>{store.getState()}</div> - * } - */ - -function useReduxContext() { - var contextValue = Object(react__WEBPACK_IMPORTED_MODULE_0__["useContext"])(_components_Context__WEBPACK_IMPORTED_MODULE_1__["ReactReduxContext"]); - - if (false) {} - - return contextValue; -} - -/***/ }), - /***/ "dfam": /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -288103,27 +287390,6 @@ __webpack_require__.r(__webpack_exports__); -/***/ }), - -/***/ "dk2Y": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _objectWithoutPropertiesLoose; }); -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; -} - /***/ }), /***/ "dkXG": @@ -288442,126 +287708,6 @@ function ordinal (number) { module.exports = buildFormatLocale -/***/ }), - -/***/ "dogg": -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! - Copyright (c) 2018 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames -*/ -/* global define */ - -(function () { - 'use strict'; - - var classNames = (function () { - // don't inherit from Object so we can skip hasOwnProperty check later - // http://stackoverflow.com/questions/15518328/creating-js-object-with-object-createnull#answer-21079232 - function StorageObject() {} - StorageObject.prototype = Object.create(null); - - function _parseArray (resultSet, array) { - var length = array.length; - - for (var i = 0; i < length; ++i) { - _parse(resultSet, array[i]); - } - } - - var hasOwn = {}.hasOwnProperty; - - function _parseNumber (resultSet, num) { - resultSet[num] = true; - } - - function _parseObject (resultSet, object) { - if (object.toString === Object.prototype.toString) { - for (var k in object) { - if (hasOwn.call(object, k)) { - // set value to false instead of deleting it to avoid changing object structure - // https://www.smashingmagazine.com/2012/11/writing-fast-memory-efficient-javascript/#de-referencing-misconceptions - resultSet[k] = !!object[k]; - } - } - } else { - resultSet[object.toString()] = true; - } - } - - var SPACE = /\s+/; - function _parseString (resultSet, str) { - var array = str.split(SPACE); - var length = array.length; - - for (var i = 0; i < length; ++i) { - resultSet[array[i]] = true; - } - } - - function _parse (resultSet, arg) { - if (!arg) return; - var argType = typeof arg; - - // 'foo bar' - if (argType === 'string') { - _parseString(resultSet, arg); - - // ['foo', 'bar', ...] - } else if (Array.isArray(arg)) { - _parseArray(resultSet, arg); - - // { 'foo': true, ... } - } else if (argType === 'object') { - _parseObject(resultSet, arg); - - // '130' - } else if (argType === 'number') { - _parseNumber(resultSet, arg); - } - } - - function _classNames () { - // don't leak arguments - // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments - var len = arguments.length; - var args = Array(len); - for (var i = 0; i < len; i++) { - args[i] = arguments[i]; - } - - var classSet = new StorageObject(); - _parseArray(classSet, args); - - var list = []; - - for (var k in classSet) { - if (classSet[k]) { - list.push(k) - } - } - - return list.join(' '); - } - - return _classNames; - })(); - - if ( true && module.exports) { - classNames.default = classNames; - module.exports = classNames; - } else if (true) { - // register as 'classnames', consistent with npm package name - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { - return classNames; - }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else {} -}()); - - /***/ }), /***/ "dpMW": @@ -289938,7 +289084,7 @@ var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA")); var _react = _interopRequireDefault(__webpack_require__("q1tI")); -var _dedupe = _interopRequireDefault(__webpack_require__("dogg")); +var _dedupe = _interopRequireDefault(__webpack_require__("A/WM")); var _useCozyDialog2 = _interopRequireDefault(__webpack_require__("mB6O")); @@ -291356,24 +290502,29 @@ function createMuiStrictModeTheme(options) { "use strict"; __webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "impureFinalPropsSelectorFactory", function() { return impureFinalPropsSelectorFactory; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pureFinalPropsSelectorFactory", function() { return pureFinalPropsSelectorFactory; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return finalPropsSelectorFactory; }); -/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("dk2Y"); +/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("zLVn"); /* harmony import */ var _verifySubselectors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("EPyZ"); -const _excluded = ["initMapStateToProps", "initMapDispatchToProps", "initMergeProps"]; +var _excluded = ["initMapStateToProps", "initMapDispatchToProps", "initMergeProps"]; -function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, { - areStatesEqual, - areOwnPropsEqual, - areStatePropsEqual -}) { - let hasRunAtLeastOnce = false; - let state; - let ownProps; - let stateProps; - let dispatchProps; - let mergedProps; +function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) { + return function impureFinalPropsSelector(state, ownProps) { + return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps); + }; +} +function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) { + var areStatesEqual = _ref.areStatesEqual, + areOwnPropsEqual = _ref.areOwnPropsEqual, + areStatePropsEqual = _ref.areStatePropsEqual; + var hasRunAtLeastOnce = false; + var state; + var ownProps; + var stateProps; + var dispatchProps; + var mergedProps; function handleFirstCall(firstState, firstOwnProps) { state = firstState; @@ -291400,16 +290551,16 @@ function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, merg } function handleNewState() { - const nextStateProps = mapStateToProps(state, ownProps); - const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps); + var nextStateProps = mapStateToProps(state, ownProps); + var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps); stateProps = nextStateProps; if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps); return mergedProps; } function handleSubsequentCalls(nextState, nextOwnProps) { - const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps); - const stateChanged = !areStatesEqual(nextState, state, nextOwnProps, ownProps); + var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps); + var stateChanged = !areStatesEqual(nextState, state); state = nextState; ownProps = nextOwnProps; if (propsChanged && stateChanged) return handleNewPropsAndNewState(); @@ -291421,26 +290572,26 @@ function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, merg return function pureFinalPropsSelector(nextState, nextOwnProps) { return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps); }; -} -// TODO: Add more comments -// The selector returned by selectorFactory will memoize its results, -// allowing connect's shouldComponentUpdate to return false if final -// props have not changed. -function finalPropsSelectorFactory(dispatch, _ref) { - let { - initMapStateToProps, - initMapDispatchToProps, - initMergeProps - } = _ref, - options = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded); +} // TODO: Add more comments +// If pure is true, the selector returned by selectorFactory will memoize its results, +// allowing connectAdvanced's shouldComponentUpdate to return false if final +// props have not changed. If false, the selector will always return a new +// object and shouldComponentUpdate will always return true. - const mapStateToProps = initMapStateToProps(dispatch, options); - const mapDispatchToProps = initMapDispatchToProps(dispatch, options); - const mergeProps = initMergeProps(dispatch, options); +function finalPropsSelectorFactory(dispatch, _ref2) { + var initMapStateToProps = _ref2.initMapStateToProps, + initMapDispatchToProps = _ref2.initMapDispatchToProps, + initMergeProps = _ref2.initMergeProps, + options = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref2, _excluded); + + var mapStateToProps = initMapStateToProps(dispatch, options); + var mapDispatchToProps = initMapDispatchToProps(dispatch, options); + var mergeProps = initMergeProps(dispatch, options); if (false) {} - return pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options); + var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory; + return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options); } /***/ }), @@ -291870,18 +291021,17 @@ __webpack_require__.r(__webpack_exports__); // ancestor components re-render before descendants function createListenerCollection() { - const batch = Object(_batch__WEBPACK_IMPORTED_MODULE_0__["getBatch"])(); - let first = null; - let last = null; + var batch = Object(_batch__WEBPACK_IMPORTED_MODULE_0__["getBatch"])(); + var first = null; + var last = null; return { - clear() { + clear: function clear() { first = null; last = null; }, - - notify() { - batch(() => { - let listener = first; + notify: function notify() { + batch(function () { + var listener = first; while (listener) { listener.callback(); @@ -291889,10 +291039,9 @@ function createListenerCollection() { } }); }, - - get() { - let listeners = []; - let listener = first; + get: function get() { + var listeners = []; + var listener = first; while (listener) { listeners.push(listener); @@ -291901,11 +291050,10 @@ function createListenerCollection() { return listeners; }, - - subscribe(callback) { - let isSubscribed = true; - let listener = last = { - callback, + subscribe: function subscribe(callback) { + var isSubscribed = true; + var listener = last = { + callback: callback, next: null, prev: last }; @@ -291933,18 +291081,18 @@ function createListenerCollection() { } }; } - }; } -const nullListeners = { - notify() {}, - - get: () => [] +var nullListeners = { + notify: function notify() {}, + get: function get() { + return []; + } }; function createSubscription(store, parentSub) { - let unsubscribe; - let listeners = nullListeners; + var unsubscribe; + var listeners = nullListeners; function addNestedSub(listener) { trySubscribe(); @@ -291981,14 +291129,16 @@ function createSubscription(store, parentSub) { } } - const subscription = { - addNestedSub, - notifyNestedSubs, - handleChangeWrapper, - isSubscribed, - trySubscribe, - tryUnsubscribe, - getListeners: () => listeners + var subscription = { + addNestedSub: addNestedSub, + notifyNestedSubs: notifyNestedSubs, + handleChangeWrapper: handleChangeWrapper, + isSubscribed: isSubscribed, + trySubscribe: trySubscribe, + tryUnsubscribe: tryUnsubscribe, + getListeners: function getListeners() { + return listeners; + } }; return subscription; } @@ -292585,19 +291735,6 @@ var cyan = { }; /* harmony default export */ __webpack_exports__["default"] = (cyan); -/***/ }), - -/***/ "ejks": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -if (true) { - module.exports = __webpack_require__("AB4A"); -} else {} - - /***/ }), /***/ "ekgI": @@ -293650,64 +292787,6 @@ function animate(property, element, to) { /***/ }), -/***/ "f24j": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("q1tI"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("17x9"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _Context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("lPiA"); -/* harmony import */ var _utils_Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("qQVc"); -/* harmony import */ var _utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("hCSu"); - - - - - - -function Provider(_ref) { - var store = _ref.store, - context = _ref.context, - children = _ref.children; - var contextValue = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(function () { - var subscription = Object(_utils_Subscription__WEBPACK_IMPORTED_MODULE_3__["createSubscription"])(store); - return { - store: store, - subscription: subscription - }; - }, [store]); - var previousState = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(function () { - return store.getState(); - }, [store]); - Object(_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_4__["useIsomorphicLayoutEffect"])(function () { - var subscription = contextValue.subscription; - subscription.onStateChange = subscription.notifyNestedSubs; - subscription.trySubscribe(); - - if (previousState !== store.getState()) { - subscription.notifyNestedSubs(); - } - - return function () { - subscription.tryUnsubscribe(); - subscription.onStateChange = null; - }; - }, [contextValue, previousState]); - var Context = context || _Context__WEBPACK_IMPORTED_MODULE_2__["ReactReduxContext"]; - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Context.Provider, { - value: contextValue - }, children); -} - -if (false) {} - -/* harmony default export */ __webpack_exports__["default"] = (Provider); - -/***/ }), - /***/ "f3/d": /***/ (function(module, exports, __webpack_require__) { @@ -304854,27 +303933,6 @@ module.exports = { } -/***/ }), - -/***/ "hCSu": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useIsomorphicLayoutEffect", function() { return useIsomorphicLayoutEffect; }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("q1tI"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); - // React currently throws a warning when using useLayoutEffect on the server. -// To get around it, we can conditionally useEffect on the server (no-op) and -// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store -// subscription callback always has the selector from the latest render commit -// available, otherwise a store update may happen between render and the effect, -// which may cause missed updates; we also must ensure the store subscription -// is created synchronously, otherwise a store update may occur before the -// subscription is created and an inconsistent state may be observed - -var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__["useLayoutEffect"] : react__WEBPACK_IMPORTED_MODULE_0__["useEffect"]; - /***/ }), /***/ "hEa4": @@ -314670,8 +313728,7 @@ module.exports = { "use strict"; __webpack_require__.r(__webpack_exports__); -/* WEBPACK VAR INJECTION */(function(process, global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EnhancerArray", function() { return EnhancerArray; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MiddlewareArray", function() { return MiddlewareArray; }); +/* WEBPACK VAR INJECTION */(function(process, global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MiddlewareArray", function() { return MiddlewareArray; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SHOULD_AUTOBATCH", function() { return SHOULD_AUTOBATCH; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TaskAbortError", function() { return TaskAbortError; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addListener", function() { return addListener; }); @@ -314690,11 +313747,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findNonSerializableValue", function() { return findNonSerializableValue; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDefaultMiddleware", function() { return getDefaultMiddleware; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getType", function() { return getType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isAction", function() { return isAction; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isAllOf", function() { return isAllOf; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isAnyOf", function() { return isAnyOf; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isAsyncThunkAction", function() { return isAsyncThunkAction; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFluxStandardAction", function() { return isFSA; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFulfilled", function() { return isFulfilled; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isImmutableDefault", function() { return isImmutableDefault; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPending", function() { return isPending; }); @@ -314939,43 +313994,6 @@ var MiddlewareArray = /** @class */ (function (_super) { }; return MiddlewareArray; }(Array)); -var EnhancerArray = /** @class */ (function (_super) { - __extends(EnhancerArray, _super); - function EnhancerArray() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _this = _super.apply(this, args) || this; - Object.setPrototypeOf(_this, EnhancerArray.prototype); - return _this; - } - Object.defineProperty(EnhancerArray, Symbol.species, { - get: function () { - return EnhancerArray; - }, - enumerable: false, - configurable: true - }); - EnhancerArray.prototype.concat = function () { - var arr = []; - for (var _i = 0; _i < arguments.length; _i++) { - arr[_i] = arguments[_i]; - } - return _super.prototype.concat.apply(this, arr); - }; - EnhancerArray.prototype.prepend = function () { - var arr = []; - for (var _i = 0; _i < arguments.length; _i++) { - arr[_i] = arguments[_i]; - } - if (arr.length === 1 && Array.isArray(arr[0])) { - return new (EnhancerArray.bind.apply(EnhancerArray, __spreadArray([void 0], arr[0].concat(this))))(); - } - return new (EnhancerArray.bind.apply(EnhancerArray, __spreadArray([void 0], arr.concat(this))))(); - }; - return EnhancerArray; -}(Array)); function freezeDraftable(val) { return Object(immer__WEBPACK_IMPORTED_MODULE_0__["isDraftable"])(val) ? Object(immer__WEBPACK_IMPORTED_MODULE_0__["default"])(val, function () { }) : val; @@ -315281,13 +314299,12 @@ function configureStore(options) { trace: !IS_PRODUCTION }, typeof devTools === "object" && devTools)); } - var defaultEnhancers = new EnhancerArray(middlewareEnhancer); - var storeEnhancers = defaultEnhancers; + var storeEnhancers = [middlewareEnhancer]; if (Array.isArray(enhancers)) { storeEnhancers = __spreadArray([middlewareEnhancer], enhancers); } else if (typeof enhancers === "function") { - storeEnhancers = enhancers(defaultEnhancers); + storeEnhancers = enhancers(storeEnhancers); } var composedEnhancer = finalCompose.apply(void 0, storeEnhancers); return Object(redux__WEBPACK_IMPORTED_MODULE_1__["createStore"])(rootReducer, preloadedState, composedEnhancer); @@ -315316,11 +314333,8 @@ function createAction(type, prepareAction) { actionCreator.match = function (action) { return action.type === type; }; return actionCreator; } -function isAction(action) { - return isPlainObject(action) && "type" in action; -} function isFSA(action) { - return isAction(action) && typeof action.type === "string" && Object.keys(action).every(isValidKey); + return isPlainObject(action) && typeof action.type === "string" && Object.keys(action).every(isValidKey); } function isValidKey(key) { return ["type", "payload", "error", "meta"].indexOf(key) > -1; @@ -316535,9 +315549,6 @@ function createListenerMiddleware(middlewareOptions) { }); }; var clearListenerMiddleware = createClearListenerMiddleware(listenerMap); var middleware = function (api) { return function (next) { return function (action) { - if (!isAction(action)) { - return next(action); - } if (addListener.match(action)) { return startListening(action.payload); } @@ -317037,14 +316048,20 @@ __webpack_require__.r(__webpack_exports__); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return bindActionCreators; }); function bindActionCreators(actionCreators, dispatch) { - const boundActionCreators = {}; + var boundActionCreators = {}; - for (const key in actionCreators) { - const actionCreator = actionCreators[key]; + var _loop = function _loop(key) { + var actionCreator = actionCreators[key]; if (typeof actionCreator === 'function') { - boundActionCreators[key] = (...args) => dispatch(actionCreator(...args)); + boundActionCreators[key] = function () { + return dispatch(actionCreator.apply(void 0, arguments)); + }; } + }; + + for (var key in actionCreators) { + _loop(key); } return boundActionCreators; @@ -321192,7 +320209,7 @@ var _react = _interopRequireWildcard(__webpack_require__("q1tI")); var _propTypes = _interopRequireDefault(__webpack_require__("17x9")); -var _classnames = _interopRequireDefault(__webpack_require__("d2Ux")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } @@ -322577,37 +321594,6 @@ module.exports = base64url; /***/ }), -/***/ "jNCK": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMapDispatchToPropsIsFunction", function() { return whenMapDispatchToPropsIsFunction; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMapDispatchToPropsIsMissing", function() { return whenMapDispatchToPropsIsMissing; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMapDispatchToPropsIsObject", function() { return whenMapDispatchToPropsIsObject; }); -/* harmony import */ var _utils_bindActionCreators__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("w4ZS"); -/* harmony import */ var _wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("1kj9"); - - -function whenMapDispatchToPropsIsFunction(mapDispatchToProps) { - return typeof mapDispatchToProps === 'function' ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__["wrapMapToPropsFunc"])(mapDispatchToProps, 'mapDispatchToProps') : undefined; -} -function whenMapDispatchToPropsIsMissing(mapDispatchToProps) { - return !mapDispatchToProps ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__["wrapMapToPropsConstant"])(function (dispatch) { - return { - dispatch: dispatch - }; - }) : undefined; -} -function whenMapDispatchToPropsIsObject(mapDispatchToProps) { - return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__["wrapMapToPropsConstant"])(function (dispatch) { - return Object(_utils_bindActionCreators__WEBPACK_IMPORTED_MODULE_0__["default"])(mapDispatchToProps, dispatch); - }) : undefined; -} -/* harmony default export */ __webpack_exports__["default"] = ([whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject]); - -/***/ }), - /***/ "jQWc": /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -323321,33 +322307,6 @@ function arrayIncludes(array, value) { module.exports = arrayIncludes; -/***/ }), - -/***/ "jcGw": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return verifySubselectors; }); -/* harmony import */ var _utils_warning__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("3TCD"); - - -function verify(selector, methodName, displayName) { - if (!selector) { - throw new Error("Unexpected value for " + methodName + " in " + displayName + "."); - } else if (methodName === 'mapStateToProps' || methodName === 'mapDispatchToProps') { - if (!Object.prototype.hasOwnProperty.call(selector, 'dependsOnOwnProps')) { - Object(_utils_warning__WEBPACK_IMPORTED_MODULE_0__["default"])("The selector for " + methodName + " of " + displayName + " did not specify a value for dependsOnOwnProps."); - } - } -} - -function verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, displayName) { - verify(mapStateToProps, 'mapStateToProps', displayName); - verify(mapDispatchToProps, 'mapDispatchToProps', displayName); - verify(mergeProps, 'mergeProps', displayName); -} - /***/ }), /***/ "jdz8": @@ -323971,30 +322930,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("q1tI"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -const ContextKey = Symbol.for(`react-redux-context`); -const gT = typeof globalThis !== "undefined" ? globalThis : -/* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */ -{}; - -function getContext() { - var _gT$ContextKey; - - if (!react__WEBPACK_IMPORTED_MODULE_0__["createContext"]) return {}; - const contextMap = (_gT$ContextKey = gT[ContextKey]) != null ? _gT$ContextKey : gT[ContextKey] = new Map(); - let realContext = contextMap.get(react__WEBPACK_IMPORTED_MODULE_0__["createContext"]); - - if (!realContext) { - realContext = react__WEBPACK_IMPORTED_MODULE_0__["createContext"](null); - - if (false) {} - - contextMap.set(react__WEBPACK_IMPORTED_MODULE_0__["createContext"], realContext); - } +var ReactReduxContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext(null); - return realContext; -} +if (false) {} -const ReactReduxContext = /*#__PURE__*/getContext(); /* harmony default export */ __webpack_exports__["default"] = (ReactReduxContext); /***/ }), @@ -334363,7 +333302,7 @@ var _react = _interopRequireWildcard(__webpack_require__("q1tI")); var _propTypes = _interopRequireDefault(__webpack_require__("17x9")); -var _classnames = _interopRequireDefault(__webpack_require__("d2Ux")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); var _IconButton = _interopRequireDefault(__webpack_require__("1glO")); @@ -334771,25 +333710,6 @@ __webpack_require__.r(__webpack_exports__); -/***/ }), - -/***/ "lKJe": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * @license React - * use-sync-external-store-shim.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -var e=__webpack_require__("q1tI");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k="function"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d} -function r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u="undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u; - - /***/ }), /***/ "lKaW": @@ -337570,23 +336490,6 @@ var CardHeader = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__["forwardRef"](f /***/ }), -/***/ "lPiA": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReactReduxContext", function() { return ReactReduxContext; }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("q1tI"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); - -var ReactReduxContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext(null); - -if (false) {} - -/* harmony default export */ __webpack_exports__["default"] = (ReactReduxContext); - -/***/ }), - /***/ "lQqw": /***/ (function(module, exports, __webpack_require__) { @@ -341229,7 +340132,7 @@ var _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__("QILm var _react = __webpack_require__("q1tI"); -var _classnames = _interopRequireDefault(__webpack_require__("d2Ux")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); var _useBreakpoints2 = _interopRequireDefault(__webpack_require__("1I/2")); @@ -341796,48 +340699,36 @@ exports.default = _default; "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createReduxContextHook", function() { return createReduxContextHook; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useReduxContext", function() { return useReduxContext; }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("q1tI"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("joe6"); - -/** - * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level - * hook that you should usually not need to call directly. - * - * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. - * @returns {Function} A `useReduxContext` hook bound to the specified context. +/** + * A hook to access the value of the `ReactReduxContext`. This is a low-level + * hook that you should usually not need to call directly. + * + * @returns {any} the value of the `ReactReduxContext` + * + * @example + * + * import React from 'react' + * import { useReduxContext } from 'react-redux' + * + * export const CounterComponent = ({ value }) => { + * const { store } = useReduxContext() + * return <div>{store.getState()}</div> + * } */ -function createReduxContextHook(context = _components_Context__WEBPACK_IMPORTED_MODULE_1__["ReactReduxContext"]) { - return function useReduxContext() { - const contextValue = Object(react__WEBPACK_IMPORTED_MODULE_0__["useContext"])(context); - if (false) {} +function useReduxContext() { + var contextValue = Object(react__WEBPACK_IMPORTED_MODULE_0__["useContext"])(_components_Context__WEBPACK_IMPORTED_MODULE_1__["ReactReduxContext"]); - return contextValue; - }; -} -/** - * A hook to access the value of the `ReactReduxContext`. This is a low-level - * hook that you should usually not need to call directly. - * - * @returns {any} the value of the `ReactReduxContext` - * - * @example - * - * import React from 'react' - * import { useReduxContext } from 'react-redux' - * - * export const CounterComponent = () => { - * const { store } = useReduxContext() - * return <div>{store.getState()}</div> - * } - */ + if (false) {} -const useReduxContext = /*#__PURE__*/createReduxContextHook(); + return contextValue; +} /***/ }), @@ -346864,42 +345755,6 @@ var DeviceRequest = function DeviceRequest(appId, platformUtilsService) { /***/ }), -/***/ "nTZl": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return shallowEqual; }); -function is(x, y) { - if (x === y) { - return x !== 0 || y !== 0 || 1 / x === 1 / y; - } else { - return x !== x && y !== y; - } -} - -function shallowEqual(objA, objB) { - if (is(objA, objB)) return true; - - if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) { - return false; - } - - var keysA = Object.keys(objA); - var keysB = Object.keys(objB); - if (keysA.length !== keysB.length) return false; - - for (var i = 0; i < keysA.length; i++) { - if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) { - return false; - } - } - - return true; -} - -/***/ }), - /***/ "nUDS": /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -367204,7 +366059,7 @@ var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA")); var _react = _interopRequireDefault(__webpack_require__("q1tI")); -var _dedupe = _interopRequireDefault(__webpack_require__("dogg")); +var _dedupe = _interopRequireDefault(__webpack_require__("A/WM")); var _useCozyDialog2 = _interopRequireDefault(__webpack_require__("mB6O")); @@ -375245,7 +374100,7 @@ var _extends2 = _interopRequireDefault(__webpack_require__("pVnL")); var _react = _interopRequireDefault(__webpack_require__("q1tI")); -var _classnames = _interopRequireDefault(__webpack_require__("d2Ux")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); var _useCozyDialog2 = _interopRequireDefault(__webpack_require__("mB6O")); @@ -375950,142 +374805,6 @@ function uniqBy(array, iteratee) { module.exports = uniqBy; -/***/ }), - -/***/ "qQVc": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createSubscription", function() { return createSubscription; }); -/* harmony import */ var _batch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("SDKn"); - // encapsulates the subscription logic for connecting a component to the redux store, as -// well as nesting subscriptions of descendant components, so that we can ensure the -// ancestor components re-render before descendants - -function createListenerCollection() { - var batch = Object(_batch__WEBPACK_IMPORTED_MODULE_0__["getBatch"])(); - var first = null; - var last = null; - return { - clear: function clear() { - first = null; - last = null; - }, - notify: function notify() { - batch(function () { - var listener = first; - - while (listener) { - listener.callback(); - listener = listener.next; - } - }); - }, - get: function get() { - var listeners = []; - var listener = first; - - while (listener) { - listeners.push(listener); - listener = listener.next; - } - - return listeners; - }, - subscribe: function subscribe(callback) { - var isSubscribed = true; - var listener = last = { - callback: callback, - next: null, - prev: last - }; - - if (listener.prev) { - listener.prev.next = listener; - } else { - first = listener; - } - - return function unsubscribe() { - if (!isSubscribed || first === null) return; - isSubscribed = false; - - if (listener.next) { - listener.next.prev = listener.prev; - } else { - last = listener.prev; - } - - if (listener.prev) { - listener.prev.next = listener.next; - } else { - first = listener.next; - } - }; - } - }; -} - -var nullListeners = { - notify: function notify() {}, - get: function get() { - return []; - } -}; -function createSubscription(store, parentSub) { - var unsubscribe; - var listeners = nullListeners; - - function addNestedSub(listener) { - trySubscribe(); - return listeners.subscribe(listener); - } - - function notifyNestedSubs() { - listeners.notify(); - } - - function handleChangeWrapper() { - if (subscription.onStateChange) { - subscription.onStateChange(); - } - } - - function isSubscribed() { - return Boolean(unsubscribe); - } - - function trySubscribe() { - if (!unsubscribe) { - unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper); - listeners = createListenerCollection(); - } - } - - function tryUnsubscribe() { - if (unsubscribe) { - unsubscribe(); - unsubscribe = undefined; - listeners.clear(); - listeners = nullListeners; - } - } - - var subscription = { - addNestedSub: addNestedSub, - notifyNestedSubs: notifyNestedSubs, - handleChangeWrapper: handleChangeWrapper, - isSubscribed: isSubscribed, - trySubscribe: trySubscribe, - tryUnsubscribe: tryUnsubscribe, - getListeners: function getListeners() { - return listeners; - } - }; - return subscription; -} - /***/ }), /***/ "qR3b": @@ -380708,7 +379427,7 @@ var _react = _interopRequireWildcard(__webpack_require__("q1tI")); var _propTypes = _interopRequireDefault(__webpack_require__("17x9")); -var _classnames = _interopRequireDefault(__webpack_require__("d2Ux")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); var _cozyClient = __webpack_require__("SH7X"); @@ -390268,18 +388987,6 @@ logger.pipe = function() { }; module.exports = logger; -/***/ }), - -/***/ "tIC4": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "notInitialized", function() { return notInitialized; }); -const notInitialized = () => { - throw new Error('uSES not initialized!'); -}; - /***/ }), /***/ "tIkd": @@ -390522,29 +389229,6 @@ __webpack_require__.r(__webpack_exports__); }); -/***/ }), - -/***/ "tOxS": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _extends; }); -function _extends() { - _extends = Object.assign ? Object.assign.bind() : function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - return target; - }; - return _extends.apply(this, arguments); -} - /***/ }), /***/ "tRbT": @@ -401237,29 +399921,27 @@ __webpack_require__.r(__webpack_exports__); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultMergeProps", function() { return defaultMergeProps; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wrapMergePropsFunc", function() { return wrapMergePropsFunc; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergePropsFactory", function() { return mergePropsFactory; }); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("tOxS"); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMergePropsIsFunction", function() { return whenMergePropsIsFunction; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMergePropsIsOmitted", function() { return whenMergePropsIsOmitted; }); +/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("wx14"); /* harmony import */ var _utils_verifyPlainObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("TLKv"); -/* harmony import */ var _invalidArgFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("0P1g"); - function defaultMergeProps(stateProps, dispatchProps, ownProps) { - // @ts-ignore return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, ownProps, stateProps, dispatchProps); } function wrapMergePropsFunc(mergeProps) { - return function initMergePropsProxy(dispatch, { - displayName, - areMergedPropsEqual - }) { - let hasRunOnce = false; - let mergedProps; + return function initMergePropsProxy(dispatch, _ref) { + var displayName = _ref.displayName, + pure = _ref.pure, + areMergedPropsEqual = _ref.areMergedPropsEqual; + var hasRunOnce = false; + var mergedProps; return function mergePropsProxy(stateProps, dispatchProps, ownProps) { - const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps); + var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps); if (hasRunOnce) { - if (!areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps; + if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps; } else { hasRunOnce = true; mergedProps = nextMergedProps; @@ -401270,9 +399952,15 @@ function wrapMergePropsFunc(mergeProps) { }; }; } -function mergePropsFactory(mergeProps) { - return !mergeProps ? () => defaultMergeProps : typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : Object(_invalidArgFactory__WEBPACK_IMPORTED_MODULE_2__["createInvalidArgFactory"])(mergeProps, 'mergeProps'); +function whenMergePropsIsFunction(mergeProps) { + return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined; +} +function whenMergePropsIsOmitted(mergeProps) { + return !mergeProps ? function () { + return defaultMergeProps; + } : undefined; } +/* harmony default export */ __webpack_exports__["default"] = ([whenMergePropsIsFunction, whenMergePropsIsOmitted]); /***/ }), @@ -405704,34 +404392,6 @@ module.exports = function (IS_INCLUDES) { }; -/***/ }), - -/***/ "w4ZS": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return bindActionCreators; }); -function bindActionCreators(actionCreators, dispatch) { - var boundActionCreators = {}; - - var _loop = function _loop(key) { - var actionCreator = actionCreators[key]; - - if (typeof actionCreator === 'function') { - boundActionCreators[key] = function () { - return dispatch(actionCreator.apply(void 0, arguments)); - }; - } - }; - - for (var key in actionCreators) { - _loop(key); - } - - return boundActionCreators; -} - /***/ }), /***/ "w4qb": @@ -409917,27 +408577,6 @@ __webpack_require__.r(__webpack_exports__); -/***/ }), - -/***/ "wmYm": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMapStateToPropsIsFunction", function() { return whenMapStateToPropsIsFunction; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMapStateToPropsIsMissing", function() { return whenMapStateToPropsIsMissing; }); -/* harmony import */ var _wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("1kj9"); - -function whenMapStateToPropsIsFunction(mapStateToProps) { - return typeof mapStateToProps === 'function' ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__["wrapMapToPropsFunc"])(mapStateToProps, 'mapStateToProps') : undefined; -} -function whenMapStateToPropsIsMissing(mapStateToProps) { - return !mapStateToProps ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__["wrapMapToPropsConstant"])(function () { - return {}; - }) : undefined; -} -/* harmony default export */ __webpack_exports__["default"] = ([whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing]); - /***/ }), /***/ "wmZ5": @@ -410356,56 +408995,6 @@ exports.default = _default; module.exports = __webpack_require__("43KI").PassThrough -/***/ }), - -/***/ "wq4p": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultMergeProps", function() { return defaultMergeProps; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wrapMergePropsFunc", function() { return wrapMergePropsFunc; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMergePropsIsFunction", function() { return whenMergePropsIsFunction; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenMergePropsIsOmitted", function() { return whenMergePropsIsOmitted; }); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("wx14"); -/* harmony import */ var _utils_verifyPlainObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("6dDM"); - - -function defaultMergeProps(stateProps, dispatchProps, ownProps) { - return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, ownProps, stateProps, dispatchProps); -} -function wrapMergePropsFunc(mergeProps) { - return function initMergePropsProxy(dispatch, _ref) { - var displayName = _ref.displayName, - pure = _ref.pure, - areMergedPropsEqual = _ref.areMergedPropsEqual; - var hasRunOnce = false; - var mergedProps; - return function mergePropsProxy(stateProps, dispatchProps, ownProps) { - var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps); - - if (hasRunOnce) { - if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps; - } else { - hasRunOnce = true; - mergedProps = nextMergedProps; - if (false) {} - } - - return mergedProps; - }; - }; -} -function whenMergePropsIsFunction(mergeProps) { - return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined; -} -function whenMergePropsIsOmitted(mergeProps) { - return !mergeProps ? function () { - return defaultMergeProps; - } : undefined; -} -/* harmony default export */ __webpack_exports__["default"] = ([whenMergePropsIsFunction, whenMergePropsIsOmitted]); - /***/ }), /***/ "wqqj": @@ -417593,46 +416182,52 @@ module.exports = function (it) { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createStoreHook", function() { return createStoreHook; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useStore", function() { return useStore; }); -/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("joe6"); -/* harmony import */ var _useReduxContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("mCWk"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("q1tI"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("joe6"); +/* harmony import */ var _useReduxContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("mCWk"); -/** - * Hook factory, which creates a `useStore` hook bound to a given context. - * - * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. - * @returns {Function} A `useStore` hook bound to the specified context. + +/** + * Hook factory, which creates a `useStore` hook bound to a given context. + * + * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. + * @returns {Function} A `useStore` hook bound to the specified context. */ -function createStoreHook(context = _components_Context__WEBPACK_IMPORTED_MODULE_0__["ReactReduxContext"]) { - const useReduxContext = // @ts-ignore - context === _components_Context__WEBPACK_IMPORTED_MODULE_0__["ReactReduxContext"] ? _useReduxContext__WEBPACK_IMPORTED_MODULE_1__["useReduxContext"] : // @ts-ignore - Object(_useReduxContext__WEBPACK_IMPORTED_MODULE_1__["createReduxContextHook"])(context); +function createStoreHook(context) { + if (context === void 0) { + context = _components_Context__WEBPACK_IMPORTED_MODULE_1__["ReactReduxContext"]; + } + + var useReduxContext = context === _components_Context__WEBPACK_IMPORTED_MODULE_1__["ReactReduxContext"] ? _useReduxContext__WEBPACK_IMPORTED_MODULE_2__["useReduxContext"] : function () { + return Object(react__WEBPACK_IMPORTED_MODULE_0__["useContext"])(context); + }; return function useStore() { - const { - store - } = useReduxContext(); // @ts-ignore + var _useReduxContext = useReduxContext(), + store = _useReduxContext.store; return store; }; } -/** - * A hook to access the redux store. - * - * @returns {any} the redux store - * - * @example - * - * import React from 'react' - * import { useStore } from 'react-redux' - * - * export const ExampleComponent = () => { - * const store = useStore() - * return <div>{store.getState()}</div> - * } +/** + * A hook to access the redux store. + * + * @returns {any} the redux store + * + * @example + * + * import React from 'react' + * import { useStore } from 'react-redux' + * + * export const ExampleComponent = () => { + * const store = useStore() + * return <div>{store.getState()}</div> + * } */ -const useStore = /*#__PURE__*/createStoreHook(); +var useStore = /*#__PURE__*/createStoreHook(); /***/ }), @@ -417726,7 +416321,7 @@ var _react = _interopRequireWildcard(__webpack_require__("q1tI")); var _propTypes = _interopRequireDefault(__webpack_require__("17x9")); -var _classnames = _interopRequireDefault(__webpack_require__("d2Ux")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } @@ -418080,7 +416675,7 @@ exports.useCozyTheme = exports.default = exports.CozyThemeContext = void 0; var _react = _interopRequireWildcard(__webpack_require__("q1tI")); -var _classnames = _interopRequireDefault(__webpack_require__("d2Ux")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); var _MuiCozyTheme = _interopRequireDefault(__webpack_require__("xIbs")); @@ -421653,434 +420248,6 @@ function dayOfISOYear (isoYear, week, day) { module.exports = parse -/***/ }), - -/***/ "yNq8": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initializeConnect", function() { return initializeConnect; }); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("tOxS"); -/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("dk2Y"); -/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("2mql"); -/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("q1tI"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("0vxD"); -/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _connect_selectorFactory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("eQam"); -/* harmony import */ var _connect_mapDispatchToProps__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("L13z"); -/* harmony import */ var _connect_mapStateToProps__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("5Ffo"); -/* harmony import */ var _connect_mergeProps__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("v0yM"); -/* harmony import */ var _utils_Subscription__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("edbT"); -/* harmony import */ var _utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("V+Yl"); -/* harmony import */ var _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("Ggip"); -/* harmony import */ var _utils_warning__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("2V/z"); -/* harmony import */ var _Context__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__("joe6"); -/* harmony import */ var _utils_useSyncExternalStore__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__("tIC4"); - - -const _excluded = ["reactReduxForwardedRef"]; - -/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */ - - - - - - - - - - - - - -let useSyncExternalStore = _utils_useSyncExternalStore__WEBPACK_IMPORTED_MODULE_14__["notInitialized"]; -const initializeConnect = fn => { - useSyncExternalStore = fn; -}; // Define some constant arrays just to avoid re-creating these - -const EMPTY_ARRAY = [null, 0]; -const NO_SUBSCRIPTION_ARRAY = [null, null]; // Attempts to stringify whatever not-really-a-component value we were given -// for logging in an error message - -const stringifyComponent = Comp => { - try { - return JSON.stringify(Comp); - } catch (err) { - return String(Comp); - } -}; - -// This is "just" a `useLayoutEffect`, but with two modifications: -// - we need to fall back to `useEffect` in SSR to avoid annoying warnings -// - we extract this to a separate function to avoid closing over values -// and causing memory leaks -function useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) { - Object(_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_10__["useIsomorphicLayoutEffect"])(() => effectFunc(...effectArgs), dependencies); -} // Effect callback, extracted: assign the latest props values to refs for later usage - - -function captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, // actualChildProps: unknown, -childPropsFromStoreUpdate, notifyNestedSubs) { - // We want to capture the wrapper props and child props we used for later comparisons - lastWrapperProps.current = wrapperProps; - renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update - - if (childPropsFromStoreUpdate.current) { - childPropsFromStoreUpdate.current = null; - notifyNestedSubs(); - } -} // Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor, -// check for updates after dispatched actions, and trigger re-renders. - - -function subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, // forceComponentUpdateDispatch: React.Dispatch<any>, -additionalSubscribeListener) { - // If we're not subscribed to the store, nothing to do here - if (!shouldHandleStateChanges) return () => {}; // Capture values for checking if and when this component unmounts - - let didUnsubscribe = false; - let lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component - - const checkForUpdates = () => { - if (didUnsubscribe || !isMounted.current) { - // Don't run stale listeners. - // Redux doesn't guarantee unsubscriptions happen until next dispatch. - return; - } // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it - - - const latestStoreState = store.getState(); - let newChildProps, error; - - try { - // Actually run the selector with the most recent store state and wrapper props - // to determine what the child props should be - newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current); - } catch (e) { - error = e; - lastThrownError = e; - } - - if (!error) { - lastThrownError = null; - } // If the child props haven't changed, nothing to do here - cascade the subscription update - - - if (newChildProps === lastChildProps.current) { - if (!renderIsScheduled.current) { - notifyNestedSubs(); - } - } else { - // Save references to the new child props. Note that we track the "child props from store update" - // as a ref instead of a useState/useReducer because we need a way to determine if that value has - // been processed. If this went into useState/useReducer, we couldn't clear out the value without - // forcing another re-render, which we don't want. - lastChildProps.current = newChildProps; - childPropsFromStoreUpdate.current = newChildProps; - renderIsScheduled.current = true; // TODO This is hacky and not how `uSES` is meant to be used - // Trigger the React `useSyncExternalStore` subscriber - - additionalSubscribeListener(); - } - }; // Actually subscribe to the nearest connected ancestor (or store) - - - subscription.onStateChange = checkForUpdates; - subscription.trySubscribe(); // Pull data from the store after first render in case the store has - // changed since we began. - - checkForUpdates(); - - const unsubscribeWrapper = () => { - didUnsubscribe = true; - subscription.tryUnsubscribe(); - subscription.onStateChange = null; - - if (lastThrownError) { - // It's possible that we caught an error due to a bad mapState function, but the - // parent re-rendered without this component and we're about to unmount. - // This shouldn't happen as long as we do top-down subscriptions correctly, but - // if we ever do those wrong, this throw will surface the error in our tests. - // In that case, throw the error from here so it doesn't get lost. - throw lastThrownError; - } - }; - - return unsubscribeWrapper; -} // Reducer initial state creation for our update reducer - - -const initStateUpdates = () => EMPTY_ARRAY; - -function strictEqual(a, b) { - return a === b; -} -/** - * Infers the type of props that a connector will inject into a component. - */ - - -let hasWarnedAboutDeprecatedPureOption = false; -/** - * Connects a React component to a Redux store. - * - * - Without arguments, just wraps the component, without changing the behavior / props - * - * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior - * is to override ownProps (as stated in the docs), so what remains is everything that's - * not a state or dispatch prop - * - * - When 3rd param is passed, we don't know if ownProps propagate and whether they - * should be valid component props, because it depends on mergeProps implementation. - * As such, it is the user's responsibility to extend ownProps interface from state or - * dispatch props or both when applicable - * - * @param mapStateToProps A function that extracts values from state - * @param mapDispatchToProps Setup for dispatching actions - * @param mergeProps Optional callback to merge state and dispatch props together - * @param options Options for configuring the connection - * - */ - -function connect(mapStateToProps, mapDispatchToProps, mergeProps, { - // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence. - // @ts-ignore - pure, - areStatesEqual = strictEqual, - areOwnPropsEqual = _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_11__["default"], - areStatePropsEqual = _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_11__["default"], - areMergedPropsEqual = _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_11__["default"], - // use React's forwardRef to expose a ref of the wrapped component - forwardRef = false, - // the context consumer to use - context = _Context__WEBPACK_IMPORTED_MODULE_13__["ReactReduxContext"] -} = {}) { - if (false) {} - - const Context = context; - const initMapStateToProps = Object(_connect_mapStateToProps__WEBPACK_IMPORTED_MODULE_7__["mapStateToPropsFactory"])(mapStateToProps); - const initMapDispatchToProps = Object(_connect_mapDispatchToProps__WEBPACK_IMPORTED_MODULE_6__["mapDispatchToPropsFactory"])(mapDispatchToProps); - const initMergeProps = Object(_connect_mergeProps__WEBPACK_IMPORTED_MODULE_8__["mergePropsFactory"])(mergeProps); - const shouldHandleStateChanges = Boolean(mapStateToProps); - - const wrapWithConnect = WrappedComponent => { - if (false) {} - - const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component'; - const displayName = `Connect(${wrappedComponentName})`; - const selectorFactoryOptions = { - shouldHandleStateChanges, - displayName, - wrappedComponentName, - WrappedComponent, - // @ts-ignore - initMapStateToProps, - // @ts-ignore - initMapDispatchToProps, - initMergeProps, - areStatesEqual, - areStatePropsEqual, - areOwnPropsEqual, - areMergedPropsEqual - }; - - function ConnectFunction(props) { - const [propsContext, reactReduxForwardedRef, wrapperProps] = react__WEBPACK_IMPORTED_MODULE_3__["useMemo"](() => { - // Distinguish between actual "data" props that were passed to the wrapper component, - // and values needed to control behavior (forwarded refs, alternate context instances). - // To maintain the wrapperProps object reference, memoize this destructuring. - const { - reactReduxForwardedRef - } = props, - wrapperProps = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded); - - return [props.context, reactReduxForwardedRef, wrapperProps]; - }, [props]); - const ContextToUse = react__WEBPACK_IMPORTED_MODULE_3__["useMemo"](() => { - // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext. - // Memoize the check that determines which context instance we should use. - return propsContext && propsContext.Consumer && // @ts-ignore - Object(react_is__WEBPACK_IMPORTED_MODULE_4__["isContextConsumer"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__["createElement"](propsContext.Consumer, null)) ? propsContext : Context; - }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available - - const contextValue = react__WEBPACK_IMPORTED_MODULE_3__["useContext"](ContextToUse); // The store _must_ exist as either a prop or in context. - // We'll check to see if it _looks_ like a Redux store first. - // This allows us to pass through a `store` prop that is just a plain value. - - const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch); - const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store); - - if (false) {} // Based on the previous check, one of these must be true - - - const store = didStoreComeFromProps ? props.store : contextValue.store; - const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState; - const childPropsSelector = react__WEBPACK_IMPORTED_MODULE_3__["useMemo"](() => { - // The child props selector needs the store reference as an input. - // Re-create this selector whenever the store changes. - return Object(_connect_selectorFactory__WEBPACK_IMPORTED_MODULE_5__["default"])(store.dispatch, selectorFactoryOptions); - }, [store]); - const [subscription, notifyNestedSubs] = react__WEBPACK_IMPORTED_MODULE_3__["useMemo"](() => { - if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component - // connected to the store via props shouldn't use subscription from context, or vice versa. - - const subscription = Object(_utils_Subscription__WEBPACK_IMPORTED_MODULE_9__["createSubscription"])(store, didStoreComeFromProps ? undefined : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in - // the middle of the notification loop, where `subscription` will then be null. This can - // probably be avoided if Subscription's listeners logic is changed to not call listeners - // that have been unsubscribed in the middle of the notification loop. - - const notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription); - return [subscription, notifyNestedSubs]; - }, [store, didStoreComeFromProps, contextValue]); // Determine what {store, subscription} value should be put into nested context, if necessary, - // and memoize that value to avoid unnecessary context updates. - - const overriddenContextValue = react__WEBPACK_IMPORTED_MODULE_3__["useMemo"](() => { - if (didStoreComeFromProps) { - // This component is directly subscribed to a store from props. - // We don't want descendants reading from this store - pass down whatever - // the existing context value is from the nearest connected ancestor. - return contextValue; - } // Otherwise, put this component's subscription instance into context, so that - // connected descendants won't update until after this component is done - - - return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, contextValue, { - subscription - }); - }, [didStoreComeFromProps, contextValue, subscription]); // Set up refs to coordinate values between the subscription effect and the render logic - - const lastChildProps = react__WEBPACK_IMPORTED_MODULE_3__["useRef"](); - const lastWrapperProps = react__WEBPACK_IMPORTED_MODULE_3__["useRef"](wrapperProps); - const childPropsFromStoreUpdate = react__WEBPACK_IMPORTED_MODULE_3__["useRef"](); - const renderIsScheduled = react__WEBPACK_IMPORTED_MODULE_3__["useRef"](false); - const isProcessingDispatch = react__WEBPACK_IMPORTED_MODULE_3__["useRef"](false); - const isMounted = react__WEBPACK_IMPORTED_MODULE_3__["useRef"](false); - const latestSubscriptionCallbackError = react__WEBPACK_IMPORTED_MODULE_3__["useRef"](); - Object(_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_10__["useIsomorphicLayoutEffect"])(() => { - isMounted.current = true; - return () => { - isMounted.current = false; - }; - }, []); - const actualChildPropsSelector = react__WEBPACK_IMPORTED_MODULE_3__["useMemo"](() => { - const selector = () => { - // Tricky logic here: - // - This render may have been triggered by a Redux store update that produced new child props - // - However, we may have gotten new wrapper props after that - // If we have new child props, and the same wrapper props, we know we should use the new child props as-is. - // But, if we have new wrapper props, those might change the child props, so we have to recalculate things. - // So, we'll use the child props from store update only if the wrapper props are the same as last time. - if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) { - return childPropsFromStoreUpdate.current; - } // TODO We're reading the store directly in render() here. Bad idea? - // This will likely cause Bad Things (TM) to happen in Concurrent Mode. - // Note that we do this because on renders _not_ caused by store updates, we need the latest store state - // to determine what the child props should be. - - - return childPropsSelector(store.getState(), wrapperProps); - }; - - return selector; - }, [store, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns - // about useLayoutEffect in SSR, so we try to detect environment and fall back to - // just useEffect instead to avoid the warning, since neither will run anyway. - - const subscribeForReact = react__WEBPACK_IMPORTED_MODULE_3__["useMemo"](() => { - const subscribe = reactListener => { - if (!subscription) { - return () => {}; - } - - return subscribeUpdates(shouldHandleStateChanges, store, subscription, // @ts-ignore - childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, reactListener); - }; - - return subscribe; - }, [subscription]); - useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs]); - let actualChildProps; - - try { - actualChildProps = useSyncExternalStore( // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing - subscribeForReact, // TODO This is incredibly hacky. We've already processed the store update and calculated new child props, - // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`. - actualChildPropsSelector, getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector); - } catch (err) { - if (latestSubscriptionCallbackError.current) { - ; - err.message += `\nThe error may be correlated with this previous error:\n${latestSubscriptionCallbackError.current.stack}\n\n`; - } - - throw err; - } - - Object(_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_10__["useIsomorphicLayoutEffect"])(() => { - latestSubscriptionCallbackError.current = undefined; - childPropsFromStoreUpdate.current = undefined; - lastChildProps.current = actualChildProps; - }); // Now that all that's done, we can finally try to actually render the child component. - // We memoize the elements for the rendered child component as an optimization. - - const renderedWrappedComponent = react__WEBPACK_IMPORTED_MODULE_3__["useMemo"](() => { - return ( - /*#__PURE__*/ - // @ts-ignore - react__WEBPACK_IMPORTED_MODULE_3__["createElement"](WrappedComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, actualChildProps, { - ref: reactReduxForwardedRef - })) - ); - }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering - // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate. - - const renderedChild = react__WEBPACK_IMPORTED_MODULE_3__["useMemo"](() => { - if (shouldHandleStateChanges) { - // If this component is subscribed to store updates, we need to pass its own - // subscription instance down to our descendants. That means rendering the same - // Context instance, and putting a different value into the context. - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__["createElement"](ContextToUse.Provider, { - value: overriddenContextValue - }, renderedWrappedComponent); - } - - return renderedWrappedComponent; - }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]); - return renderedChild; - } - - const _Connect = react__WEBPACK_IMPORTED_MODULE_3__["memo"](ConnectFunction); - - // Add a hacky cast to get the right output type - const Connect = _Connect; - Connect.WrappedComponent = WrappedComponent; - Connect.displayName = ConnectFunction.displayName = displayName; - - if (forwardRef) { - const _forwarded = react__WEBPACK_IMPORTED_MODULE_3__["forwardRef"](function forwardConnectRef(props, ref) { - // @ts-ignore - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__["createElement"](Connect, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { - reactReduxForwardedRef: ref - })); - }); - - const forwarded = _forwarded; - forwarded.displayName = displayName; - forwarded.WrappedComponent = WrappedComponent; - return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default()(forwarded, WrappedComponent); - } - - return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default()(Connect, WrappedComponent); - }; - - return wrapWithConnect; -} - -/* harmony default export */ __webpack_exports__["default"] = (connect); - /***/ }), /***/ "yP5f": @@ -427108,19 +425275,6 @@ __webpack_require__.r(__webpack_exports__); d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z" }), 'IndeterminateCheckBox')); -/***/ }), - -/***/ "zMbt": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -if (true) { - module.exports = __webpack_require__("b83/"); -} else {} - - /***/ }), /***/ "zMfI":