From b71e09aae5972a3ff7a5b1ac14e57a8d19ad2b05 Mon Sep 17 00:00:00 2001 From: Nemanja Komadina Date: Sat, 22 Jul 2023 00:08:29 +0200 Subject: [PATCH] newest update --- asset-manifest.json | 13 ++-- favicon.ico | Bin 3870 -> 106872 bytes index.html | 2 +- logo192.png | Bin 5347 -> 21246 bytes logo512.png | Bin 9664 -> 21246 bytes static/css/main.52cf8da9.css | 2 + static/css/main.52cf8da9.css.map | 1 + static/js/main.7dce2b51.js | 3 + static/js/main.7dce2b51.js.LICENSE.txt | 80 +++++++++++++++++++++++++ static/js/main.7dce2b51.js.map | 1 + 10 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 static/css/main.52cf8da9.css create mode 100644 static/css/main.52cf8da9.css.map create mode 100644 static/js/main.7dce2b51.js create mode 100644 static/js/main.7dce2b51.js.LICENSE.txt create mode 100644 static/js/main.7dce2b51.js.map diff --git a/asset-manifest.json b/asset-manifest.json index 4397f59..5a5db0f 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,18 +1,17 @@ { "files": { - "main.css": "/weather/static/css/main.5831e9e6.css", - "main.js": "/weather/static/js/main.c8dc2ed6.js", - "static/media/background.jpg": "/weather/static/media/background.2390177435c90c41d358.jpg", + "main.css": "/weather/static/css/main.52cf8da9.css", + "main.js": "/weather/static/js/main.7dce2b51.js", "static/media/inter-light.ttf": "/weather/static/media/inter-light.58a136ec3193fa8a63e5.ttf", "static/media/pressure.png": "/weather/static/media/pressure.9dc96c681b9046e5ca60.png", "static/media/humidity.png": "/weather/static/media/humidity.de8a32c7d6d44bb3238e.png", "static/media/sunrise.png": "/weather/static/media/sunrise.0248859f0fe99455222d.png", "index.html": "/weather/index.html", - "main.5831e9e6.css.map": "/weather/static/css/main.5831e9e6.css.map", - "main.c8dc2ed6.js.map": "/weather/static/js/main.c8dc2ed6.js.map" + "main.52cf8da9.css.map": "/weather/static/css/main.52cf8da9.css.map", + "main.7dce2b51.js.map": "/weather/static/js/main.7dce2b51.js.map" }, "entrypoints": [ - "static/css/main.5831e9e6.css", - "static/js/main.c8dc2ed6.js" + "static/css/main.52cf8da9.css", + "static/js/main.7dce2b51.js" ] } \ No newline at end of file diff --git a/favicon.ico b/favicon.ico index a11777cc471a4344702741ab1c8a588998b1311a..eb600a3a0ef29e2d67b15dca844720d0b5c5d9e3 100644 GIT binary patch literal 106872 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 CwA0A| literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/index.html b/index.html index 5085bfc..9d939f3 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Weather
\ No newline at end of file +Weather
\ No newline at end of file diff --git a/logo192.png b/logo192.png index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..e78e3b54a8d01319b12c7d65337446a11e8b6ae2 100644 GIT binary patch literal 21246 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 literal 5347 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 literal 9664 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/static/css/main.52cf8da9.css b/static/css/main.52cf8da9.css new file mode 100644 index 0000000..92a4fb4 --- /dev/null +++ b/static/css/main.52cf8da9.css @@ -0,0 +1,2 @@ +@font-face{font-family:inter;src:url(/weather/static/media/inter-light.58a136ec3193fa8a63e5.ttf)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:linear-gradient(90deg,#2075a2,#4a98fb 35%,#25cefa);font-family:inter;height:100%;margin:0;overflow-x:hidden;padding:0;width:100%}::-webkit-scrollbar{display:none}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}:root{--pozadina:#2c3639;--tekst:#000;--header-footer:#9c9c9c;--tekst2:#fff;--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:#e74c3c;--toastify-color-transparent:hsla(0,0%,100%,.7);--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-toast-width:320px;--toastify-toast-background:#fff;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-light:#757575;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);--toastify-color-progress-dark:#bb86fc;--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error)}.Toastify__toast-container{box-sizing:border-box;color:#fff;padding:4px;position:fixed;-webkit-transform:translate3d(0,0,9999 px);-webkit-transform:translate3d(0,0,var(--toastify-z-index) px);width:320px;width:var(--toastify-toast-width);z-index:9999;z-index:var(--toastify-z-index)}.Toastify__toast-container--top-left{left:1em;top:1em}.Toastify__toast-container--top-center{left:50%;top:1em;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.Toastify__toast-container--top-right{right:1em;top:1em}.Toastify__toast-container--bottom-left{bottom:1em;left:1em}.Toastify__toast-container--bottom-center{bottom:1em;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.Toastify__toast-container--bottom-right{bottom:1em;right:1em}@media only screen and (max-width:480px){.Toastify__toast-container{left:0;margin:0;padding:0;width:100vw}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:0;-webkit-transform:translateX(0);transform:translateX(0)}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:0;-webkit-transform:translateX(0);transform:translateX(0)}.Toastify__toast-container--rtl{left:auto;right:0}}.Toastify__toast{border-radius:4px;box-shadow:0 1px 10px 0 rgba(0,0,0,.1),0 2px 15px 0 rgba(0,0,0,.05);box-sizing:border-box;cursor:pointer;direction:ltr;display:flex;font-family:sans-serif;font-family:var(--toastify-font-family);justify-content:space-between;margin-bottom:1rem;max-height:800px;max-height:var(--toastify-toast-max-height);min-height:64px;min-height:var(--toastify-toast-min-height);overflow:hidden;padding:8px;position:relative;z-index:0}.Toastify__toast--rtl{direction:rtl}.Toastify__toast-body{align-items:center;display:flex;flex:1 1 auto;margin:auto 0;padding:6px}.Toastify__toast-body>div:last-child{flex:1 1}.Toastify__toast-icon{-webkit-margin-end:10px;display:flex;flex-shrink:0;margin-inline-end:10px;width:20px}.Toastify--animate{-webkit-animation-duration:.7s;animation-duration:.7s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.Toastify--animate-icon{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media only screen and (max-width:480px){.Toastify__toast{border-radius:0;margin-bottom:0}}.Toastify__toast-theme--dark{background:#121212;background:var(--toastify-color-dark);color:#fff;color:var(--toastify-text-color-dark)}.Toastify__toast-theme--colored.Toastify__toast--default,.Toastify__toast-theme--light{background:#fff;background:var(--toastify-color-light);color:#757575;color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{background:#3498db;background:var(--toastify-color-info);color:#fff;color:var(--toastify-text-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{background:#07bc0c;background:var(--toastify-color-success);color:#fff;color:var(--toastify-text-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{background:#f1c40f;background:var(--toastify-color-warning);color:#fff;color:var(--toastify-text-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{background:#e74c3c;background:var(--toastify-color-error);color:#fff;color:var(--toastify-text-color-error)}.Toastify__progress-bar-theme--light{background:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:#bb86fc;background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:#3498db;background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:#07bc0c;background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:#f1c40f;background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:#e74c3c;background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning{background:hsla(0,0%,100%,.7);background:var(--toastify-color-transparent)}.Toastify__close-button{align-self:flex-start;background:transparent;border:none;color:#fff;cursor:pointer;opacity:.7;outline:none;padding:0;transition:.3s ease}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@-webkit-keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}@keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}.Toastify__progress-bar{bottom:0;height:5px;left:0;opacity:.7;position:absolute;-webkit-transform-origin:left;transform-origin:left;width:100%;z-index:9999;z-index:var(--toastify-z-index)}.Toastify__progress-bar--animated{-webkit-animation:Toastify__trackProgress linear 1 forwards;animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.Toastify__progress-bar--rtl{left:auto;right:0;-webkit-transform-origin:right;transform-origin:right}.Toastify__spinner{-webkit-animation:Toastify__spin .65s linear infinite;animation:Toastify__spin .65s linear infinite;border:2px solid #e0e0e0;border-color:var(--toastify-spinner-color-empty-area);border-radius:100%;border-right-color:#616161;border-right-color:var(--toastify-spinner-color);box-sizing:border-box;height:20px;width:20px}@-webkit-keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@-webkit-keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@-webkit-keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@-webkit-keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{-webkit-animation-name:Toastify__bounceInLeft;animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{-webkit-animation-name:Toastify__bounceInRight;animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{-webkit-animation-name:Toastify__bounceInDown;animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{-webkit-animation-name:Toastify__bounceInUp;animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{-webkit-animation-name:Toastify__bounceOutLeft;animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{-webkit-animation-name:Toastify__bounceOutRight;animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{-webkit-animation-name:Toastify__bounceOutUp;animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{-webkit-animation-name:Toastify__bounceOutDown;animation-name:Toastify__bounceOutDown}@-webkit-keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-webkit-keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{-webkit-animation-name:Toastify__zoomIn;animation-name:Toastify__zoomIn}.Toastify__zoom-exit{-webkit-animation-name:Toastify__zoomOut;animation-name:Toastify__zoomOut}@-webkit-keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}@keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}.Toastify__flip-enter{-webkit-animation-name:Toastify__flipIn;animation-name:Toastify__flipIn}.Toastify__flip-exit{-webkit-animation-name:Toastify__flipOut;animation-name:Toastify__flipOut}@-webkit-keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}@keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{-webkit-animation-name:Toastify__slideInLeft;animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{-webkit-animation-name:Toastify__slideInRight;animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{-webkit-animation-name:Toastify__slideInDown;animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{-webkit-animation-name:Toastify__slideInUp;animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{-webkit-animation-name:Toastify__slideOutLeft;animation-name:Toastify__slideOutLeft}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{-webkit-animation-name:Toastify__slideOutRight;animation-name:Toastify__slideOutRight}.Toastify__slide-exit--top-center{-webkit-animation-name:Toastify__slideOutUp;animation-name:Toastify__slideOutUp}.Toastify__slide-exit--bottom-center{-webkit-animation-name:Toastify__slideOutDown;animation-name:Toastify__slideOutDown}@-webkit-keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.App{text-align:center}.App-logo{height:40vmin;pointer-events:none}@media (prefers-reduced-motion:no-preference){.App-logo{-webkit-animation:App-logo-spin 20s linear infinite;animation:App-logo-spin 20s linear infinite}}.App-header{align-items:center;background-color:#282c34;color:#fff;display:flex;flex-direction:column;font-size:calc(10px + 2vmin);justify-content:center;min-height:100vh}.App-link{color:#61dafb}@-webkit-keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.grid{align-items:flex-start;display:flex;flex-grow:0;flex-wrap:wrap;gap:3rem;justify-content:space-evenly;margin:100px auto 150px;max-width:1450px}.footer{align-items:center;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);background:hsla(0,0%,100%,.1);border:1px solid hsla(0,0%,100%,.25);bottom:0;box-shadow:0 10px 30px rgba(0,0,0,.18);display:flex;font-size:medium;height:37px;justify-content:center;left:0;position:fixed;width:100%;z-index:100}.footer,.footer-link{color:var(--tekst);text-decoration:none}.footer-link{font-weight:600}.footer-link:hover{color:var(--pozadina)}.wrapper{position:relative}.cityInput{border:none;border-radius:5px;box-sizing:border-box;font-family:inter;font-size:large;padding:8px;width:250px}.cityInput:focus{outline:none}.header{align-items:center;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid hsla(0,0%,100%,.25);font-family:inter;font-size:medium;height:65px;justify-content:center;position:fixed;top:0;width:100%;z-index:1000}.header,.weather-card{background:hsla(0,0%,100%,.1);box-shadow:0 10px 30px rgba(0,0,0,.18);display:flex}.weather-card{backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(10px);border-radius:6px;color:var(--tekst);height:300px;justify-content:space-evenly;width:450px}.city-name{font-size:1.8rem;height:60px;padding-top:20px}.image{width:125px}.icon{font-size:large;margin-bottom:20px}.firstPanel{width:40%}.secondPanel{height:-webkit-max-content;height:max-content;margin-top:15px;width:55%}.secondPanel>*{padding:4px}.descriptionIcon{font-size:2rem}@media screen and (max-width:1000px){.weather-card{margin-right:10px;width:350px}.firstPanel,.weather-card{margin-left:10px}}@media screen and (max-width:350px){.secondPanel{font-size:.9rem}}@media screen and (max-width:280px){.secondPanel{font-size:.8rem}}@media screen and (max-width:350px){.city-name{font-size:1.3rem}.image{width:75px}.descriptionIcon{font-size:1.4rem}}.air-card{backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(10px);background:hsla(0,0%,100%,.1);border-radius:6px;box-shadow:0 4px 30px rgba(0,0,0,.18);color:var(--tekst);display:flex;flex-direction:column;height:auto;justify-content:center;width:450px}.title{font-size:xx-large;font-weight:700;padding:1rem;text-align:center}th{padding:10px}td,th{font-size:large}td{border-top:1px solid var(--tekst);color:var(--tekst);font-weight:700;padding:8px;width:25%}table{border-collapse:collapse;border-radius:8px;border-top:1px solid hsla(0,0%,100%,.25);width:100%}table td,table th{border:1px solid hsla(0,0%,100%,.25)}table tr:first-child th{border-top:0}table tr:last-child td{border-bottom:0}table tr td:first-child,table tr th:first-child{border-left:0}table tr td:last-child,table tr th:last-child{border-right:0}table tr td:first-child:last-child{text-align:left}.link{color:var(--tekst);font-size:small;text-decoration:none}.link:hover{color:var(--pozadina)}@media screen and (max-width:1000px){.air-card{margin-left:10px;margin-right:10px;width:350px}}.sun-info-card{backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(10px);background:hsla(0,0%,100%,.1);border-radius:6px;box-shadow:0 4px 30px rgba(0,0,0,.18);color:var(--tekst);display:flex;flex-direction:row;font-size:large;height:auto;justify-content:flex-start;width:450px}.leftPanel{border-right:1px solid hsla(0,0%,100%,.25);padding-bottom:1rem;padding-left:auto;width:50%}.rightPanel{padding-right:auto;width:50%}.sunrise,.sunset{padding:1rem;width:100px}@media screen and (max-width:1000px){.sun-info-card{margin-left:10px;margin-right:10px;width:350px}}.container{flex-direction:column;overflow-x:scroll}.container,.flexForecast{display:flex;flex-wrap:nowrap}.flexForecast{border-radius:6px;gap:10px;margin-bottom:10px;min-width:100vw}@media (max-width:1100px){.flexForecast>.forecastCard{flex-basis:20%}}@media (max-width:1450px){.container{margin-left:15px;margin-right:15px}}.heading{backdrop-filter:blur(15px);-webkit-backdrop-filter:blur(10px);background:hsla(0,0%,100%,.1);border-radius:6px;box-shadow:0 10px 30px rgba(0,0,0,.18);color:var(--tekst);font-size:x-large;padding:4rem}.date{display:flex;font-size:xx-large;margin-bottom:10px;text-align:left}.margin{display:flex;flex-direction:column;flex-wrap:nowrap;min-width:80vw;overflow-x:scroll}.forecastCard{backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(10px);background:hsla(0,0%,100%,.1);border:1px solid hsla(0,0%,100%,.25);border-radius:6px;box-shadow:0 3px 5px 2px rgba(0,0,0,.18);color:var(--tekst);flex-grow:1;max-width:80px;min-width:80px;padding:10px}.forecastImage{width:50px}.forcastDesc{display:flex;font-size:medium;font-weight:500;justify-content:center;margin-bottom:5px}.tempIcon{height:20px;width:20px}.temp{align-items:flex-end;display:flex;gap:5px;justify-content:center;margin-top:5px}.temp,.time{font-size:medium} +/*# sourceMappingURL=main.52cf8da9.css.map*/ \ No newline at end of file diff --git a/static/css/main.52cf8da9.css.map b/static/css/main.52cf8da9.css.map new file mode 100644 index 0000000..2ac5898 --- /dev/null +++ b/static/css/main.52cf8da9.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/main.52cf8da9.css","mappings":"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","sources":["index.css","../node_modules/react-toastify/scss/_variables.scss","../node_modules/react-toastify/scss/_toastContainer.scss","../node_modules/react-toastify/dist/ReactToastify.css","../node_modules/react-toastify/scss/_toast.scss","../node_modules/react-toastify/scss/_theme.scss","../node_modules/react-toastify/scss/_closeButton.scss","../node_modules/react-toastify/scss/_progressBar.scss","../node_modules/react-toastify/scss/_icons.scss","../node_modules/react-toastify/scss/animations/_bounce.scss","../node_modules/react-toastify/scss/animations/_zoom.scss","../node_modules/react-toastify/scss/animations/_flip.scss","../node_modules/react-toastify/scss/animations/_slide.scss","../node_modules/react-toastify/scss/animations/_spin.scss","App.css","components/footer/footer-style.css","components/city-input/city-input-style.css","components/header/header-style.css","components/weather-card/weather-card-style.css","components/air-pollution/air-pollution-style.css","components/sun-info/sun-info-style.css","components/forecast-list/forecast-list-style.css","components/forecast-card/forecast-card-style.css"],"sourcesContent":["@font-face {\r\n font-family: \"inter\";\r\n src: url(../public/inter-light.ttf);\r\n}\r\n\r\nbody {\r\n width: 100%;\r\n height: 100%;\r\n margin: 0px;\r\n padding: 0px;\r\n overflow-x: hidden;\r\n font-family: \"inter\";\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n background: linear-gradient(90deg, rgba(32,117,162,1) 0%, rgba(74,152,251,1) 35%, rgba(37,206,250,1) 100%);\r\n}\r\n::-webkit-scrollbar {\r\n display: none;\r\n}\r\n\r\ncode {\r\n font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\r\n monospace;\r\n}\r\n:root {\r\n --pozadina: #2c3639;\r\n --tekst: #000000;\r\n --header-footer: #9c9c9c;\r\n --tekst2: #ffffff;\r\n}\r\n","$rt-namespace: 'Toastify';\n$rt-mobile: 'only screen and (max-width : 480px)' !default;\n\n:root {\n --toastify-color-light: #fff;\n --toastify-color-dark: #121212;\n --toastify-color-info: #3498db;\n --toastify-color-success: #07bc0c;\n --toastify-color-warning: #f1c40f;\n --toastify-color-error: #e74c3c;\n --toastify-color-transparent: rgba(255, 255, 255, 0.7);\n\n --toastify-icon-color-info: var(--toastify-color-info);\n --toastify-icon-color-success: var(--toastify-color-success);\n --toastify-icon-color-warning: var(--toastify-color-warning);\n --toastify-icon-color-error: var(--toastify-color-error);\n\n --toastify-toast-width: 320px;\n --toastify-toast-background: #fff;\n --toastify-toast-min-height: 64px;\n --toastify-toast-max-height: 800px;\n --toastify-font-family: sans-serif;\n --toastify-z-index: 9999;\n\n --toastify-text-color-light: #757575;\n --toastify-text-color-dark: #fff;\n\n //Used only for colored theme\n --toastify-text-color-info: #fff;\n --toastify-text-color-success: #fff;\n --toastify-text-color-warning: #fff;\n --toastify-text-color-error: #fff;\n\n --toastify-spinner-color: #616161;\n --toastify-spinner-color-empty-area: #e0e0e0;\n\n // Used when no type is provided\n --toastify-color-progress-light: linear-gradient(\n to right,\n #4cd964,\n #5ac8fa,\n #007aff,\n #34aadc,\n #5856d6,\n #ff2d55\n );\n // Used when no type is provided\n --toastify-color-progress-dark: #bb86fc;\n --toastify-color-progress-info: var(--toastify-color-info);\n --toastify-color-progress-success: var(--toastify-color-success);\n --toastify-color-progress-warning: var(--toastify-color-warning);\n --toastify-color-progress-error: var(--toastify-color-error);\n}\n",".#{$rt-namespace}__toast-container {\n z-index: var(--toastify-z-index);\n -webkit-transform: translate3d(0, 0, var(--toastify-z-index) px);\n position: fixed;\n padding: 4px;\n width: var(--toastify-toast-width);\n box-sizing: border-box;\n color: #fff;\n &--top-left {\n top: 1em;\n left: 1em;\n }\n &--top-center {\n top: 1em;\n left: 50%;\n transform: translateX(-50%);\n }\n &--top-right {\n top: 1em;\n right: 1em;\n }\n &--bottom-left {\n bottom: 1em;\n left: 1em;\n }\n &--bottom-center {\n bottom: 1em;\n left: 50%;\n transform: translateX(-50%);\n }\n &--bottom-right {\n bottom: 1em;\n right: 1em;\n }\n}\n\n@media #{$rt-mobile} {\n .#{$rt-namespace}__toast-container {\n width: 100vw;\n padding: 0;\n left: 0;\n margin: 0;\n &--top-left,\n &--top-center,\n &--top-right {\n top: 0;\n transform: translateX(0);\n }\n &--bottom-left,\n &--bottom-center,\n &--bottom-right {\n bottom: 0;\n transform: translateX(0);\n }\n &--rtl {\n right: 0;\n left: initial;\n }\n }\n}\n",":root {\n --toastify-color-light: #fff;\n --toastify-color-dark: #121212;\n --toastify-color-info: #3498db;\n --toastify-color-success: #07bc0c;\n --toastify-color-warning: #f1c40f;\n --toastify-color-error: #e74c3c;\n --toastify-color-transparent: rgba(255, 255, 255, 0.7);\n --toastify-icon-color-info: var(--toastify-color-info);\n --toastify-icon-color-success: var(--toastify-color-success);\n --toastify-icon-color-warning: var(--toastify-color-warning);\n --toastify-icon-color-error: var(--toastify-color-error);\n --toastify-toast-width: 320px;\n --toastify-toast-background: #fff;\n --toastify-toast-min-height: 64px;\n --toastify-toast-max-height: 800px;\n --toastify-font-family: sans-serif;\n --toastify-z-index: 9999;\n --toastify-text-color-light: #757575;\n --toastify-text-color-dark: #fff;\n --toastify-text-color-info: #fff;\n --toastify-text-color-success: #fff;\n --toastify-text-color-warning: #fff;\n --toastify-text-color-error: #fff;\n --toastify-spinner-color: #616161;\n --toastify-spinner-color-empty-area: #e0e0e0;\n --toastify-color-progress-light: linear-gradient(\n to right,\n #4cd964,\n #5ac8fa,\n #007aff,\n #34aadc,\n #5856d6,\n #ff2d55\n );\n --toastify-color-progress-dark: #bb86fc;\n --toastify-color-progress-info: var(--toastify-color-info);\n --toastify-color-progress-success: var(--toastify-color-success);\n --toastify-color-progress-warning: var(--toastify-color-warning);\n --toastify-color-progress-error: var(--toastify-color-error);\n}\n\n.Toastify__toast-container {\n z-index: var(--toastify-z-index);\n -webkit-transform: translate3d(0, 0, var(--toastify-z-index) px);\n position: fixed;\n padding: 4px;\n width: var(--toastify-toast-width);\n box-sizing: border-box;\n color: #fff;\n}\n.Toastify__toast-container--top-left {\n top: 1em;\n left: 1em;\n}\n.Toastify__toast-container--top-center {\n top: 1em;\n left: 50%;\n transform: translateX(-50%);\n}\n.Toastify__toast-container--top-right {\n top: 1em;\n right: 1em;\n}\n.Toastify__toast-container--bottom-left {\n bottom: 1em;\n left: 1em;\n}\n.Toastify__toast-container--bottom-center {\n bottom: 1em;\n left: 50%;\n transform: translateX(-50%);\n}\n.Toastify__toast-container--bottom-right {\n bottom: 1em;\n right: 1em;\n}\n\n@media only screen and (max-width : 480px) {\n .Toastify__toast-container {\n width: 100vw;\n padding: 0;\n left: 0;\n margin: 0;\n }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .Toastify__toast-container--top-right {\n top: 0;\n transform: translateX(0);\n }\n .Toastify__toast-container--bottom-left, .Toastify__toast-container--bottom-center, .Toastify__toast-container--bottom-right {\n bottom: 0;\n transform: translateX(0);\n }\n .Toastify__toast-container--rtl {\n right: 0;\n left: initial;\n }\n}\n.Toastify__toast {\n position: relative;\n min-height: var(--toastify-toast-min-height);\n box-sizing: border-box;\n margin-bottom: 1rem;\n padding: 8px;\n border-radius: 4px;\n box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.1), 0 2px 15px 0 rgba(0, 0, 0, 0.05);\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: justify;\n justify-content: space-between;\n max-height: var(--toastify-toast-max-height);\n overflow: hidden;\n font-family: var(--toastify-font-family);\n cursor: pointer;\n direction: ltr;\n /* webkit only issue #791 */\n z-index: 0;\n}\n.Toastify__toast--rtl {\n direction: rtl;\n}\n.Toastify__toast-body {\n margin: auto 0;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n padding: 6px;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n}\n.Toastify__toast-body > div:last-child {\n -ms-flex: 1;\n flex: 1;\n}\n.Toastify__toast-icon {\n -webkit-margin-end: 10px;\n margin-inline-end: 10px;\n width: 20px;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n display: -ms-flexbox;\n display: flex;\n}\n\n.Toastify--animate {\n animation-fill-mode: both;\n animation-duration: 0.7s;\n}\n\n.Toastify--animate-icon {\n animation-fill-mode: both;\n animation-duration: 0.3s;\n}\n\n@media only screen and (max-width : 480px) {\n .Toastify__toast {\n margin-bottom: 0;\n border-radius: 0;\n }\n}\n.Toastify__toast-theme--dark {\n background: var(--toastify-color-dark);\n color: var(--toastify-text-color-dark);\n}\n.Toastify__toast-theme--light {\n background: var(--toastify-color-light);\n color: var(--toastify-text-color-light);\n}\n.Toastify__toast-theme--colored.Toastify__toast--default {\n background: var(--toastify-color-light);\n color: var(--toastify-text-color-light);\n}\n.Toastify__toast-theme--colored.Toastify__toast--info {\n color: var(--toastify-text-color-info);\n background: var(--toastify-color-info);\n}\n.Toastify__toast-theme--colored.Toastify__toast--success {\n color: var(--toastify-text-color-success);\n background: var(--toastify-color-success);\n}\n.Toastify__toast-theme--colored.Toastify__toast--warning {\n color: var(--toastify-text-color-warning);\n background: var(--toastify-color-warning);\n}\n.Toastify__toast-theme--colored.Toastify__toast--error {\n color: var(--toastify-text-color-error);\n background: var(--toastify-color-error);\n}\n\n.Toastify__progress-bar-theme--light {\n background: var(--toastify-color-progress-light);\n}\n.Toastify__progress-bar-theme--dark {\n background: var(--toastify-color-progress-dark);\n}\n.Toastify__progress-bar--info {\n background: var(--toastify-color-progress-info);\n}\n.Toastify__progress-bar--success {\n background: var(--toastify-color-progress-success);\n}\n.Toastify__progress-bar--warning {\n background: var(--toastify-color-progress-warning);\n}\n.Toastify__progress-bar--error {\n background: var(--toastify-color-progress-error);\n}\n.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info, .Toastify__progress-bar-theme--colored.Toastify__progress-bar--success, .Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning, .Toastify__progress-bar-theme--colored.Toastify__progress-bar--error {\n background: var(--toastify-color-transparent);\n}\n\n.Toastify__close-button {\n color: #fff;\n background: transparent;\n outline: none;\n border: none;\n padding: 0;\n cursor: pointer;\n opacity: 0.7;\n transition: 0.3s ease;\n -ms-flex-item-align: start;\n align-self: flex-start;\n}\n.Toastify__close-button--light {\n color: #000;\n opacity: 0.3;\n}\n.Toastify__close-button > svg {\n fill: currentColor;\n height: 16px;\n width: 14px;\n}\n.Toastify__close-button:hover, .Toastify__close-button:focus {\n opacity: 1;\n}\n\n@keyframes Toastify__trackProgress {\n 0% {\n transform: scaleX(1);\n }\n 100% {\n transform: scaleX(0);\n }\n}\n.Toastify__progress-bar {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 5px;\n z-index: var(--toastify-z-index);\n opacity: 0.7;\n transform-origin: left;\n}\n.Toastify__progress-bar--animated {\n animation: Toastify__trackProgress linear 1 forwards;\n}\n.Toastify__progress-bar--controlled {\n transition: transform 0.2s;\n}\n.Toastify__progress-bar--rtl {\n right: 0;\n left: initial;\n transform-origin: right;\n}\n\n.Toastify__spinner {\n width: 20px;\n height: 20px;\n box-sizing: border-box;\n border: 2px solid;\n border-radius: 100%;\n border-color: var(--toastify-spinner-color-empty-area);\n border-right-color: var(--toastify-spinner-color);\n animation: Toastify__spin 0.65s linear infinite;\n}\n\n@keyframes Toastify__bounceInRight {\n from, 60%, 75%, 90%, to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n from {\n opacity: 0;\n transform: translate3d(3000px, 0, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(-25px, 0, 0);\n }\n 75% {\n transform: translate3d(10px, 0, 0);\n }\n 90% {\n transform: translate3d(-5px, 0, 0);\n }\n to {\n transform: none;\n }\n}\n@keyframes Toastify__bounceOutRight {\n 20% {\n opacity: 1;\n transform: translate3d(-20px, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(2000px, 0, 0);\n }\n}\n@keyframes Toastify__bounceInLeft {\n from, 60%, 75%, 90%, to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n 0% {\n opacity: 0;\n transform: translate3d(-3000px, 0, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(25px, 0, 0);\n }\n 75% {\n transform: translate3d(-10px, 0, 0);\n }\n 90% {\n transform: translate3d(5px, 0, 0);\n }\n to {\n transform: none;\n }\n}\n@keyframes Toastify__bounceOutLeft {\n 20% {\n opacity: 1;\n transform: translate3d(20px, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(-2000px, 0, 0);\n }\n}\n@keyframes Toastify__bounceInUp {\n from, 60%, 75%, 90%, to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n from {\n opacity: 0;\n transform: translate3d(0, 3000px, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(0, -20px, 0);\n }\n 75% {\n transform: translate3d(0, 10px, 0);\n }\n 90% {\n transform: translate3d(0, -5px, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__bounceOutUp {\n 20% {\n transform: translate3d(0, -10px, 0);\n }\n 40%, 45% {\n opacity: 1;\n transform: translate3d(0, 20px, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(0, -2000px, 0);\n }\n}\n@keyframes Toastify__bounceInDown {\n from, 60%, 75%, 90%, to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n 0% {\n opacity: 0;\n transform: translate3d(0, -3000px, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(0, 25px, 0);\n }\n 75% {\n transform: translate3d(0, -10px, 0);\n }\n 90% {\n transform: translate3d(0, 5px, 0);\n }\n to {\n transform: none;\n }\n}\n@keyframes Toastify__bounceOutDown {\n 20% {\n transform: translate3d(0, 10px, 0);\n }\n 40%, 45% {\n opacity: 1;\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(0, 2000px, 0);\n }\n}\n.Toastify__bounce-enter--top-left, .Toastify__bounce-enter--bottom-left {\n animation-name: Toastify__bounceInLeft;\n}\n.Toastify__bounce-enter--top-right, .Toastify__bounce-enter--bottom-right {\n animation-name: Toastify__bounceInRight;\n}\n.Toastify__bounce-enter--top-center {\n animation-name: Toastify__bounceInDown;\n}\n.Toastify__bounce-enter--bottom-center {\n animation-name: Toastify__bounceInUp;\n}\n\n.Toastify__bounce-exit--top-left, .Toastify__bounce-exit--bottom-left {\n animation-name: Toastify__bounceOutLeft;\n}\n.Toastify__bounce-exit--top-right, .Toastify__bounce-exit--bottom-right {\n animation-name: Toastify__bounceOutRight;\n}\n.Toastify__bounce-exit--top-center {\n animation-name: Toastify__bounceOutUp;\n}\n.Toastify__bounce-exit--bottom-center {\n animation-name: Toastify__bounceOutDown;\n}\n\n@keyframes Toastify__zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3);\n }\n 50% {\n opacity: 1;\n }\n}\n@keyframes Toastify__zoomOut {\n from {\n opacity: 1;\n }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3);\n }\n to {\n opacity: 0;\n }\n}\n.Toastify__zoom-enter {\n animation-name: Toastify__zoomIn;\n}\n\n.Toastify__zoom-exit {\n animation-name: Toastify__zoomOut;\n}\n\n@keyframes Toastify__flipIn {\n from {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n animation-timing-function: ease-in;\n opacity: 0;\n }\n 40% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n animation-timing-function: ease-in;\n }\n 60% {\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n opacity: 1;\n }\n 80% {\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n }\n to {\n transform: perspective(400px);\n }\n}\n@keyframes Toastify__flipOut {\n from {\n transform: perspective(400px);\n }\n 30% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n opacity: 1;\n }\n to {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n opacity: 0;\n }\n}\n.Toastify__flip-enter {\n animation-name: Toastify__flipIn;\n}\n\n.Toastify__flip-exit {\n animation-name: Toastify__flipOut;\n}\n\n@keyframes Toastify__slideInRight {\n from {\n transform: translate3d(110%, 0, 0);\n visibility: visible;\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__slideInLeft {\n from {\n transform: translate3d(-110%, 0, 0);\n visibility: visible;\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__slideInUp {\n from {\n transform: translate3d(0, 110%, 0);\n visibility: visible;\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__slideInDown {\n from {\n transform: translate3d(0, -110%, 0);\n visibility: visible;\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__slideOutRight {\n from {\n transform: translate3d(0, 0, 0);\n }\n to {\n visibility: hidden;\n transform: translate3d(110%, 0, 0);\n }\n}\n@keyframes Toastify__slideOutLeft {\n from {\n transform: translate3d(0, 0, 0);\n }\n to {\n visibility: hidden;\n transform: translate3d(-110%, 0, 0);\n }\n}\n@keyframes Toastify__slideOutDown {\n from {\n transform: translate3d(0, 0, 0);\n }\n to {\n visibility: hidden;\n transform: translate3d(0, 500px, 0);\n }\n}\n@keyframes Toastify__slideOutUp {\n from {\n transform: translate3d(0, 0, 0);\n }\n to {\n visibility: hidden;\n transform: translate3d(0, -500px, 0);\n }\n}\n.Toastify__slide-enter--top-left, .Toastify__slide-enter--bottom-left {\n animation-name: Toastify__slideInLeft;\n}\n.Toastify__slide-enter--top-right, .Toastify__slide-enter--bottom-right {\n animation-name: Toastify__slideInRight;\n}\n.Toastify__slide-enter--top-center {\n animation-name: Toastify__slideInDown;\n}\n.Toastify__slide-enter--bottom-center {\n animation-name: Toastify__slideInUp;\n}\n\n.Toastify__slide-exit--top-left, .Toastify__slide-exit--bottom-left {\n animation-name: Toastify__slideOutLeft;\n}\n.Toastify__slide-exit--top-right, .Toastify__slide-exit--bottom-right {\n animation-name: Toastify__slideOutRight;\n}\n.Toastify__slide-exit--top-center {\n animation-name: Toastify__slideOutUp;\n}\n.Toastify__slide-exit--bottom-center {\n animation-name: Toastify__slideOutDown;\n}\n\n@keyframes Toastify__spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/*# sourceMappingURL=ReactToastify.css.map */",".#{$rt-namespace}__toast {\n position: relative;\n min-height: var(--toastify-toast-min-height);\n box-sizing: border-box;\n margin-bottom: 1rem;\n padding: 8px;\n border-radius: 4px;\n box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.1), 0 2px 15px 0 rgba(0, 0, 0, 0.05);\n display: flex;\n justify-content: space-between;\n max-height: var(--toastify-toast-max-height);\n overflow: hidden;\n font-family: var(--toastify-font-family);\n cursor: pointer;\n direction: ltr;\n /* webkit only issue #791 */\n z-index: 0;\n &--rtl {\n direction: rtl;\n }\n &-body {\n margin: auto 0;\n flex: 1 1 auto;\n padding: 6px;\n display: flex;\n align-items: center;\n & > div:last-child {\n flex: 1;\n }\n }\n &-icon {\n margin-inline-end: 10px;\n width: 20px;\n flex-shrink: 0;\n display: flex;\n }\n}\n\n.#{$rt-namespace}--animate {\n animation-fill-mode: both;\n animation-duration: 0.7s;\n}\n\n.#{$rt-namespace}--animate-icon {\n animation-fill-mode: both;\n animation-duration: 0.3s;\n}\n\n@media #{$rt-mobile} {\n .#{$rt-namespace}__toast {\n margin-bottom: 0;\n border-radius: 0;\n }\n}\n",".#{$rt-namespace}__toast {\n &-theme--dark {\n background: var(--toastify-color-dark);\n color: var(--toastify-text-color-dark);\n }\n &-theme--light {\n background: var(--toastify-color-light);\n color: var(--toastify-text-color-light);\n }\n &-theme--colored#{&}--default {\n background: var(--toastify-color-light);\n color: var(--toastify-text-color-light);\n }\n &-theme--colored#{&}--info {\n color: var(--toastify-text-color-info);\n background: var(--toastify-color-info);\n }\n &-theme--colored#{&}--success {\n color: var(--toastify-text-color-success);\n background: var(--toastify-color-success);\n }\n &-theme--colored#{&}--warning {\n color: var(--toastify-text-color-warning);\n background: var(--toastify-color-warning);\n }\n &-theme--colored#{&}--error {\n color: var(--toastify-text-color-error);\n background: var(--toastify-color-error);\n }\n}\n\n.#{$rt-namespace}__progress-bar {\n &-theme--light {\n background: var(--toastify-color-progress-light);\n }\n &-theme--dark {\n background: var(--toastify-color-progress-dark);\n }\n &--info {\n background: var(--toastify-color-progress-info);\n }\n &--success {\n background: var(--toastify-color-progress-success);\n }\n &--warning {\n background: var(--toastify-color-progress-warning);\n }\n &--error {\n background: var(--toastify-color-progress-error);\n }\n &-theme--colored#{&}--info,\n &-theme--colored#{&}--success,\n &-theme--colored#{&}--warning,\n &-theme--colored#{&}--error {\n background: var(--toastify-color-transparent);\n }\n}\n",".#{$rt-namespace}__close-button {\n color: #fff;\n background: transparent;\n outline: none;\n border: none;\n padding: 0;\n cursor: pointer;\n opacity: 0.7;\n transition: 0.3s ease;\n align-self: flex-start;\n\n &--light {\n color: #000;\n opacity: 0.3;\n }\n\n & > svg {\n fill: currentColor;\n height: 16px;\n width: 14px;\n }\n\n &:hover,\n &:focus {\n opacity: 1;\n }\n}\n","@keyframes #{$rt-namespace}__trackProgress {\n 0% {\n transform: scaleX(1);\n }\n 100% {\n transform: scaleX(0);\n }\n}\n\n.#{$rt-namespace}__progress-bar {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 5px;\n z-index: var(--toastify-z-index);\n opacity: 0.7;\n transform-origin: left;\n\n &--animated {\n animation: #{$rt-namespace}__trackProgress linear 1 forwards;\n }\n\n &--controlled {\n transition: transform 0.2s;\n }\n\n &--rtl {\n right: 0;\n left: initial;\n transform-origin: right;\n }\n}\n",".#{$rt-namespace}__spinner {\n width: 20px;\n height: 20px;\n box-sizing: border-box;\n border: 2px solid;\n border-radius: 100%;\n border-color: var(--toastify-spinner-color-empty-area);\n border-right-color: var(--toastify-spinner-color);\n animation: #{$rt-namespace}__spin 0.65s linear infinite;\n}\n","@mixin timing-function {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n\n@keyframes #{$rt-namespace}__bounceInRight {\n from,\n 60%,\n 75%,\n 90%,\n to {\n @include timing-function;\n }\n from {\n opacity: 0;\n transform: translate3d(3000px, 0, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(-25px, 0, 0);\n }\n 75% {\n transform: translate3d(10px, 0, 0);\n }\n 90% {\n transform: translate3d(-5px, 0, 0);\n }\n to {\n transform: none;\n }\n}\n\n@keyframes #{$rt-namespace}__bounceOutRight {\n 20% {\n opacity: 1;\n transform: translate3d(-20px, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(2000px, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__bounceInLeft {\n from,\n 60%,\n 75%,\n 90%,\n to {\n @include timing-function;\n }\n 0% {\n opacity: 0;\n transform: translate3d(-3000px, 0, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(25px, 0, 0);\n }\n 75% {\n transform: translate3d(-10px, 0, 0);\n }\n 90% {\n transform: translate3d(5px, 0, 0);\n }\n to {\n transform: none;\n }\n}\n\n@keyframes #{$rt-namespace}__bounceOutLeft {\n 20% {\n opacity: 1;\n transform: translate3d(20px, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(-2000px, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__bounceInUp {\n from,\n 60%,\n 75%,\n 90%,\n to {\n @include timing-function;\n }\n from {\n opacity: 0;\n transform: translate3d(0, 3000px, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(0, -20px, 0);\n }\n 75% {\n transform: translate3d(0, 10px, 0);\n }\n 90% {\n transform: translate3d(0, -5px, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__bounceOutUp {\n 20% {\n transform: translate3d(0, -10px, 0);\n }\n 40%,\n 45% {\n opacity: 1;\n transform: translate3d(0, 20px, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(0, -2000px, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__bounceInDown {\n from,\n 60%,\n 75%,\n 90%,\n to {\n @include timing-function;\n }\n 0% {\n opacity: 0;\n transform: translate3d(0, -3000px, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(0, 25px, 0);\n }\n 75% {\n transform: translate3d(0, -10px, 0);\n }\n 90% {\n transform: translate3d(0, 5px, 0);\n }\n to {\n transform: none;\n }\n}\n\n@keyframes #{$rt-namespace}__bounceOutDown {\n 20% {\n transform: translate3d(0, 10px, 0);\n }\n 40%,\n 45% {\n opacity: 1;\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(0, 2000px, 0);\n }\n}\n\n.#{$rt-namespace}__bounce-enter {\n &--top-left,\n &--bottom-left {\n animation-name: #{$rt-namespace}__bounceInLeft;\n }\n &--top-right,\n &--bottom-right {\n animation-name: #{$rt-namespace}__bounceInRight;\n }\n &--top-center {\n animation-name: #{$rt-namespace}__bounceInDown;\n }\n &--bottom-center {\n animation-name: #{$rt-namespace}__bounceInUp;\n }\n}\n\n.#{$rt-namespace}__bounce-exit {\n &--top-left,\n &--bottom-left {\n animation-name: #{$rt-namespace}__bounceOutLeft;\n }\n &--top-right,\n &--bottom-right {\n animation-name: #{$rt-namespace}__bounceOutRight;\n }\n &--top-center {\n animation-name: #{$rt-namespace}__bounceOutUp;\n }\n &--bottom-center {\n animation-name: #{$rt-namespace}__bounceOutDown;\n }\n}\n","@keyframes #{$rt-namespace}__zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3);\n }\n 50% {\n opacity: 1;\n }\n}\n\n@keyframes #{$rt-namespace}__zoomOut {\n from {\n opacity: 1;\n }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3);\n }\n to {\n opacity: 0;\n }\n}\n\n.#{$rt-namespace}__zoom-enter {\n animation-name: #{$rt-namespace}__zoomIn;\n}\n\n.#{$rt-namespace}__zoom-exit {\n animation-name: #{$rt-namespace}__zoomOut;\n}\n","@keyframes #{$rt-namespace}__flipIn {\n from {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n animation-timing-function: ease-in;\n opacity: 0;\n }\n 40% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n animation-timing-function: ease-in;\n }\n 60% {\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n opacity: 1;\n }\n 80% {\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n }\n to {\n transform: perspective(400px);\n }\n}\n\n@keyframes #{$rt-namespace}__flipOut {\n from {\n transform: perspective(400px);\n }\n 30% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n opacity: 1;\n }\n to {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n opacity: 0;\n }\n}\n\n.#{$rt-namespace}__flip-enter {\n animation-name: #{$rt-namespace}__flipIn;\n}\n\n.#{$rt-namespace}__flip-exit {\n animation-name: #{$rt-namespace}__flipOut;\n}\n","@mixin transform {\n transform: translate3d(0, 0, 0);\n}\n\n@keyframes #{$rt-namespace}__slideInRight {\n from {\n transform: translate3d(110%, 0, 0);\n visibility: visible;\n }\n to {\n @include transform;\n }\n}\n\n@keyframes #{$rt-namespace}__slideInLeft {\n from {\n transform: translate3d(-110%, 0, 0);\n visibility: visible;\n }\n to {\n @include transform;\n }\n}\n\n@keyframes #{$rt-namespace}__slideInUp {\n from {\n transform: translate3d(0, 110%, 0);\n visibility: visible;\n }\n to {\n @include transform;\n }\n}\n\n@keyframes #{$rt-namespace}__slideInDown {\n from {\n transform: translate3d(0, -110%, 0);\n visibility: visible;\n }\n to {\n @include transform;\n }\n}\n\n@keyframes #{$rt-namespace}__slideOutRight {\n from {\n @include transform;\n }\n to {\n visibility: hidden;\n transform: translate3d(110%, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__slideOutLeft {\n from {\n @include transform;\n }\n to {\n visibility: hidden;\n transform: translate3d(-110%, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__slideOutDown {\n from {\n @include transform;\n }\n to {\n visibility: hidden;\n transform: translate3d(0, 500px, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__slideOutUp {\n from {\n @include transform;\n }\n to {\n visibility: hidden;\n transform: translate3d(0, -500px, 0);\n }\n}\n\n.#{$rt-namespace}__slide-enter {\n &--top-left,\n &--bottom-left {\n animation-name: #{$rt-namespace}__slideInLeft;\n }\n &--top-right,\n &--bottom-right {\n animation-name: #{$rt-namespace}__slideInRight;\n }\n &--top-center {\n animation-name: #{$rt-namespace}__slideInDown;\n }\n &--bottom-center {\n animation-name: #{$rt-namespace}__slideInUp;\n }\n}\n\n.#{$rt-namespace}__slide-exit {\n &--top-left,\n &--bottom-left {\n animation-name: #{$rt-namespace}__slideOutLeft;\n }\n &--top-right,\n &--bottom-right {\n animation-name: #{$rt-namespace}__slideOutRight;\n }\n &--top-center {\n animation-name: #{$rt-namespace}__slideOutUp;\n }\n &--bottom-center {\n animation-name: #{$rt-namespace}__slideOutDown;\n }\n}\n","@keyframes #{$rt-namespace}__spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n",".App {\n text-align: center;\n}\n\n.App-logo {\n height: 40vmin;\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .App-logo {\n animation: App-logo-spin infinite 20s linear;\n }\n}\n\n.App-header {\n background-color: #282c34;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n color: white;\n}\n\n.App-link {\n color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.grid {\n display: flex;\n gap: 3rem;\n align-items: flex-start;\n flex-wrap: wrap;\n justify-content: space-evenly;\n max-width: 1450px;\n margin-left: auto;\n margin-right: auto;\n margin-top: 100px;\n margin-bottom: 150px;\n flex-grow: 0;\n}\n",".footer {\r\n position: fixed;\r\n left: 0;\r\n bottom: 0;\r\n z-index: 100;\r\n width: 100%;\r\n height: 37px;\r\n text-decoration: none;\r\n color: var(--tekst);\r\n font-size: medium;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border: 1px solid rgba(255, 255, 255, 0.25);\r\n background: rgba(255, 255, 255, 0.1);\r\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.18);\r\n backdrop-filter: blur(10px);\r\n -webkit-backdrop-filter: blur(10px);\r\n}\r\n.footer-link {\r\n color: var(--tekst);\r\n text-decoration: none;\r\n font-weight: 600;\r\n}\r\n\r\n.footer-link:hover {\r\n color: var(--pozadina);\r\n}\r\n",".wrapper {\r\n position: relative;\r\n}\r\n.cityInput {\r\n box-sizing: border-box;\r\n width: 250px;\r\n font-size: large;\r\n border: none;\r\n border-radius: 5px;\r\n padding: 8px;\r\n font-family: \"inter\";\r\n}\r\n.cityInput:focus {\r\n outline: none;\r\n}\r\n",".header {\r\n height: 65px;\r\n font-size: medium;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-family: \"inter\";\r\n position: fixed;\r\n z-index: 1000;\r\n top: 0%;\r\n width: 100%;\r\n border: 1px solid rgba(255, 255, 255, 0.25);\r\n background: rgba(255, 255, 255, 0.1);\r\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.18);\r\n backdrop-filter: blur(10px);\r\n -webkit-backdrop-filter: blur(10px);\r\n}\r\n",".weather-card {\r\n border-radius: 6px;\r\n /**/\r\n background: rgba(255, 255, 255, 0.1);\r\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.18);\r\n backdrop-filter: blur(20px);\r\n -webkit-backdrop-filter: blur(10px);\r\n color: var(--tekst);\r\n width: 450px;\r\n height: 300px;\r\n display: flex;\r\n justify-content: space-evenly;\r\n}\r\n\r\n.city-name {\r\n font-size: 1.8rem;\r\n padding-top: 20px;\r\n height: 60px;\r\n}\r\n.image {\r\n width: 125px;\r\n}\r\n.icon {\r\n margin-bottom: 20px;\r\n font-size: large;\r\n}\r\n.firstPanel {\r\n width: 40%;\r\n}\r\n.secondPanel {\r\n height: max-content;\r\n margin-top: 15px;\r\n width: 55%;\r\n}\r\n.secondPanel > * {\r\n padding: 4px;\r\n}\r\n.descriptionIcon {\r\n font-size: 2rem;\r\n}\r\n@media screen and (max-width: 1000px) {\r\n .weather-card {\r\n width: 350px;\r\n margin-left: 10px;\r\n margin-right: 10px;\r\n }\r\n .firstPanel {\r\n margin-left: 10px;\r\n }\r\n}\r\n@media screen and (max-width: 350px) {\r\n .secondPanel {\r\n font-size: 0.9rem;\r\n }\r\n}\r\n@media screen and (max-width: 280px) {\r\n .secondPanel {\r\n font-size: 0.8rem;\r\n }\r\n}\r\n@media screen and (max-width: 350px) {\r\n .city-name {\r\n font-size: 1.3rem;\r\n }\r\n .image {\r\n width: 75px;\r\n }\r\n .descriptionIcon {\r\n font-size: 1.4rem;\r\n }\r\n}\r\n",".air-card {\r\n border-radius: 6px;\r\n /**/\r\n background: rgba(255, 255, 255, 0.1);\r\n box-shadow: 0 4px 30px rgba(0, 0, 0, 0.18);\r\n backdrop-filter: blur(20px);\r\n -webkit-backdrop-filter: blur(10px);\r\n color: var(--tekst);\r\n width: 450px;\r\n height: auto;\r\n\r\n display: flex;\r\n justify-content: center;\r\n flex-direction: column;\r\n}\r\n\r\n.title {\r\n font-size: xx-large;\r\n font-weight: 700;\r\n text-align: center;\r\n padding: 1rem;\r\n}\r\nth {\r\n padding: 10px;\r\n font-size: large;\r\n}\r\ntd {\r\n padding: 8px;\r\n border-top: 1px solid var(--tekst);\r\n font-size: large;\r\n font-weight: 700;\r\n color: var(--tekst);\r\n width: 25%;\r\n}\r\ntable {\r\n border-collapse: collapse;\r\n border-top: 1px solid rgba(255, 255, 255, 0.25);\r\n width: 100%;\r\n border-radius: 8px;\r\n}\r\ntable td,\r\ntable th {\r\n border: 1px solid rgba(255, 255, 255, 0.25);\r\n}\r\ntable tr:first-child th {\r\n border-top: 0;\r\n}\r\ntable tr:last-child td {\r\n border-bottom: 0;\r\n}\r\ntable tr td:first-child,\r\ntable tr th:first-child {\r\n border-left: 0;\r\n}\r\ntable tr td:last-child,\r\ntable tr th:last-child {\r\n border-right: 0;\r\n}\r\ntable tr td:first-child:last-child {\r\n text-align: left;\r\n}\r\n\r\n.link {\r\n font-size: small;\r\n color: var(--tekst);\r\n text-decoration: none;\r\n}\r\n.link:hover {\r\n color: var(--pozadina);\r\n}\r\n@media screen and (max-width: 1000px) {\r\n .air-card {\r\n width: 350px;\r\n margin-left: 10px;\r\n margin-right: 10px;\r\n }\r\n}\r\n",".sun-info-card {\r\n border-radius: 6px;\r\n /**/\r\n background: rgba(255, 255, 255, 0.1);\r\n box-shadow: 0 4px 30px rgba(0, 0, 0, 0.18);\r\n backdrop-filter: blur(20px);\r\n -webkit-backdrop-filter: blur(10px);\r\n color: var(--tekst);\r\n width: 450px;\r\n height: auto;\r\n display: flex;\r\n justify-content: flex-start;\r\n flex-direction: row;\r\n font-size: large;\r\n}\r\n.leftPanel {\r\n padding-left: auto;\r\n border-right: 1px solid rgba(255, 255, 255, 0.25);\r\n width: 50%;\r\n padding-bottom: 1rem;\r\n}\r\n.rightPanel {\r\n padding-right: auto;\r\n width: 50%;\r\n}\r\n.sunrise {\r\n width: 100px;\r\n padding: 1rem;\r\n}\r\n.sunset {\r\n width: 100px;\r\n padding: 1rem;\r\n}\r\n@media screen and (max-width: 1000px) {\r\n .sun-info-card {\r\n width: 350px;\r\n margin-left: 10px;\r\n margin-right: 10px;\r\n }\r\n}\r\n",".container {\r\n display: flex;\r\n flex-wrap: nowrap;\r\n overflow-x: scroll;\r\n flex-direction: column;\r\n}\r\n.flexForecast {\r\n display: flex;\r\n gap: 10px;\r\n flex-wrap: nowrap;\r\n min-width: 100vw;\r\n border-radius: 6px;\r\n margin-bottom: 10px;\r\n}\r\n\r\n@media (max-width: 1100px) {\r\n .flexForecast > .forecastCard {\r\n flex-basis: 20%;\r\n }\r\n}\r\n\r\n@media (max-width: 1450px) {\r\n .container {\r\n margin-left: 15px;\r\n margin-right: 15px;\r\n }\r\n}\r\n.heading {\r\n /**/\r\n padding: 4rem;\r\n border-radius: 6px;\r\n background: rgba(255, 255, 255, 0.1);\r\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.18);\r\n backdrop-filter: blur(15px);\r\n -webkit-backdrop-filter: blur(10px);\r\n color: var(--tekst);\r\n font-size: x-large;\r\n}\r\n\r\n.date {\r\n font-size: xx-large;\r\n text-align: left;\r\n display: flex;\r\n margin-bottom: 10px;\r\n \r\n}\r\n\r\n.margin {\r\n min-width: 80vw;\r\n flex-direction: column;\r\n display: flex;\r\n flex-wrap: nowrap;\r\n overflow-x: scroll;\r\n}\r\n",".forecastCard {\r\n padding: 10px;\r\n flex-grow: 1;\r\n border: 1px solid rgba(255, 255, 255, 0.25);\r\n border-radius: 6px;\r\n background: rgba(255, 255, 255, 0.1);\r\n box-shadow: 0px 3px 5px 2px rgba(0, 0, 0, 0.18);\r\n backdrop-filter: blur(20px);\r\n -webkit-backdrop-filter: blur(10px);\r\n color: var(--tekst);\r\n max-width: 80px;\r\n min-width: 80px;\r\n}\r\n.forecastImage {\r\n width: 50px;\r\n}\r\n.forcastDesc {\r\n font-weight: 500;\r\n font-size: medium;\r\n display: flex;\r\n justify-content: center;\r\n margin-bottom: 5px;\r\n}\r\n.tempIcon {\r\n width: 20px;\r\n height: 20px;\r\n}\r\n.temp {\r\n display: flex;\r\n align-items: flex-end;\r\n justify-content: center;\r\n font-size: medium;\r\n margin-top: 5px;\r\n gap: 5px;\r\n}\r\n.time {\r\n font-size: medium;\r\n}\r\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/main.7dce2b51.js b/static/js/main.7dce2b51.js new file mode 100644 index 0000000..1db393e --- /dev/null +++ b/static/js/main.7dce2b51.js @@ -0,0 +1,3 @@ +/*! For license information please see main.7dce2b51.js.LICENSE.txt */ +!function(){var e={4569:function(e,t,n){e.exports=n(8036)},3381:function(e,t,n){"use strict";var r=n(3589),o=n(7297),a=n(9301),i=n(9774),l=n(1804),u=n(9145),s=n(5411),c=n(6789),f=n(4531),d=n(6569),p=n(6261);e.exports=function(e){return new Promise((function(t,n){var h,m=e.data,A=e.headers,v=e.responseType;function g(){e.cancelToken&&e.cancelToken.unsubscribe(h),e.signal&&e.signal.removeEventListener("abort",h)}r.isFormData(m)&&r.isStandardBrowserEnv()&&delete A["Content-Type"];var y=new XMLHttpRequest;if(e.auth){var b=e.auth.username||"",w=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";A.Authorization="Basic "+btoa(b+":"+w)}var S=l(e.baseURL,e.url);function k(){if(y){var r="getAllResponseHeaders"in y?u(y.getAllResponseHeaders()):null,a={data:v&&"text"!==v&&"json"!==v?y.response:y.responseText,status:y.status,statusText:y.statusText,headers:r,config:e,request:y};o((function(e){t(e),g()}),(function(e){n(e),g()}),a),y=null}}if(y.open(e.method.toUpperCase(),i(S,e.params,e.paramsSerializer),!0),y.timeout=e.timeout,"onloadend"in y?y.onloadend=k:y.onreadystatechange=function(){y&&4===y.readyState&&(0!==y.status||y.responseURL&&0===y.responseURL.indexOf("file:"))&&setTimeout(k)},y.onabort=function(){y&&(n(new f("Request aborted",f.ECONNABORTED,e,y)),y=null)},y.onerror=function(){n(new f("Network Error",f.ERR_NETWORK,e,y,y)),y=null},y.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",r=e.transitional||c;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new f(t,r.clarifyTimeoutError?f.ETIMEDOUT:f.ECONNABORTED,e,y)),y=null},r.isStandardBrowserEnv()){var E=(e.withCredentials||s(S))&&e.xsrfCookieName?a.read(e.xsrfCookieName):void 0;E&&(A[e.xsrfHeaderName]=E)}"setRequestHeader"in y&&r.forEach(A,(function(e,t){"undefined"===typeof m&&"content-type"===t.toLowerCase()?delete A[t]:y.setRequestHeader(t,e)})),r.isUndefined(e.withCredentials)||(y.withCredentials=!!e.withCredentials),v&&"json"!==v&&(y.responseType=e.responseType),"function"===typeof e.onDownloadProgress&&y.addEventListener("progress",e.onDownloadProgress),"function"===typeof e.onUploadProgress&&y.upload&&y.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(h=function(e){y&&(n(!e||e&&e.type?new d:e),y.abort(),y=null)},e.cancelToken&&e.cancelToken.subscribe(h),e.signal&&(e.signal.aborted?h():e.signal.addEventListener("abort",h))),m||(m=null);var x=p(S);x&&-1===["http","https","file"].indexOf(x)?n(new f("Unsupported protocol "+x+":",f.ERR_BAD_REQUEST,e)):y.send(m)}))}},8036:function(e,t,n){"use strict";var r=n(3589),o=n(4049),a=n(3773),i=n(777);var l=function e(t){var n=new a(t),l=o(a.prototype.request,n);return r.extend(l,a.prototype,n),r.extend(l,n),l.create=function(n){return e(i(t,n))},l}(n(1709));l.Axios=a,l.CanceledError=n(6569),l.CancelToken=n(6857),l.isCancel=n(5517),l.VERSION=n(7600).version,l.toFormData=n(1397),l.AxiosError=n(4531),l.Cancel=l.CanceledError,l.all=function(e){return Promise.all(e)},l.spread=n(8089),l.isAxiosError=n(9580),e.exports=l,e.exports.default=l},6857:function(e,t,n){"use strict";var r=n(6569);function o(e){if("function"!==typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;this.promise.then((function(e){if(n._listeners){var t,r=n._listeners.length;for(t=0;t=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){c.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){c.headers[e]=r.merge(u)})),e.exports=c},6789:function(e){"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},7600:function(e){e.exports={version:"0.27.2"}},4049:function(e){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r=0)return;i[t]="set-cookie"===t?(i[t]?i[t]:[]).concat([n]):i[t]?i[t]+", "+n:n}})),i):i}},6261:function(e){"use strict";e.exports=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}},8089:function(e){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},1397:function(e,t,n){"use strict";var r=n(3589);e.exports=function(e,t){t=t||new FormData;var n=[];function o(e){return null===e?"":r.isDate(e)?e.toISOString():r.isArrayBuffer(e)||r.isTypedArray(e)?"function"===typeof Blob?new Blob([e]):Buffer.from(e):e}return function e(a,i){if(r.isPlainObject(a)||r.isArray(a)){if(-1!==n.indexOf(a))throw Error("Circular reference detected in "+i);n.push(a),r.forEach(a,(function(n,a){if(!r.isUndefined(n)){var l,u=i?i+"."+a:a;if(n&&!i&&"object"===typeof n)if(r.endsWith(a,"{}"))n=JSON.stringify(n);else if(r.endsWith(a,"[]")&&(l=r.toArray(n)))return void l.forEach((function(e){!r.isUndefined(e)&&t.append(u,o(e))}));e(n,u)}})),n.pop()}else t.append(i,o(a))}(e),t}},7835:function(e,t,n){"use strict";var r=n(7600).version,o=n(4531),a={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){a[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));var i={};a.transitional=function(e,t,n){function a(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,l){if(!1===e)throw new o(a(r," has been removed"+(t?" in "+t:"")),o.ERR_DEPRECATED);return t&&!i[r]&&(i[r]=!0,console.warn(a(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,l)}},e.exports={assertOptions:function(e,t,n){if("object"!==typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(e),a=r.length;a-- >0;){var i=r[a],l=t[i];if(l){var u=e[i],s=void 0===u||l(u,i,e);if(!0!==s)throw new o("option "+i+" must be "+s,o.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new o("Unknown option "+i,o.ERR_BAD_OPTION)}},validators:a}},3589:function(e,t,n){"use strict";var r,o=n(4049),a=Object.prototype.toString,i=(r=Object.create(null),function(e){var t=a.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())});function l(e){return e=e.toLowerCase(),function(t){return i(t)===e}}function u(e){return Array.isArray(e)}function s(e){return"undefined"===typeof e}var c=l("ArrayBuffer");function f(e){return null!==e&&"object"===typeof e}function d(e){if("object"!==i(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var p=l("Date"),h=l("File"),m=l("Blob"),A=l("FileList");function v(e){return"[object Function]"===a.call(e)}var g=l("URLSearchParams");function y(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),u(e))for(var n=0,r=e.length;n0;)i[a=r[o]]||(t[a]=e[a],i[a]=!0);e=Object.getPrototypeOf(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:i,kindOfTest:l,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;var t=e.length;if(s(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},isTypedArray:w,isFileList:A}},2110:function(e,t,n){"use strict";var r=n(8309),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function u(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var s=Object.defineProperty,c=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!==typeof n){if(h){var o=p(n);o&&o!==h&&e(t,o,r)}var i=c(n);f&&(i=i.concat(f(n)));for(var l=u(t),m=u(n),A=0;A\r\n );\r\n}\r\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t 0)\n ? toastAutoClose\n : containerAutoClose;\n}\n\nexport function canBeRendered(content: T): boolean {\n return (\n isValidElement(content) || isStr(content) || isFn(content) || isNum(content)\n );\n}\n","import { ToastPosition, TypeOptions } from '../types';\n\ntype KeyOfPosition =\n | 'TOP_LEFT'\n | 'TOP_RIGHT'\n | 'TOP_CENTER'\n | 'BOTTOM_LEFT'\n | 'BOTTOM_RIGHT'\n | 'BOTTOM_CENTER';\n\ntype KeyOfType = 'INFO' | 'SUCCESS' | 'WARNING' | 'ERROR' | 'DEFAULT';\n\nexport const POSITION: { [key in KeyOfPosition]: ToastPosition } = {\n TOP_LEFT: 'top-left',\n TOP_RIGHT: 'top-right',\n TOP_CENTER: 'top-center',\n BOTTOM_LEFT: 'bottom-left',\n BOTTOM_RIGHT: 'bottom-right',\n BOTTOM_CENTER: 'bottom-center'\n};\n\nexport const TYPE: { [key in KeyOfType]: TypeOptions } = {\n INFO: 'info',\n SUCCESS: 'success',\n WARNING: 'warning',\n ERROR: 'error',\n DEFAULT: 'default'\n};\n\nexport const enum Default {\n COLLAPSE_DURATION = 300,\n DEBOUNCE_DURATION = 50,\n CSS_NAMESPACE = 'Toastify',\n DRAGGABLE_PERCENT = 80\n}\n\nexport const enum Direction {\n X = 'x',\n Y = 'y'\n}\n\nexport const enum SyntheticEvent {\n ENTRANCE_ANIMATION_END = 'd'\n}\n","import React, { useEffect, useLayoutEffect, useRef } from 'react';\nimport { collapseToast } from './collapseToast';\nimport { Default, SyntheticEvent } from './constant';\n\nimport { ToastTransitionProps } from '../types';\n\nexport interface CSSTransitionProps {\n /**\n * Css class to apply when toast enter\n */\n enter: string;\n\n /**\n * Css class to apply when toast leave\n */\n exit: string;\n\n /**\n * Append current toast position to the classname.\n * If multiple classes are provided, only the last one will get the position\n * For instance `myclass--top-center`...\n * `Default: false`\n */\n appendPosition?: boolean;\n\n /**\n * Collapse toast smoothly when exit animation end\n * `Default: true`\n */\n collapse?: boolean;\n\n /**\n * Collapse transition duration\n * `Default: 300`\n */\n collapseDuration?: number;\n}\n\nconst enum AnimationStep {\n Enter,\n Exit\n}\n\n/**\n * Css animation that just work.\n * You could use animate.css for instance\n *\n *\n * ```\n * cssTransition({\n * enter: \"animate__animated animate__bounceIn\",\n * exit: \"animate__animated animate__bounceOut\"\n * })\n * ```\n *\n */\nexport function cssTransition({\n enter,\n exit,\n appendPosition = false,\n collapse = true,\n collapseDuration = Default.COLLAPSE_DURATION\n}: CSSTransitionProps) {\n return function ToastTransition({\n children,\n position,\n preventExitTransition,\n done,\n nodeRef,\n isIn\n }: ToastTransitionProps) {\n const enterClassName = appendPosition ? `${enter}--${position}` : enter;\n const exitClassName = appendPosition ? `${exit}--${position}` : exit;\n const animationStep = useRef(AnimationStep.Enter);\n\n useLayoutEffect(() => {\n const node = nodeRef.current!;\n const classToToken = enterClassName.split(' ');\n\n const onEntered = (e: AnimationEvent) => {\n if (e.target !== nodeRef.current) return;\n\n node.dispatchEvent(new Event(SyntheticEvent.ENTRANCE_ANIMATION_END));\n node.removeEventListener('animationend', onEntered);\n node.removeEventListener('animationcancel', onEntered);\n if (\n animationStep.current === AnimationStep.Enter &&\n e.type !== 'animationcancel'\n ) {\n node.classList.remove(...classToToken);\n }\n };\n\n const onEnter = () => {\n node.classList.add(...classToToken);\n node.addEventListener('animationend', onEntered);\n node.addEventListener('animationcancel', onEntered);\n };\n\n onEnter();\n }, []);\n\n useEffect(() => {\n const node = nodeRef.current!;\n\n const onExited = () => {\n node.removeEventListener('animationend', onExited);\n collapse ? collapseToast(node, done, collapseDuration) : done();\n };\n\n const onExit = () => {\n animationStep.current = AnimationStep.Exit;\n node.className += ` ${exitClassName}`;\n node.addEventListener('animationend', onExited);\n };\n\n if (!isIn) preventExitTransition ? onExited() : onExit();\n }, [isIn]);\n\n return <>{children};\n };\n}\n","import { Default } from './constant';\n\n/**\n * Used to collapse toast after exit animation\n */\nexport function collapseToast(\n node: HTMLElement,\n done: () => void,\n duration = Default.COLLAPSE_DURATION\n) {\n const { scrollHeight, style } = node;\n\n requestAnimationFrame(() => {\n style.minHeight = 'initial';\n style.height = scrollHeight + 'px';\n style.transition = `all ${duration}ms`;\n\n requestAnimationFrame(() => {\n style.height = '0';\n style.padding = '0';\n style.margin = '0';\n setTimeout(done, duration as number);\n });\n });\n}\n","import { Toast, ToastItem, ToastItemStatus } from '../types';\n\nexport function toToastItem(toast: Toast, status: ToastItemStatus): ToastItem {\n return {\n content: toast.content,\n containerId: toast.props.containerId,\n id: toast.props.toastId,\n theme: toast.props.theme,\n type: toast.props.type,\n data: toast.props.data || {},\n isLoading: toast.props.isLoading,\n icon: toast.props.icon,\n status\n };\n}\n","import {\n Id,\n ToastContent,\n ClearWaitingQueueParams,\n NotValidatedToastProps,\n ToastItem\n} from '../types';\nimport { ContainerInstance } from '../hooks';\n\nexport const enum Event {\n Show,\n Clear,\n DidMount,\n WillUnmount,\n Change,\n ClearWaitingQueue\n}\n\ntype OnShowCallback = (\n content: ToastContent,\n options: NotValidatedToastProps\n) => void;\ntype OnClearCallback = (id?: Id) => void;\ntype OnClearWaitingQueue = (params: ClearWaitingQueueParams) => void;\ntype OnDidMountCallback = (containerInstance: ContainerInstance) => void;\ntype OnWillUnmountCallback = OnDidMountCallback;\n\nexport type OnChangeCallback = (toast: ToastItem) => void;\n\ntype Callback =\n | OnShowCallback\n | OnClearCallback\n | OnClearWaitingQueue\n | OnDidMountCallback\n | OnWillUnmountCallback\n | OnChangeCallback;\ntype TimeoutId = ReturnType;\n\nexport interface EventManager {\n list: Map;\n emitQueue: Map;\n on(event: Event.Show, callback: OnShowCallback): EventManager;\n on(event: Event.Clear, callback: OnClearCallback): EventManager;\n on(\n event: Event.ClearWaitingQueue,\n callback: OnClearWaitingQueue\n ): EventManager;\n on(event: Event.DidMount, callback: OnDidMountCallback): EventManager;\n on(event: Event.WillUnmount, callback: OnWillUnmountCallback): EventManager;\n on(event: Event.Change, callback: OnChangeCallback): EventManager;\n off(event: Event, callback?: Callback): EventManager;\n cancelEmit(event: Event): EventManager;\n emit(\n event: Event.Show,\n content: React.ReactNode,\n options: NotValidatedToastProps\n ): void;\n emit(event: Event.Clear, id?: string | number): void;\n emit(event: Event.ClearWaitingQueue, params: ClearWaitingQueueParams): void;\n emit(event: Event.DidMount, containerInstance: ContainerInstance): void;\n emit(event: Event.WillUnmount, containerInstance: ContainerInstance): void;\n emit(event: Event.Change, data: ToastItem): void;\n}\n\nexport const eventManager: EventManager = {\n list: new Map(),\n emitQueue: new Map(),\n\n on(event: Event, callback: Callback) {\n this.list.has(event) || this.list.set(event, []);\n this.list.get(event)!.push(callback);\n return this;\n },\n\n off(event, callback) {\n if (callback) {\n const cb = this.list.get(event)!.filter(cb => cb !== callback);\n this.list.set(event, cb);\n return this;\n }\n this.list.delete(event);\n return this;\n },\n\n cancelEmit(event) {\n const timers = this.emitQueue.get(event);\n if (timers) {\n timers.forEach(clearTimeout);\n this.emitQueue.delete(event);\n }\n\n return this;\n },\n\n /**\n * Enqueue the event at the end of the call stack\n * Doing so let the user call toast as follow:\n * toast('1')\n * toast('2')\n * toast('3')\n * Without setTimemout the code above will not work\n */\n emit(event: Event, ...args: any[]) {\n this.list.has(event) &&\n this.list.get(event)!.forEach((callback: Callback) => {\n const timer: TimeoutId = setTimeout(() => {\n // @ts-ignore\n callback(...args);\n }, 0);\n\n this.emitQueue.has(event) || this.emitQueue.set(event, []);\n this.emitQueue.get(event)!.push(timer);\n });\n }\n};\n","import React, { cloneElement, isValidElement } from 'react';\n\nimport { Theme, ToastProps, TypeOptions } from '../types';\nimport { Default, isFn, isNum, isStr } from '../utils';\n\n/**\n * Used when providing custom icon\n */\nexport interface IconProps {\n theme: Theme;\n type: TypeOptions;\n}\n\nexport type BuiltInIconProps = React.SVGProps & IconProps;\n\nconst Svg: React.FC = ({ theme, type, ...rest }) => (\n \n);\n\nfunction Warning(props: BuiltInIconProps) {\n return (\n \n \n \n );\n}\n\nfunction Info(props: BuiltInIconProps) {\n return (\n \n \n \n );\n}\n\nfunction Success(props: BuiltInIconProps) {\n return (\n \n \n \n );\n}\n\nfunction Error(props: BuiltInIconProps) {\n return (\n \n \n \n );\n}\n\nfunction Spinner() {\n return
;\n}\n\nexport const Icons = {\n info: Info,\n warning: Warning,\n success: Success,\n error: Error,\n spinner: Spinner\n};\n\nconst maybeIcon = (type: string): type is keyof typeof Icons => type in Icons;\n\nexport function getIcon({ theme, type, isLoading, icon }: ToastProps) {\n let Icon: React.ReactNode = null;\n const iconProps = { theme, type };\n\n if (icon === false) {\n // hide\n } else if (isFn(icon)) {\n Icon = icon(iconProps);\n } else if (isValidElement(icon)) {\n Icon = cloneElement(icon, iconProps);\n } else if (isStr(icon) || isNum(icon)) {\n Icon = icon;\n } else if (isLoading) {\n Icon = Icons.spinner();\n } else if (maybeIcon(type)) {\n Icon = Icons[type](iconProps);\n }\n\n return Icon;\n}\n","import {\n useEffect,\n useRef,\n useReducer,\n cloneElement,\n isValidElement,\n useState\n} from 'react';\nimport {\n parseClassName,\n canBeRendered,\n isBool,\n isFn,\n isNum,\n isStr,\n isToastIdValid,\n getAutoCloseDelay,\n toToastItem\n} from '../utils';\nimport { eventManager, Event } from '../core/eventManager';\n\nimport {\n Id,\n ToastContainerProps,\n ToastProps,\n ToastContent,\n Toast,\n ToastPosition,\n ClearWaitingQueueParams,\n NotValidatedToastProps,\n ToastTransition\n} from '../types';\n\nimport { getIcon } from '../components/Icons';\n\ninterface QueuedToast {\n toastContent: ToastContent;\n toastProps: ToastProps;\n staleId?: Id;\n}\n\nexport interface ContainerInstance {\n toastKey: number;\n displayedToast: number;\n props: ToastContainerProps;\n containerId?: Id | null;\n isToastActive: (toastId: Id) => boolean;\n getToast: (id: Id) => Toast | null | undefined;\n queue: QueuedToast[];\n count: number;\n}\n\nexport function useToastContainer(props: ToastContainerProps) {\n const [, forceUpdate] = useReducer(x => x + 1, 0);\n const [toastIds, setToastIds] = useState([]);\n const containerRef = useRef(null);\n const toastToRender = useRef(new Map()).current;\n const isToastActive = (id: Id) => toastIds.indexOf(id) !== -1;\n const instance = useRef({\n toastKey: 1,\n displayedToast: 0,\n count: 0,\n queue: [],\n props,\n containerId: null,\n isToastActive,\n getToast: id => toastToRender.get(id)\n }).current;\n\n useEffect(() => {\n instance.containerId = props.containerId;\n eventManager\n .cancelEmit(Event.WillUnmount)\n .on(Event.Show, buildToast)\n .on(Event.Clear, toastId => containerRef.current && removeToast(toastId))\n .on(Event.ClearWaitingQueue, clearWaitingQueue)\n .emit(Event.DidMount, instance);\n\n return () => {\n toastToRender.clear();\n eventManager.emit(Event.WillUnmount, instance);\n };\n }, []);\n\n useEffect(() => {\n instance.props = props;\n instance.isToastActive = isToastActive;\n instance.displayedToast = toastIds.length;\n });\n\n function clearWaitingQueue({ containerId }: ClearWaitingQueueParams) {\n const { limit } = instance.props;\n if (limit && (!containerId || instance.containerId === containerId)) {\n instance.count -= instance.queue.length;\n instance.queue = [];\n }\n }\n\n function removeToast(toastId?: Id) {\n setToastIds(state =>\n isToastIdValid(toastId) ? state.filter(id => id !== toastId) : []\n );\n }\n\n function dequeueToast() {\n const { toastContent, toastProps, staleId } =\n instance.queue.shift() as QueuedToast;\n appendToast(toastContent, toastProps, staleId);\n }\n\n /**\n * check if a container is attached to the dom\n * check for multi-container, build only if associated\n * check for duplicate toastId if no update\n */\n function isNotValid(options: NotValidatedToastProps) {\n return (\n !containerRef.current ||\n (instance.props.enableMultiContainer &&\n options.containerId !== instance.props.containerId) ||\n (toastToRender.has(options.toastId) && options.updateId == null)\n );\n }\n\n // this function and all the function called inside needs to rely on refs\n function buildToast(\n content: ToastContent,\n { delay, staleId, ...options }: NotValidatedToastProps\n ) {\n if (!canBeRendered(content) || isNotValid(options)) return;\n\n const { toastId, updateId, data } = options;\n const { props } = instance;\n const closeToast = () => removeToast(toastId);\n const isNotAnUpdate = updateId == null;\n\n if (isNotAnUpdate) instance.count++;\n\n const toastProps: ToastProps = {\n toastId,\n updateId,\n data,\n containerId: options.containerId,\n isLoading: options.isLoading,\n theme: options.theme || props.theme!,\n icon: options.icon != null ? options.icon : props.icon,\n isIn: false,\n key: options.key || instance.toastKey++,\n type: options.type!,\n closeToast: closeToast,\n closeButton: options.closeButton,\n rtl: props.rtl,\n position: options.position || (props.position as ToastPosition),\n transition: options.transition || (props.transition as ToastTransition),\n className: parseClassName(options.className || props.toastClassName),\n bodyClassName: parseClassName(\n options.bodyClassName || props.bodyClassName\n ),\n style: options.style || props.toastStyle,\n bodyStyle: options.bodyStyle || props.bodyStyle,\n onClick: options.onClick || props.onClick,\n pauseOnHover: isBool(options.pauseOnHover)\n ? options.pauseOnHover\n : props.pauseOnHover,\n pauseOnFocusLoss: isBool(options.pauseOnFocusLoss)\n ? options.pauseOnFocusLoss\n : props.pauseOnFocusLoss,\n draggable: isBool(options.draggable)\n ? options.draggable\n : props.draggable,\n draggablePercent:\n options.draggablePercent || (props.draggablePercent as number),\n draggableDirection:\n options.draggableDirection || props.draggableDirection,\n closeOnClick: isBool(options.closeOnClick)\n ? options.closeOnClick\n : props.closeOnClick,\n progressClassName: parseClassName(\n options.progressClassName || props.progressClassName\n ),\n progressStyle: options.progressStyle || props.progressStyle,\n autoClose: options.isLoading\n ? false\n : getAutoCloseDelay(options.autoClose, props.autoClose),\n hideProgressBar: isBool(options.hideProgressBar)\n ? options.hideProgressBar\n : props.hideProgressBar,\n progress: options.progress,\n role: options.role || props.role,\n deleteToast() {\n const removed = toToastItem(toastToRender.get(toastId)!, 'removed');\n toastToRender.delete(toastId);\n\n eventManager.emit(Event.Change, removed);\n\n const queueLen = instance.queue.length;\n instance.count = isToastIdValid(toastId)\n ? instance.count - 1\n : instance.count - instance.displayedToast;\n\n if (instance.count < 0) instance.count = 0;\n\n if (queueLen > 0) {\n const freeSlot = isToastIdValid(toastId) ? 1 : instance.props.limit!;\n\n if (queueLen === 1 || freeSlot === 1) {\n instance.displayedToast++;\n dequeueToast();\n } else {\n const toDequeue = freeSlot > queueLen ? queueLen : freeSlot;\n instance.displayedToast = toDequeue;\n\n for (let i = 0; i < toDequeue; i++) dequeueToast();\n }\n } else {\n forceUpdate();\n }\n }\n };\n\n toastProps.iconOut = getIcon(toastProps);\n\n if (isFn(options.onOpen)) toastProps.onOpen = options.onOpen;\n if (isFn(options.onClose)) toastProps.onClose = options.onClose;\n\n toastProps.closeButton = props.closeButton;\n\n if (options.closeButton === false || canBeRendered(options.closeButton)) {\n toastProps.closeButton = options.closeButton;\n } else if (options.closeButton === true) {\n toastProps.closeButton = canBeRendered(props.closeButton)\n ? props.closeButton\n : true;\n }\n\n let toastContent = content;\n\n if (isValidElement(content) && !isStr(content.type)) {\n toastContent = cloneElement(content, {\n closeToast,\n toastProps,\n data\n });\n } else if (isFn(content)) {\n toastContent = content({ closeToast, toastProps, data });\n }\n\n // not handling limit + delay by design. Waiting for user feedback first\n if (\n props.limit &&\n props.limit > 0 &&\n instance.count > props.limit &&\n isNotAnUpdate\n ) {\n instance.queue.push({ toastContent, toastProps, staleId });\n } else if (isNum(delay)) {\n setTimeout(() => {\n appendToast(toastContent, toastProps, staleId);\n }, delay);\n } else {\n appendToast(toastContent, toastProps, staleId);\n }\n }\n\n function appendToast(\n content: ToastContent,\n toastProps: ToastProps,\n staleId?: Id\n ) {\n const { toastId } = toastProps;\n\n if (staleId) toastToRender.delete(staleId);\n\n const toast = {\n content,\n props: toastProps\n };\n toastToRender.set(toastId, toast);\n\n setToastIds(state => [...state, toastId].filter(id => id !== staleId));\n eventManager.emit(\n Event.Change,\n toToastItem(toast, toast.props.updateId == null ? 'added' : 'updated')\n );\n }\n\n function getToastToRender(\n cb: (position: ToastPosition, toastList: Toast[]) => T\n ) {\n const toRender = new Map();\n const collection = Array.from(toastToRender.values());\n\n if (props.newestOnTop) collection.reverse();\n\n collection.forEach(toast => {\n const { position } = toast.props;\n toRender.has(position) || toRender.set(position, []);\n toRender.get(position)!.push(toast);\n });\n\n return Array.from(toRender, p => cb(p[0], p[1]));\n }\n\n return {\n getToastToRender,\n containerRef,\n isToastActive\n };\n}\n","import {\n useState,\n useRef,\n useEffect,\n isValidElement,\n DOMAttributes\n} from 'react';\n\nimport { isFn, Default, Direction, SyntheticEvent } from '../utils';\nimport { ToastProps } from '../types';\n\ninterface Draggable {\n start: number;\n x: number;\n y: number;\n delta: number;\n removalDistance: number;\n canCloseOnClick: boolean;\n canDrag: boolean;\n boundingRect: DOMRect | null;\n didMove: boolean;\n}\n\ntype DragEvent = MouseEvent & TouchEvent;\n\nfunction getX(e: DragEvent) {\n return e.targetTouches && e.targetTouches.length >= 1\n ? e.targetTouches[0].clientX\n : e.clientX;\n}\n\nfunction getY(e: DragEvent) {\n return e.targetTouches && e.targetTouches.length >= 1\n ? e.targetTouches[0].clientY\n : e.clientY;\n}\n\nexport function useToast(props: ToastProps) {\n const [isRunning, setIsRunning] = useState(false);\n const [preventExitTransition, setPreventExitTransition] = useState(false);\n const toastRef = useRef(null);\n const drag = useRef({\n start: 0,\n x: 0,\n y: 0,\n delta: 0,\n removalDistance: 0,\n canCloseOnClick: true,\n canDrag: false,\n boundingRect: null,\n didMove: false\n }).current;\n const syncProps = useRef(props);\n const { autoClose, pauseOnHover, closeToast, onClick, closeOnClick } = props;\n\n useEffect(() => {\n syncProps.current = props;\n });\n\n useEffect(() => {\n if (toastRef.current)\n toastRef.current.addEventListener(\n SyntheticEvent.ENTRANCE_ANIMATION_END,\n playToast,\n { once: true }\n );\n\n if (isFn(props.onOpen))\n props.onOpen(isValidElement(props.children) && props.children.props);\n\n return () => {\n const props = syncProps.current;\n if (isFn(props.onClose))\n props.onClose(isValidElement(props.children) && props.children.props);\n };\n }, []);\n\n useEffect(() => {\n props.pauseOnFocusLoss && bindFocusEvents();\n return () => {\n props.pauseOnFocusLoss && unbindFocusEvents();\n };\n }, [props.pauseOnFocusLoss]);\n\n function onDragStart(\n e: React.MouseEvent | React.TouchEvent\n ) {\n if (props.draggable) {\n bindDragEvents();\n const toast = toastRef.current!;\n drag.canCloseOnClick = true;\n drag.canDrag = true;\n drag.boundingRect = toast.getBoundingClientRect();\n toast.style.transition = '';\n drag.x = getX(e.nativeEvent as DragEvent);\n drag.y = getY(e.nativeEvent as DragEvent);\n\n if (props.draggableDirection === Direction.X) {\n drag.start = drag.x;\n drag.removalDistance =\n toast.offsetWidth * (props.draggablePercent / 100);\n } else {\n drag.start = drag.y;\n drag.removalDistance =\n toast.offsetHeight *\n (props.draggablePercent === Default.DRAGGABLE_PERCENT\n ? props.draggablePercent * 1.5\n : props.draggablePercent / 100);\n }\n }\n }\n\n function onDragTransitionEnd() {\n if (drag.boundingRect) {\n const { top, bottom, left, right } = drag.boundingRect;\n\n if (\n props.pauseOnHover &&\n drag.x >= left &&\n drag.x <= right &&\n drag.y >= top &&\n drag.y <= bottom\n ) {\n pauseToast();\n } else {\n playToast();\n }\n }\n }\n\n function playToast() {\n setIsRunning(true);\n }\n\n function pauseToast() {\n setIsRunning(false);\n }\n\n function bindFocusEvents() {\n if (!document.hasFocus()) pauseToast();\n\n window.addEventListener('focus', playToast);\n window.addEventListener('blur', pauseToast);\n }\n\n function unbindFocusEvents() {\n window.removeEventListener('focus', playToast);\n window.removeEventListener('blur', pauseToast);\n }\n\n function bindDragEvents() {\n drag.didMove = false;\n document.addEventListener('mousemove', onDragMove);\n document.addEventListener('mouseup', onDragEnd);\n\n document.addEventListener('touchmove', onDragMove);\n document.addEventListener('touchend', onDragEnd);\n }\n\n function unbindDragEvents() {\n document.removeEventListener('mousemove', onDragMove);\n document.removeEventListener('mouseup', onDragEnd);\n\n document.removeEventListener('touchmove', onDragMove);\n document.removeEventListener('touchend', onDragEnd);\n }\n\n function onDragMove(e: MouseEvent | TouchEvent) {\n const toast = toastRef.current!;\n if (drag.canDrag && toast) {\n drag.didMove = true;\n if (isRunning) pauseToast();\n drag.x = getX(e as DragEvent);\n drag.y = getY(e as DragEvent);\n if (props.draggableDirection === Direction.X) {\n drag.delta = drag.x - drag.start;\n } else {\n drag.delta = drag.y - drag.start;\n }\n\n // prevent false positif during a toast click\n if (drag.start !== drag.x) drag.canCloseOnClick = false;\n toast.style.transform = `translate${props.draggableDirection}(${drag.delta}px)`;\n toast.style.opacity = `${\n 1 - Math.abs(drag.delta / drag.removalDistance)\n }`;\n }\n }\n\n function onDragEnd() {\n unbindDragEvents();\n const toast = toastRef.current!;\n if (drag.canDrag && drag.didMove && toast) {\n drag.canDrag = false;\n if (Math.abs(drag.delta) > drag.removalDistance) {\n setPreventExitTransition(true);\n props.closeToast();\n return;\n }\n toast.style.transition = 'transform 0.2s, opacity 0.2s';\n toast.style.transform = `translate${props.draggableDirection}(0)`;\n toast.style.opacity = '1';\n }\n }\n\n const eventHandlers: DOMAttributes = {\n onMouseDown: onDragStart,\n onTouchStart: onDragStart,\n onMouseUp: onDragTransitionEnd,\n onTouchEnd: onDragTransitionEnd\n };\n\n if (autoClose && pauseOnHover) {\n eventHandlers.onMouseEnter = pauseToast;\n eventHandlers.onMouseLeave = playToast;\n }\n\n // prevent toast from closing when user drags the toast\n if (closeOnClick) {\n eventHandlers.onClick = (e: React.MouseEvent) => {\n onClick && onClick(e);\n drag.canCloseOnClick && closeToast();\n };\n }\n\n return {\n playToast,\n pauseToast,\n isRunning,\n preventExitTransition,\n toastRef,\n eventHandlers\n };\n}\n","import React from 'react';\nimport { Default } from '../utils';\nimport { Theme, TypeOptions } from '../types';\n\nexport interface CloseButtonProps {\n closeToast: (e: React.MouseEvent) => void;\n type: TypeOptions;\n ariaLabel?: string;\n theme: Theme;\n}\n\nexport function CloseButton({\n closeToast,\n theme,\n ariaLabel = 'close'\n}: CloseButtonProps) {\n return (\n {\n e.stopPropagation();\n closeToast(e);\n }}\n aria-label={ariaLabel}\n >\n \n \n \n \n );\n}\n","import React from 'react';\nimport cx from 'clsx';\n\nimport { TYPE, Default, isFn } from './../utils';\nimport { TypeOptions, ToastClassName, Theme } from '../types';\n\nexport interface ProgressBarProps {\n /**\n * The animation delay which determine when to close the toast\n */\n delay: number;\n\n /**\n * Whether or not the animation is running or paused\n */\n isRunning: boolean;\n\n /**\n * Func to close the current toast\n */\n closeToast: () => void;\n\n /**\n * Optional type : info, success ...\n */\n type: TypeOptions;\n\n /**\n * The theme that is currently used\n */\n theme: Theme;\n\n /**\n * Hide or not the progress bar\n */\n hide?: boolean;\n\n /**\n * Optionnal className\n */\n className?: ToastClassName;\n\n /**\n * Optionnal inline style\n */\n style?: React.CSSProperties;\n\n /**\n * Tell wether or not controlled progress bar is used\n */\n controlledProgress?: boolean;\n\n /**\n * Controlled progress value\n */\n progress?: number | string;\n\n /**\n * Support rtl content\n */\n rtl?: boolean;\n\n /**\n * Tell if the component is visible on screen or not\n */\n isIn?: boolean;\n}\n\nexport function ProgressBar({\n delay,\n isRunning,\n closeToast,\n type,\n hide,\n className,\n style: userStyle,\n controlledProgress,\n progress,\n rtl,\n isIn,\n theme\n}: ProgressBarProps) {\n const style: React.CSSProperties = {\n ...userStyle,\n animationDuration: `${delay}ms`,\n animationPlayState: isRunning ? 'running' : 'paused',\n opacity: hide ? 0 : 1\n };\n\n if (controlledProgress) style.transform = `scaleX(${progress})`;\n const defaultClassName = cx(\n `${Default.CSS_NAMESPACE}__progress-bar`,\n controlledProgress\n ? `${Default.CSS_NAMESPACE}__progress-bar--controlled`\n : `${Default.CSS_NAMESPACE}__progress-bar--animated`,\n `${Default.CSS_NAMESPACE}__progress-bar-theme--${theme}`,\n `${Default.CSS_NAMESPACE}__progress-bar--${type}`,\n {\n [`${Default.CSS_NAMESPACE}__progress-bar--rtl`]: rtl\n }\n );\n const classNames = isFn(className)\n ? className({\n rtl,\n type,\n defaultClassName\n })\n : cx(defaultClassName, className);\n\n // 🧐 controlledProgress is derived from progress\n // so if controlledProgress is set\n // it means that this is also the case for progress\n const animationEvent = {\n [controlledProgress && progress! >= 1\n ? 'onTransitionEnd'\n : 'onAnimationEnd']:\n controlledProgress && progress! < 1\n ? null\n : () => {\n isIn && closeToast();\n }\n };\n\n // TODO: add aria-valuenow, aria-valuemax, aria-valuemin\n\n return (\n \n );\n}\n\nProgressBar.defaultProps = {\n type: TYPE.DEFAULT,\n hide: false\n};\n","import React from 'react';\nimport cx from 'clsx';\n\nimport { ProgressBar } from './ProgressBar';\nimport { CloseButton } from './CloseButton';\nimport { ToastProps } from '../types';\nimport { Default, isFn } from '../utils';\nimport { useToast } from '../hooks/useToast';\n\nexport const Toast: React.FC = props => {\n const { isRunning, preventExitTransition, toastRef, eventHandlers } =\n useToast(props);\n const {\n closeButton,\n children,\n autoClose,\n onClick,\n type,\n hideProgressBar,\n closeToast,\n transition: Transition,\n position,\n className,\n style,\n bodyClassName,\n bodyStyle,\n progressClassName,\n progressStyle,\n updateId,\n role,\n progress,\n rtl,\n toastId,\n deleteToast,\n isIn,\n isLoading,\n iconOut,\n theme\n } = props;\n const defaultClassName = cx(\n `${Default.CSS_NAMESPACE}__toast`,\n `${Default.CSS_NAMESPACE}__toast-theme--${theme}`,\n `${Default.CSS_NAMESPACE}__toast--${type}`,\n {\n [`${Default.CSS_NAMESPACE}__toast--rtl`]: rtl\n }\n );\n const cssClasses = isFn(className)\n ? className({\n rtl,\n position,\n type,\n defaultClassName\n })\n : cx(defaultClassName, className);\n const isProgressControlled = !!progress;\n\n const closeButtonProps = { closeToast, type, theme };\n let Close: React.ReactNode = null;\n\n if (closeButton === false) {\n // hide\n } else if (isFn(closeButton)) {\n Close = closeButton(closeButtonProps);\n } else if (React.isValidElement(closeButton)) {\n Close = React.cloneElement(closeButton, closeButtonProps);\n } else {\n Close = CloseButton(closeButtonProps);\n }\n\n return (\n \n \n \n {iconOut != null && (\n \n {iconOut}\n
\n )}\n
{children}
\n \n {Close}\n {(autoClose || isProgressControlled) && (\n \n )}\n \n \n );\n};\n","import { Default, cssTransition } from '../utils';\n\nconst Bounce = cssTransition({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__bounce-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__bounce-exit`,\n appendPosition: true\n});\n\nconst Slide = cssTransition({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__slide-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__slide-exit`,\n appendPosition: true\n});\n\nconst Zoom = cssTransition({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__zoom-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__zoom-exit`\n});\n\nconst Flip = cssTransition({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__flip-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__flip-exit`\n});\n\nexport { Bounce, Slide, Zoom, Flip };\n","// https://github.com/yannickcr/eslint-plugin-react/issues/3140\n/* eslint react/prop-types: \"off\" */\nimport React, { forwardRef, StyleHTMLAttributes, useEffect } from 'react';\nimport cx from 'clsx';\n\nimport { Toast } from './Toast';\nimport { CloseButton } from './CloseButton';\nimport { Bounce } from './Transitions';\nimport { POSITION, Direction, Default, parseClassName, isFn } from '../utils';\nimport { useToastContainer } from '../hooks/useToastContainer';\nimport { ToastContainerProps, ToastPosition } from '../types';\n\nexport const ToastContainer = forwardRef(\n (props, ref) => {\n const { getToastToRender, containerRef, isToastActive } =\n useToastContainer(props);\n const { className, style, rtl, containerId } = props;\n\n function getClassName(position: ToastPosition) {\n const defaultClassName = cx(\n `${Default.CSS_NAMESPACE}__toast-container`,\n `${Default.CSS_NAMESPACE}__toast-container--${position}`,\n { [`${Default.CSS_NAMESPACE}__toast-container--rtl`]: rtl }\n );\n return isFn(className)\n ? className({\n position,\n rtl,\n defaultClassName\n })\n : cx(defaultClassName, parseClassName(className));\n }\n\n useEffect(() => {\n if (ref) {\n (ref as React.MutableRefObject).current =\n containerRef.current!;\n }\n }, []);\n\n return (\n \n {getToastToRender((position, toastList) => {\n const containerStyle: React.CSSProperties = !toastList.length\n ? { ...style, pointerEvents: 'none' }\n : { ...style };\n\n return (\n \n {toastList.map(({ content, props: toastProps }, i) => {\n return (\n \n }\n key={`toast-${toastProps.key}`}\n >\n {content}\n \n );\n })}\n \n );\n })}\n \n );\n }\n);\n\nToastContainer.displayName = 'ToastContainer';\n\nToastContainer.defaultProps = {\n position: POSITION.TOP_RIGHT as ToastPosition,\n transition: Bounce,\n rtl: false,\n autoClose: 5000,\n hideProgressBar: false,\n closeButton: CloseButton,\n pauseOnHover: true,\n pauseOnFocusLoss: true,\n closeOnClick: true,\n newestOnTop: false,\n draggable: true,\n draggablePercent: Default.DRAGGABLE_PERCENT as number,\n draggableDirection: Direction.X,\n role: 'alert',\n theme: 'light'\n};\n","import { POSITION, TYPE, isStr, isNum, isFn, isToastIdValid } from '../utils';\nimport { eventManager, OnChangeCallback, Event } from './eventManager';\nimport {\n ToastContent,\n ToastOptions,\n ToastProps,\n Id,\n UpdateOptions,\n ClearWaitingQueueParams,\n NotValidatedToastProps,\n TypeOptions\n} from '../types';\nimport { ContainerInstance } from '../hooks';\n\ninterface EnqueuedToast {\n content: ToastContent;\n options: NotValidatedToastProps;\n}\n\nlet containers = new Map();\nlet latestInstance: ContainerInstance | Id;\nlet queue: EnqueuedToast[] = [];\n\n/**\n * Get the toast by id, given it's in the DOM, otherwise returns null\n */\nfunction getToast(toastId: Id, { containerId }: ToastOptions) {\n const container = containers.get(containerId || latestInstance);\n if (!container) return null;\n\n return container.getToast(toastId);\n}\n\n/**\n * Generate a random toastId\n */\nfunction generateToastId() {\n return Math.random().toString(36).substring(2, 9);\n}\n\n/**\n * Generate a toastId or use the one provided\n */\nfunction getToastId(options?: ToastOptions) {\n if (options && (isStr(options.toastId) || isNum(options.toastId))) {\n return options.toastId;\n }\n\n return generateToastId();\n}\n\n/**\n * If the container is not mounted, the toast is enqueued and\n * the container lazy mounted\n */\nfunction dispatchToast(\n content: ToastContent,\n options: NotValidatedToastProps\n): Id {\n if (containers.size > 0) {\n eventManager.emit(Event.Show, content, options);\n } else {\n queue.push({ content, options });\n }\n\n return options.toastId;\n}\n\n/**\n * Merge provided options with the defaults settings and generate the toastId\n */\nfunction mergeOptions(type: string, options?: ToastOptions) {\n return {\n ...options,\n type: (options && options.type) || type,\n toastId: getToastId(options)\n } as NotValidatedToastProps;\n}\n\nfunction createToastByType(type: string) {\n return (content: ToastContent, options?: ToastOptions) =>\n dispatchToast(content, mergeOptions(type, options));\n}\n\nfunction toast(content: ToastContent, options?: ToastOptions) {\n return dispatchToast(content, mergeOptions(TYPE.DEFAULT, options));\n}\n\ntoast.loading = (content: ToastContent, options?: ToastOptions) =>\n dispatchToast(\n content,\n mergeOptions(TYPE.DEFAULT, {\n isLoading: true,\n autoClose: false,\n closeOnClick: false,\n closeButton: false,\n draggable: false,\n ...options\n })\n );\n\nexport interface ToastPromiseParams {\n pending?: string | UpdateOptions;\n success?: string | UpdateOptions;\n error?: string | UpdateOptions;\n}\n\nfunction handlePromise(\n promise: Promise | (() => Promise),\n { pending, error, success }: ToastPromiseParams,\n options?: ToastOptions\n) {\n let id: Id;\n\n if (pending) {\n id = isStr(pending)\n ? toast.loading(pending, options)\n : toast.loading(pending.render, {\n ...options,\n ...(pending as ToastOptions)\n });\n }\n\n const resetParams = {\n isLoading: null,\n autoClose: null,\n closeOnClick: null,\n closeButton: null,\n draggable: null,\n delay: 100\n };\n\n const resolver = (\n type: TypeOptions,\n input: string | UpdateOptions | undefined,\n result: T\n ) => {\n // Remove the toast if the input has not been provided. This prevents the toast from hanging\n // in the pending state if a success/error toast has not been provided.\n if (input == null) {\n toast.dismiss(id);\n return;\n }\n\n const baseParams = {\n type,\n ...resetParams,\n ...options,\n data: result\n };\n const params = isStr(input) ? { render: input } : input;\n\n // if the id is set we know that it's an update\n if (id) {\n toast.update(id, {\n ...baseParams,\n ...params\n });\n } else {\n // using toast.promise without loading\n toast(params.render, {\n ...baseParams,\n ...params\n } as ToastOptions);\n }\n\n return result;\n };\n\n const p = isFn(promise) ? promise() : promise;\n\n //call the resolvers only when needed\n p.then(result => resolver('success', success, result)).catch(err =>\n resolver('error', error, err)\n );\n\n return p;\n}\n\ntoast.promise = handlePromise;\ntoast.success = createToastByType(TYPE.SUCCESS);\ntoast.info = createToastByType(TYPE.INFO);\ntoast.error = createToastByType(TYPE.ERROR);\ntoast.warning = createToastByType(TYPE.WARNING);\ntoast.warn = toast.warning;\ntoast.dark = (content: ToastContent, options?: ToastOptions) =>\n dispatchToast(\n content,\n mergeOptions(TYPE.DEFAULT, {\n theme: 'dark',\n ...options\n })\n );\n\n/**\n * Remove toast programmaticaly\n */\ntoast.dismiss = (id?: Id) => {\n if (containers.size > 0) {\n eventManager.emit(Event.Clear, id);\n } else {\n queue = queue.filter(t => isToastIdValid(id) && t.options.toastId !== id);\n }\n};\n\n/**\n * Clear waiting queue when limit is used\n */\ntoast.clearWaitingQueue = (params: ClearWaitingQueueParams = {}) =>\n eventManager.emit(Event.ClearWaitingQueue, params);\n\n/**\n * return true if one container is displaying the toast\n */\ntoast.isActive = (id: Id) => {\n let isToastActive = false;\n\n containers.forEach(container => {\n if (container.isToastActive && container.isToastActive(id)) {\n isToastActive = true;\n }\n });\n\n return isToastActive;\n};\n\ntoast.update = (toastId: Id, options: UpdateOptions = {}) => {\n // if you call toast and toast.update directly nothing will be displayed\n // this is why I defered the update\n setTimeout(() => {\n const toast = getToast(toastId, options as ToastOptions);\n if (toast) {\n const { props: oldOptions, content: oldContent } = toast;\n\n const nextOptions = {\n ...oldOptions,\n ...options,\n toastId: options.toastId || toastId,\n updateId: generateToastId()\n } as ToastProps & UpdateOptions;\n\n if (nextOptions.toastId !== toastId) nextOptions.staleId = toastId;\n\n const content = nextOptions.render || oldContent;\n delete nextOptions.render;\n\n dispatchToast(content, nextOptions);\n }\n }, 0);\n};\n\n/**\n * Used for controlled progress bar.\n */\ntoast.done = (id: Id) => {\n toast.update(id, {\n progress: 1\n });\n};\n\n/**\n * Subscribe to change when a toast is added, removed and updated\n *\n * Usage:\n * ```\n * const unsubscribe = toast.onChange((payload) => {\n * switch (payload.status) {\n * case \"added\":\n * // new toast added\n * break;\n * case \"updated\":\n * // toast updated\n * break;\n * case \"removed\":\n * // toast has been removed\n * break;\n * }\n * })\n * ```\n */\ntoast.onChange = (callback: OnChangeCallback) => {\n eventManager.on(Event.Change, callback);\n return () => {\n eventManager.off(Event.Change, callback);\n };\n};\n\ntoast.POSITION = POSITION;\ntoast.TYPE = TYPE;\n\n/**\n * Wait until the ToastContainer is mounted to dispatch the toast\n * and attach isActive method\n */\neventManager\n .on(Event.DidMount, (containerInstance: ContainerInstance) => {\n latestInstance = containerInstance.containerId || containerInstance;\n containers.set(latestInstance, containerInstance);\n\n queue.forEach(item => {\n eventManager.emit(Event.Show, item.content, item.options);\n });\n\n queue = [];\n })\n .on(Event.WillUnmount, (containerInstance: ContainerInstance) => {\n containers.delete(containerInstance.containerId || containerInstance);\n\n if (containers.size === 0) {\n eventManager\n .off(Event.Show)\n .off(Event.Clear)\n .off(Event.ClearWaitingQueue);\n }\n });\n\nexport { toast };\n","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nexport default function _regeneratorRuntime() {\n \"use strict\";\n /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n\n _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n };\n\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return generator._invoke = function (innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }(innerFn, self, context), generator;\n }\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n exports.wrap = wrap;\n var ContinueSentinel = {};\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {}\n\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n\n reject(record.arg);\n }\n\n var previousPromise;\n\n this._invoke = function (method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n };\n }\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (undefined === method) {\n if (context.delegate = null, \"throw\" === context.method) {\n if (delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel;\n context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) {\n if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n }\n\n return next.value = undefined, next.done = !0, next;\n };\n\n return next.next = next;\n }\n }\n\n return {\n next: doneResult\n };\n }\n\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, \"constructor\", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) {\n \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n }\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n }\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","const errors = {\n\t0: \"Illegal state\",\n\t1: \"Immer drafts cannot have computed properties\",\n\t2: \"This object has been frozen and should not be mutated\",\n\t3(data: any) {\n\t\treturn (\n\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\tdata\n\t\t)\n\t},\n\t4: \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t5: \"Immer forbids circular references\",\n\t6: \"The first or second argument to `produce` must be a function\",\n\t7: \"The third argument to `produce` must be a function or undefined\",\n\t8: \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t9: \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t10: \"The given draft is already finalized\",\n\t11: \"Object.defineProperty() cannot be used on an Immer draft\",\n\t12: \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t13: \"Immer only supports deleting array indices\",\n\t14: \"Immer only supports setting array indices and the 'length' property\",\n\t15(path: string) {\n\t\treturn \"Cannot apply patch, path doesn't resolve: \" + path\n\t},\n\t16: 'Sets cannot have \"replace\" patches.',\n\t17(op: string) {\n\t\treturn \"Unsupported patch operation: \" + op\n\t},\n\t18(plugin: string) {\n\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t},\n\t20: \"Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available\",\n\t21(thing: string) {\n\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t},\n\t22(thing: string) {\n\t\treturn `'current' expects a draft, got: ${thing}`\n\t},\n\t23(thing: string) {\n\t\treturn `'original' expects a draft, got: ${thing}`\n\t},\n\t24: \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n} as const\n\nexport function die(error: keyof typeof errors, ...args: any[]): never {\n\tif (__DEV__) {\n\t\tconst e = errors[error]\n\t\tconst msg = !e\n\t\t\t? \"unknown error nr: \" + error\n\t\t\t: typeof e === \"function\"\n\t\t\t? e.apply(null, args as any)\n\t\t\t: e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}${\n\t\t\targs.length ? \" \" + args.map(s => `'${s}'`).join(\",\") : \"\"\n\t\t}. Find the full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n","import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\thasSet,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\thasMap,\n\tArchtype,\n\tdie\n} from \"../internal\"\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = Object.getPrototypeOf(value)\n\tif (proto === null) {\n\t\treturn true\n\t}\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\n\tif (Ctor === Object) return true\n\n\treturn (\n\t\ttypeof Ctor == \"function\" &&\n\t\tFunction.toString.call(Ctor) === objectCtorString\n\t)\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original(value: T): T | undefined\nexport function original(value: Drafted): any {\n\tif (!isDraft(value)) die(23, value)\n\treturn value[DRAFT_STATE].base_\n}\n\n/*#__PURE__*/\nexport const ownKeys: (target: AnyObject) => PropertyKey[] =\n\ttypeof Reflect !== \"undefined\" && Reflect.ownKeys\n\t\t? Reflect.ownKeys\n\t\t: typeof Object.getOwnPropertySymbols !== \"undefined\"\n\t\t? obj =>\n\t\t\t\tObject.getOwnPropertyNames(obj).concat(\n\t\t\t\t\tObject.getOwnPropertySymbols(obj) as any\n\t\t\t\t)\n\t\t: /* istanbul ignore next */ Object.getOwnPropertyNames\n\nexport const getOwnPropertyDescriptors =\n\tObject.getOwnPropertyDescriptors ||\n\tfunction getOwnPropertyDescriptors(target: any) {\n\t\t// Polyfill needed for Hermes and IE, see https://github.com/facebook/hermes/issues/274\n\t\tconst res: any = {}\n\t\townKeys(target).forEach(key => {\n\t\t\tres[key] = Object.getOwnPropertyDescriptor(target, key)\n\t\t})\n\t\treturn res\n\t}\n\nexport function each(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void,\n\tenumerableOnly?: boolean\n): void\nexport function each(obj: any, iter: any, enumerableOnly = false) {\n\tif (getArchtype(obj) === Archtype.Object) {\n\t\t;(enumerableOnly ? Object.keys : ownKeys)(obj).forEach(key => {\n\t\t\tif (!enumerableOnly || typeof key !== \"symbol\") iter(key, obj[key], obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): Archtype {\n\t/* istanbul ignore next */\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_ > 3\n\t\t\t? state.type_ - 4 // cause Object and Array map back from 4 and 5\n\t\t\t: (state.type_ as any) // others are the same\n\t\t: Array.isArray(thing)\n\t\t? Archtype.Array\n\t\t: isMap(thing)\n\t\t? Archtype.Map\n\t\t: isSet(thing)\n\t\t? Archtype.Set\n\t\t: Archtype.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === Archtype.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === Archtype.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === Archtype.Map) thing.set(propOrOldValue, value)\n\telse if (t === Archtype.Set) {\n\t\tthing.delete(propOrOldValue)\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn hasMap && target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn hasSet && target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any) {\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\tconst descriptors = getOwnPropertyDescriptors(base)\n\tdelete descriptors[DRAFT_STATE as any]\n\tlet keys = ownKeys(descriptors)\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key: any = keys[i]\n\t\tconst desc = descriptors[key]\n\t\tif (desc.writable === false) {\n\t\t\tdesc.writable = true\n\t\t\tdesc.configurable = true\n\t\t}\n\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t// with libraries that trap values, like mobx or vue\n\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\tif (desc.get || desc.set)\n\t\t\tdescriptors[key] = {\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\tvalue: base[key]\n\t\t\t}\n\t}\n\treturn Object.create(Object.getPrototypeOf(base), descriptors)\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze(obj: T, deep?: boolean): T\nexport function freeze(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tobj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any\n\t}\n\tObject.freeze(obj)\n\tif (deep) each(obj, (key, value) => freeze(value, true), true)\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nexport function isFrozen(obj: any): boolean {\n\tif (obj == null || typeof obj !== \"object\") return true\n\t// See #600, IE dies on non-objects in Object.isFrozen\n\treturn Object.isFrozen(obj)\n}\n","import {\n\tImmerState,\n\tPatch,\n\tImmerScope,\n\tDrafted,\n\tAnyObject,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tProxyType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\tbase: any,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_(draft: T, patches: Patch[]): T\n\t}\n\tES5?: {\n\t\twillFinalizeES5_(scope: ImmerScope, result: any, isReplaced: boolean): void\n\t\tcreateES5Proxy_(\n\t\t\tbase: T,\n\t\t\tparent?: ImmerState\n\t\t): Drafted\n\t\thasChanges_(state: ES5ArrayState | ES5ObjectState): boolean\n\t}\n\tMapSet?: {\n\t\tproxyMap_(target: T, parent?: ImmerState): T\n\t\tproxySet_(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin(\n\tpluginKey: K\n): Exclude {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(18, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n\n/** ES5 Plugin */\n\ninterface ES5BaseState extends ImmerBaseState {\n\tassigned_: {[key: string]: any}\n\tparent_?: ImmerState\n\trevoked_: boolean\n}\n\nexport interface ES5ObjectState extends ES5BaseState {\n\ttype_: ProxyType.ES5Object\n\tdraft_: Drafted\n\tbase_: AnyObject\n\tcopy_: AnyObject | null\n}\n\nexport interface ES5ArrayState extends ES5BaseState {\n\ttype_: ProxyType.ES5Array\n\tdraft_: Drafted\n\tbase_: any\n\tcopy_: any\n}\n\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ProxyType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ProxyType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n","import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tProxyType,\n\tgetPlugin\n} from \"../internal\"\nimport {die} from \"../utils/errors\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\tif (__DEV__ && !currentScope) die(0)\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (\n\t\tstate.type_ === ProxyType.ProxyObject ||\n\t\tstate.type_ === ProxyType.ProxyArray\n\t)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n","import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tProxyType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen,\n\tshallowCopy\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (!scope.immer_.useProxies_)\n\t\tgetPlugin(\"ES5\").willFinalizeES5_(scope, result, isReplaced)\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE].base_,\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(\n\t\t\tvalue,\n\t\t\t(key, childValue) =>\n\t\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path),\n\t\t\ttrue // See #590, don't recurse into non-enumerable of non drafted objects\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result =\n\t\t\t// For ES5, create a good copy from the draft first, with added keys and without deleted keys.\n\t\t\tstate.type_ === ProxyType.ES5Object || state.type_ === ProxyType.ES5Array\n\t\t\t\t? (state.copy_ = shallowCopy(state.draft_))\n\t\t\t\t: state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// Although the original test case doesn't seem valid anyway, so if this in the way we can turn the next line\n\t\t// back to each(result, ....)\n\t\teach(\n\t\t\tstate.type_ === ProxyType.Set ? new Set(result) : result,\n\t\t\t(key, childValue) =>\n\t\t\t\tfinalizeProperty(rootScope, state, result, key, childValue, path)\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath\n) {\n\tif (__DEV__ && childValue === targetObject) die(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ProxyType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !isFrozen(childValue)) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\tif (!parentState || !parentState.scope_.parent_)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\tif (scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n","import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tProxyType\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ProxyType.ProxyObject\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ProxyType.ProxyArray\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ProxyType.ProxyArray : (ProxyType.ProxyObject as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(\n\t\t\t\tstate.scope_.immer_,\n\t\t\t\tvalue,\n\t\t\t\tstate\n\t\t\t))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\tstate.copy_![prop] === value &&\n\t\t\t// special case: NaN\n\t\t\ttypeof value !== \"number\" &&\n\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t(value !== undefined || prop in state.copy_)\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\t// @ts-ignore\n\t\tif (state.copy_) delete state.copy_[prop]\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ProxyType.ProxyArray || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn Object.getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (__DEV__ && isNaN(parseInt(prop as any))) die(13)\n\t// @ts-ignore\n\treturn arrayTraps.set!.call(this, state, prop, undefined)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (__DEV__ && prop !== \"length\" && isNaN(parseInt(prop as any))) die(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t // prototype, we should invoke it with the draft as context!\n\t\t\t desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = Object.getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = Object.getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {base_: any; copy_: any}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(state.base_)\n\t}\n}\n","import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\thasProxies,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport class Immer implements ProducersFns {\n\tuseProxies_: boolean = hasProxies\n\n\tautoFreeze_: boolean = true\n\n\tconstructor(config?: {useProxies?: boolean; autoFreeze?: boolean}) {\n\t\tif (typeof config?.useProxies === \"boolean\")\n\t\t\tthis.setUseProxies(config!.useProxies)\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(this, base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tif (typeof Promise !== \"undefined\" && result instanceof Promise) {\n\t\t\t\treturn result.then(\n\t\t\t\t\tresult => {\n\t\t\t\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\t\t\t\treturn processResult(result, scope)\n\t\t\t\t\t},\n\t\t\t\t\terror => {\n\t\t\t\t\t\trevokeScope(scope)\n\t\t\t\t\t\tthrow error\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === undefined) result = base\n\t\t\tif (result === NOTHING) result = undefined\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\tif (patchListener) {\n\t\t\t\tconst p: Patch[] = []\n\t\t\t\tconst ip: Patch[] = []\n\t\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip)\n\t\t\t\tpatchListener(p, ip)\n\t\t\t}\n\t\t\treturn result\n\t\t} else die(21, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (\n\t\targ1: any,\n\t\targ2?: any,\n\t\targ3?: any\n\t): any => {\n\t\tif (typeof arg1 === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => arg1(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst result = this.produce(arg1, arg2, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\n\t\tif (typeof Promise !== \"undefined\" && result instanceof Promise) {\n\t\t\treturn result.then(nextState => [nextState, patches!, inversePatches!])\n\t\t}\n\t\treturn [result, patches!, inversePatches!]\n\t}\n\n\tcreateDraft(base: T): Draft {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(this, base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (__DEV__) {\n\t\t\tif (!state || !state.isManual_) die(9)\n\t\t\tif (state.finalized_) die(10)\n\t\t}\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to use the ES2015 `Proxy` class when creating drafts, which is\n\t * always faster than using ES5 proxies.\n\t *\n\t * By default, feature detection is used, so calling this is rarely necessary.\n\t */\n\tsetUseProxies(value: boolean) {\n\t\tif (value && !hasProxies) {\n\t\t\tdie(20)\n\t\t}\n\t\tthis.useProxies_ = value\n\t}\n\n\tapplyPatches(base: T, patches: Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If there was a patch that replaced the entire state, start from the\n\t\t// patch after that.\n\t\tif (i > -1) {\n\t\t\tpatches = patches.slice(i + 1)\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches)\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches)\n\t\t)\n\t}\n}\n\nexport function createProxy(\n\timmer: Immer,\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: immer.useProxies_\n\t\t? createProxyProxy(value, parent)\n\t\t: getPlugin(\"ES5\").createES5Proxy_(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n","import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tget,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tArchtype,\n\tgetArchtype,\n\tgetPlugin\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(22, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tconst archType = getArchtype(value)\n\tif (state) {\n\t\tif (\n\t\t\t!state.modified_ &&\n\t\t\t(state.type_ < 4 || !getPlugin(\"ES5\").hasChanges_(state as any))\n\t\t)\n\t\t\treturn state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = copyHelper(value, archType)\n\t\tstate.finalized_ = false\n\t} else {\n\t\tcopy = copyHelper(value, archType)\n\t}\n\n\teach(copy, (key, childValue) => {\n\t\tif (state && get(state.base_, key) === childValue) return // no need to copy or search in something that didn't change\n\t\tset(copy, key, currentImpl(childValue))\n\t})\n\t// In the future, we might consider freezing here, based on the current settings\n\treturn archType === Archtype.Set ? new Set(copy) : copy\n}\n\nfunction copyHelper(value: any, archType: number): any {\n\t// creates a shallow copy, even if it is a map or set\n\tswitch (archType) {\n\t\tcase Archtype.Map:\n\t\t\treturn new Map(value)\n\t\tcase Archtype.Set:\n\t\t\t// Set will be cloned as array temporarily, so that we can replace individual items\n\t\t\treturn Array.from(value)\n\t}\n\treturn shallowCopy(value)\n}\n","import {\n\tImmerState,\n\tDrafted,\n\tES5ArrayState,\n\tES5ObjectState,\n\teach,\n\thas,\n\tisDraft,\n\tlatest,\n\tDRAFT_STATE,\n\tis,\n\tloadPlugin,\n\tImmerScope,\n\tProxyType,\n\tgetCurrentScope,\n\tdie,\n\tmarkChanged,\n\tobjectTraps,\n\townKeys,\n\tgetOwnPropertyDescriptors\n} from \"../internal\"\n\ntype ES5State = ES5ArrayState | ES5ObjectState\n\nexport function enableES5() {\n\tfunction willFinalizeES5_(\n\t\tscope: ImmerScope,\n\t\tresult: any,\n\t\tisReplaced: boolean\n\t) {\n\t\tif (!isReplaced) {\n\t\t\tif (scope.patches_) {\n\t\t\t\tmarkChangesRecursively(scope.drafts_![0])\n\t\t\t}\n\t\t\t// This is faster when we don't care about which attributes changed.\n\t\t\tmarkChangesSweep(scope.drafts_)\n\t\t}\n\t\t// When a child draft is returned, look for changes.\n\t\telse if (\n\t\t\tisDraft(result) &&\n\t\t\t(result[DRAFT_STATE] as ES5State).scope_ === scope\n\t\t) {\n\t\t\tmarkChangesSweep(scope.drafts_)\n\t\t}\n\t}\n\n\tfunction createES5Draft(isArray: boolean, base: any) {\n\t\tif (isArray) {\n\t\t\tconst draft = new Array(base.length)\n\t\t\tfor (let i = 0; i < base.length; i++)\n\t\t\t\tObject.defineProperty(draft, \"\" + i, proxyProperty(i, true))\n\t\t\treturn draft\n\t\t} else {\n\t\t\tconst descriptors = getOwnPropertyDescriptors(base)\n\t\t\tdelete descriptors[DRAFT_STATE as any]\n\t\t\tconst keys = ownKeys(descriptors)\n\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\tconst key: any = keys[i]\n\t\t\t\tdescriptors[key] = proxyProperty(\n\t\t\t\t\tkey,\n\t\t\t\t\tisArray || !!descriptors[key].enumerable\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn Object.create(Object.getPrototypeOf(base), descriptors)\n\t\t}\n\t}\n\n\tfunction createES5Proxy_(\n\t\tbase: T,\n\t\tparent?: ImmerState\n\t): Drafted {\n\t\tconst isArray = Array.isArray(base)\n\t\tconst draft = createES5Draft(isArray, base)\n\n\t\tconst state: ES5ObjectState | ES5ArrayState = {\n\t\t\ttype_: isArray ? ProxyType.ES5Array : (ProxyType.ES5Object as any),\n\t\t\tscope_: parent ? parent.scope_ : getCurrentScope(),\n\t\t\tmodified_: false,\n\t\t\tfinalized_: false,\n\t\t\tassigned_: {},\n\t\t\tparent_: parent,\n\t\t\t// base is the object we are drafting\n\t\t\tbase_: base,\n\t\t\t// draft is the draft object itself, that traps all reads and reads from either the base (if unmodified) or copy (if modified)\n\t\t\tdraft_: draft,\n\t\t\tcopy_: null,\n\t\t\trevoked_: false,\n\t\t\tisManual_: false\n\t\t}\n\n\t\tObject.defineProperty(draft, DRAFT_STATE, {\n\t\t\tvalue: state,\n\t\t\t// enumerable: false <- the default\n\t\t\twritable: true\n\t\t})\n\t\treturn draft\n\t}\n\n\t// property descriptors are recycled to make sure we don't create a get and set closure per property,\n\t// but share them all instead\n\tconst descriptors: {[prop: string]: PropertyDescriptor} = {}\n\n\tfunction proxyProperty(\n\t\tprop: string | number,\n\t\tenumerable: boolean\n\t): PropertyDescriptor {\n\t\tlet desc = descriptors[prop]\n\t\tif (desc) {\n\t\t\tdesc.enumerable = enumerable\n\t\t} else {\n\t\t\tdescriptors[prop] = desc = {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable,\n\t\t\t\tget(this: any) {\n\t\t\t\t\tconst state = this[DRAFT_STATE]\n\t\t\t\t\tif (__DEV__) assertUnrevoked(state)\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\treturn objectTraps.get(state, prop)\n\t\t\t\t},\n\t\t\t\tset(this: any, value) {\n\t\t\t\t\tconst state = this[DRAFT_STATE]\n\t\t\t\t\tif (__DEV__) assertUnrevoked(state)\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tobjectTraps.set(state, prop, value)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn desc\n\t}\n\n\t// This looks expensive, but only proxies are visited, and only objects without known changes are scanned.\n\tfunction markChangesSweep(drafts: Drafted[]) {\n\t\t// The natural order of drafts in the `scope` array is based on when they\n\t\t// were accessed. By processing drafts in reverse natural order, we have a\n\t\t// better chance of processing leaf nodes first. When a leaf node is known to\n\t\t// have changed, we can avoid any traversal of its ancestor nodes.\n\t\tfor (let i = drafts.length - 1; i >= 0; i--) {\n\t\t\tconst state: ES5State = drafts[i][DRAFT_STATE]\n\t\t\tif (!state.modified_) {\n\t\t\t\tswitch (state.type_) {\n\t\t\t\t\tcase ProxyType.ES5Array:\n\t\t\t\t\t\tif (hasArrayChanges(state)) markChanged(state)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase ProxyType.ES5Object:\n\t\t\t\t\t\tif (hasObjectChanges(state)) markChanged(state)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction markChangesRecursively(object: any) {\n\t\tif (!object || typeof object !== \"object\") return\n\t\tconst state: ES5State | undefined = object[DRAFT_STATE]\n\t\tif (!state) return\n\t\tconst {base_, draft_, assigned_, type_} = state\n\t\tif (type_ === ProxyType.ES5Object) {\n\t\t\t// Look for added keys.\n\t\t\t// probably there is a faster way to detect changes, as sweep + recurse seems to do some\n\t\t\t// unnecessary work.\n\t\t\t// also: probably we can store the information we detect here, to speed up tree finalization!\n\t\t\teach(draft_, key => {\n\t\t\t\tif ((key as any) === DRAFT_STATE) return\n\t\t\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\t\t\tif ((base_ as any)[key] === undefined && !has(base_, key)) {\n\t\t\t\t\tassigned_[key] = true\n\t\t\t\t\tmarkChanged(state)\n\t\t\t\t} else if (!assigned_[key]) {\n\t\t\t\t\t// Only untouched properties trigger recursion.\n\t\t\t\t\tmarkChangesRecursively(draft_[key])\n\t\t\t\t}\n\t\t\t})\n\t\t\t// Look for removed keys.\n\t\t\teach(base_, key => {\n\t\t\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\t\t\tif (draft_[key] === undefined && !has(draft_, key)) {\n\t\t\t\t\tassigned_[key] = false\n\t\t\t\t\tmarkChanged(state)\n\t\t\t\t}\n\t\t\t})\n\t\t} else if (type_ === ProxyType.ES5Array) {\n\t\t\tif (hasArrayChanges(state as ES5ArrayState)) {\n\t\t\t\tmarkChanged(state)\n\t\t\t\tassigned_.length = true\n\t\t\t}\n\n\t\t\tif (draft_.length < base_.length) {\n\t\t\t\tfor (let i = draft_.length; i < base_.length; i++) assigned_[i] = false\n\t\t\t} else {\n\t\t\t\tfor (let i = base_.length; i < draft_.length; i++) assigned_[i] = true\n\t\t\t}\n\n\t\t\t// Minimum count is enough, the other parts has been processed.\n\t\t\tconst min = Math.min(draft_.length, base_.length)\n\n\t\t\tfor (let i = 0; i < min; i++) {\n\t\t\t\t// Only untouched indices trigger recursion.\n\t\t\t\tif (!draft_.hasOwnProperty(i)) {\n\t\t\t\t\tassigned_[i] = true\n\t\t\t\t}\n\t\t\t\tif (assigned_[i] === undefined) markChangesRecursively(draft_[i])\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction hasObjectChanges(state: ES5ObjectState) {\n\t\tconst {base_, draft_} = state\n\n\t\t// Search for added keys and changed keys. Start at the back, because\n\t\t// non-numeric keys are ordered by time of definition on the object.\n\t\tconst keys = ownKeys(draft_)\n\t\tfor (let i = keys.length - 1; i >= 0; i--) {\n\t\t\tconst key: any = keys[i]\n\t\t\tif (key === DRAFT_STATE) continue\n\t\t\tconst baseValue = base_[key]\n\t\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\t\tif (baseValue === undefined && !has(base_, key)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// Once a base key is deleted, future changes go undetected, because its\n\t\t\t// descriptor is erased. This branch detects any missed changes.\n\t\t\telse {\n\t\t\t\tconst value = draft_[key]\n\t\t\t\tconst state: ImmerState = value && value[DRAFT_STATE]\n\t\t\t\tif (state ? state.base_ !== baseValue : !is(value, baseValue)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// At this point, no keys were added or changed.\n\t\t// Compare key count to determine if keys were deleted.\n\t\tconst baseIsDraft = !!base_[DRAFT_STATE as any]\n\t\treturn keys.length !== ownKeys(base_).length + (baseIsDraft ? 0 : 1) // + 1 to correct for DRAFT_STATE\n\t}\n\n\tfunction hasArrayChanges(state: ES5ArrayState) {\n\t\tconst {draft_} = state\n\t\tif (draft_.length !== state.base_.length) return true\n\t\t// See #116\n\t\t// If we first shorten the length, our array interceptors will be removed.\n\t\t// If after that new items are added, result in the same original length,\n\t\t// those last items will have no intercepting property.\n\t\t// So if there is no own descriptor on the last position, we know that items were removed and added\n\t\t// N.B.: splice, unshift, etc only shift values around, but not prop descriptors, so we only have to check\n\t\t// the last one\n\t\t// last descriptor can be not a trap, if the array was extended\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(\n\t\t\tdraft_,\n\t\t\tdraft_.length - 1\n\t\t)\n\t\t// descriptor can be null, but only for newly created sparse arrays, eg. new Array(10)\n\t\tif (descriptor && !descriptor.get) return true\n\t\t// if we miss a property, it has been deleted, so array probobaly changed\n\t\tfor (let i = 0; i < draft_.length; i++) {\n\t\t\tif (!draft_.hasOwnProperty(i)) return true\n\t\t}\n\t\t// For all other cases, we don't have to compare, as they would have been picked up by the index setters\n\t\treturn false\n\t}\n\n\tfunction hasChanges_(state: ES5State) {\n\t\treturn state.type_ === ProxyType.ES5Object\n\t\t\t? hasObjectChanges(state)\n\t\t\t: hasArrayChanges(state)\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"ES5\", {\n\t\tcreateES5Proxy_,\n\t\twillFinalizeES5_,\n\t\thasChanges_\n\t})\n}\n","import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = immer.produce\nexport default produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to use the ES2015 `Proxy` class when creating drafts, which is\n * always faster than using ES5 proxies.\n *\n * By default, feature detection is used, so calling this is rarely necessary.\n */\nexport const setUseProxies = immer.setUseProxies.bind(immer)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft(value: T): Draft {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable(value: T): Immutable {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enableES5} from \"./plugins/es5\"\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\nexport {enableAllPlugins} from \"./plugins/all\"\n","// Should be no imports here!\n\n// Some things that should be evaluated before all else...\n\n// We only want to know if non-polyfilled symbols are available\nconst hasSymbol =\n\ttypeof Symbol !== \"undefined\" && typeof Symbol(\"x\") === \"symbol\"\nexport const hasMap = typeof Map !== \"undefined\"\nexport const hasSet = typeof Set !== \"undefined\"\nexport const hasProxies =\n\ttypeof Proxy !== \"undefined\" &&\n\ttypeof Proxy.revocable !== \"undefined\" &&\n\ttypeof Reflect !== \"undefined\"\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: Nothing = hasSymbol\n\t? Symbol.for(\"immer-nothing\")\n\t: ({[\"immer-nothing\"]: true} as any)\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = hasSymbol\n\t? Symbol.for(\"immer-draftable\")\n\t: (\"__$immer_draftable\" as any)\n\nexport const DRAFT_STATE: unique symbol = hasSymbol\n\t? Symbol.for(\"immer-state\")\n\t: (\"__$immer_state\" as any)\n\n// Even a polyfilled Symbol might provide Symbol.iterator\nexport const iteratorSymbol: typeof Symbol.iterator =\n\t(typeof Symbol != \"undefined\" && Symbol.iterator) || (\"@@iterator\" as any)\n\n/** Use a class type for `nothing` so its type is unique */\nexport class Nothing {\n\t// This lets us do `Exclude`\n\t// @ts-ignore\n\tprivate _!: unique symbol\n}\n","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n var type = typeof val;\n\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n var constructorName = ctorName(val);\n\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n } // other\n\n\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n var typeOfVal = typeof val;\n\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n\n return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread(_objectSpread({}, store), {}, {\n dispatch: _dispatch\n });\n };\n };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","/** A function that accepts a potential \"extra argument\" value to be injected later,\r\n * and returns an instance of the thunk middleware that uses that value\r\n */\nfunction createThunkMiddleware(extraArgument) {\n // Standard Redux middleware definition pattern:\n // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware\n var middleware = function middleware(_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n // The thunk middleware looks for any functions that were passed to `store.dispatch`.\n // If this \"action\" is really a function, call it and return the result.\n if (typeof action === 'function') {\n // Inject the store's `dispatch` and `getState` methods, as well as any \"extra arg\"\n return action(dispatch, getState, extraArgument);\n } // Otherwise, pass the action down the middleware chain as usual\n\n\n return next(action);\n };\n };\n };\n\n return middleware;\n}\n\nvar thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version\n// with whatever \"extra arg\" they want to inject into their thunks\n\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;","import type { Action, ActionCreator, StoreEnhancer } from 'redux'\r\nimport { compose } from 'redux'\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface DevToolsEnhancerOptions {\r\n /**\r\n * the instance name to be showed on the monitor page. Default value is `document.title`.\r\n * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.\r\n */\r\n name?: string\r\n /**\r\n * action creators functions to be available in the Dispatcher.\r\n */\r\n actionCreators?: ActionCreator[] | { [key: string]: ActionCreator }\r\n /**\r\n * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.\r\n * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.\r\n * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).\r\n *\r\n * @default 500 ms.\r\n */\r\n latency?: number\r\n /**\r\n * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.\r\n *\r\n * @default 50\r\n */\r\n maxAge?: number\r\n /**\r\n * Customizes how actions and state are serialized and deserialized. Can be a boolean or object. If given a boolean, the behavior is the same as if you\r\n * were to pass an object and specify `options` as a boolean. Giving an object allows fine-grained customization using the `replacer` and `reviver`\r\n * functions.\r\n */\r\n serialize?:\r\n | boolean\r\n | {\r\n /**\r\n * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).\r\n * - `false` - will handle also circular references.\r\n * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.\r\n * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.\r\n * For each of them you can indicate if to include (by setting as `true`).\r\n * For `function` key you can also specify a custom function which handles serialization.\r\n * See [`jsan`](https://github.com/kolodny/jsan) for more details.\r\n */\r\n options?:\r\n | undefined\r\n | boolean\r\n | {\r\n date?: true\r\n regex?: true\r\n undefined?: true\r\n error?: true\r\n symbol?: true\r\n map?: true\r\n set?: true\r\n function?: true | ((fn: (...args: any[]) => any) => string)\r\n }\r\n /**\r\n * [JSON replacer function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter) used for both actions and states stringify.\r\n * In addition, you can specify a data type by adding a [`__serializedType__`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/helpers/index.js#L4)\r\n * key. So you can deserialize it back while importing or persisting data.\r\n * Moreover, it will also [show a nice preview showing the provided custom type](https://cloud.githubusercontent.com/assets/7957859/21814330/a17d556a-d761-11e6-85ef-159dd12f36c5.png):\r\n */\r\n replacer?: (key: string, value: unknown) => any\r\n /**\r\n * [JSON `reviver` function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter)\r\n * used for parsing the imported actions and states. See [`remotedev-serialize`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/immutable/serialize.js#L8-L41)\r\n * as an example on how to serialize special data types and get them back.\r\n */\r\n reviver?: (key: string, value: unknown) => any\r\n /**\r\n * Automatically serialize/deserialize immutablejs via [remotedev-serialize](https://github.com/zalmoxisus/remotedev-serialize).\r\n * Just pass the Immutable library. It will support all ImmutableJS structures. You can even export them into a file and get them back.\r\n * The only exception is `Record` class, for which you should pass this in addition the references to your classes in `refs`.\r\n */\r\n immutable?: any\r\n /**\r\n * ImmutableJS `Record` classes used to make possible restore its instances back when importing, persisting...\r\n */\r\n refs?: any\r\n }\r\n /**\r\n * function which takes `action` object and id number as arguments, and should return `action` object back.\r\n */\r\n actionSanitizer?: (action: A, id: number) => A\r\n /**\r\n * function which takes `state` object and index as arguments, and should return `state` object back.\r\n */\r\n stateSanitizer?: (state: S, index: number) => S\r\n /**\r\n * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n * If `actionsWhitelist` specified, `actionsBlacklist` is ignored.\r\n * @deprecated Use actionsDenylist instead.\r\n */\r\n actionsBlacklist?: string | string[]\r\n /**\r\n * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n * If `actionsWhitelist` specified, `actionsBlacklist` is ignored.\r\n * @deprecated Use actionsAllowlist instead.\r\n */\r\n actionsWhitelist?: string | string[]\r\n /**\r\n * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n */\r\n actionsDenylist?: string | string[]\r\n /**\r\n * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n */\r\n actionsAllowlist?: string | string[]\r\n /**\r\n * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.\r\n * Use it as a more advanced version of `actionsDenylist`/`actionsAllowlist` parameters.\r\n */\r\n predicate?: (state: S, action: A) => boolean\r\n /**\r\n * if specified as `false`, it will not record the changes till clicking on `Start recording` button.\r\n * Available only for Redux enhancer, for others use `autoPause`.\r\n *\r\n * @default true\r\n */\r\n shouldRecordChanges?: boolean\r\n /**\r\n * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.\r\n * If not specified, will commit when paused. Available only for Redux enhancer.\r\n *\r\n * @default \"@@PAUSED\"\"\r\n */\r\n pauseActionType?: string\r\n /**\r\n * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.\r\n * Not available for Redux enhancer (as it already does it but storing the data to be sent).\r\n *\r\n * @default false\r\n */\r\n autoPause?: boolean\r\n /**\r\n * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.\r\n * Available only for Redux enhancer.\r\n *\r\n * @default false\r\n */\r\n shouldStartLocked?: boolean\r\n /**\r\n * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.\r\n *\r\n * @default true\r\n */\r\n shouldHotReload?: boolean\r\n /**\r\n * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.\r\n *\r\n * @default false\r\n */\r\n shouldCatchErrors?: boolean\r\n /**\r\n * If you want to restrict the extension, specify the features you allow.\r\n * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.\r\n * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.\r\n * Otherwise, you'll get/set the data right from the monitor part.\r\n */\r\n features?: {\r\n /**\r\n * start/pause recording of dispatched actions\r\n */\r\n pause?: boolean\r\n /**\r\n * lock/unlock dispatching actions and side effects\r\n */\r\n lock?: boolean\r\n /**\r\n * persist states on page reloading\r\n */\r\n persist?: boolean\r\n /**\r\n * export history of actions in a file\r\n */\r\n export?: boolean | 'custom'\r\n /**\r\n * import history of actions from a file\r\n */\r\n import?: boolean | 'custom'\r\n /**\r\n * jump back and forth (time travelling)\r\n */\r\n jump?: boolean\r\n /**\r\n * skip (cancel) actions\r\n */\r\n skip?: boolean\r\n /**\r\n * drag and drop actions in the history list\r\n */\r\n reorder?: boolean\r\n /**\r\n * dispatch custom actions or action creators\r\n */\r\n dispatch?: boolean\r\n /**\r\n * generate tests for the selected actions\r\n */\r\n test?: boolean\r\n }\r\n /**\r\n * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.\r\n * Defaults to false.\r\n */\r\n trace?: boolean | ((action: A) => string)\r\n /**\r\n * The maximum number of stack trace entries to record per action. Defaults to 10.\r\n */\r\n traceLimit?: number\r\n}\r\n\r\ntype Compose = typeof compose\r\n\r\ninterface ComposeWithDevTools {\r\n (options: DevToolsEnhancerOptions): Compose\r\n (...funcs: StoreEnhancer[]): StoreEnhancer\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport const composeWithDevTools: ComposeWithDevTools =\r\n typeof window !== 'undefined' &&\r\n (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\r\n ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\r\n : function () {\r\n if (arguments.length === 0) return undefined\r\n if (typeof arguments[0] === 'object') return compose\r\n return compose.apply(null, arguments as any as Function[])\r\n }\r\n\r\n/**\r\n * @public\r\n */\r\nexport const devToolsEnhancer: {\r\n (options: DevToolsEnhancerOptions): StoreEnhancer\r\n} =\r\n typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__\r\n ? (window as any).__REDUX_DEVTOOLS_EXTENSION__\r\n : function () {\r\n return function (noop) {\r\n return noop\r\n }\r\n }\r\n","/**\r\n * Returns true if the passed value is \"plain\" object, i.e. an object whose\r\n * prototype is the root `Object.prototype`. This includes objects created\r\n * using object literals, but not for instance for class instances.\r\n *\r\n * @param {any} value The value to inspect.\r\n * @returns {boolean} True if the argument appears to be a plain object.\r\n *\r\n * @public\r\n */\r\nexport default function isPlainObject(value: unknown): value is object {\r\n if (typeof value !== 'object' || value === null) return false\r\n\r\n let proto = Object.getPrototypeOf(value)\r\n if (proto === null) return true\r\n\r\n let baseProto = proto\r\n while (Object.getPrototypeOf(baseProto) !== null) {\r\n baseProto = Object.getPrototypeOf(baseProto)\r\n }\r\n\r\n return proto === baseProto\r\n}\r\n","import createNextState, { isDraftable } from 'immer'\r\nimport type { Middleware } from 'redux'\r\n\r\nexport function getTimeMeasureUtils(maxDelay: number, fnName: string) {\r\n let elapsed = 0\r\n return {\r\n measureTime(fn: () => T): T {\r\n const started = Date.now()\r\n try {\r\n return fn()\r\n } finally {\r\n const finished = Date.now()\r\n elapsed += finished - started\r\n }\r\n },\r\n warnIfExceeded() {\r\n if (elapsed > maxDelay) {\r\n console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \r\nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\r\nIt is disabled in production builds, so you don't need to worry about that.`)\r\n }\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport class MiddlewareArray<\r\n Middlewares extends Middleware[]\r\n> extends Array {\r\n constructor(...items: Middlewares)\r\n constructor(...args: any[]) {\r\n super(...args)\r\n Object.setPrototypeOf(this, MiddlewareArray.prototype)\r\n }\r\n\r\n static get [Symbol.species]() {\r\n return MiddlewareArray as any\r\n }\r\n\r\n concat>>(\r\n items: AdditionalMiddlewares\r\n ): MiddlewareArray<[...Middlewares, ...AdditionalMiddlewares]>\r\n\r\n concat>>(\r\n ...items: AdditionalMiddlewares\r\n ): MiddlewareArray<[...Middlewares, ...AdditionalMiddlewares]>\r\n concat(...arr: any[]) {\r\n return super.concat.apply(this, arr)\r\n }\r\n\r\n prepend>>(\r\n items: AdditionalMiddlewares\r\n ): MiddlewareArray<[...AdditionalMiddlewares, ...Middlewares]>\r\n\r\n prepend>>(\r\n ...items: AdditionalMiddlewares\r\n ): MiddlewareArray<[...AdditionalMiddlewares, ...Middlewares]>\r\n\r\n prepend(...arr: any[]) {\r\n if (arr.length === 1 && Array.isArray(arr[0])) {\r\n return new MiddlewareArray(...arr[0].concat(this))\r\n }\r\n return new MiddlewareArray(...arr.concat(this))\r\n }\r\n}\r\n\r\nexport function freezeDraftable(val: T) {\r\n return isDraftable(val) ? createNextState(val, () => {}) : val\r\n}\r\n","import type { Middleware, AnyAction } from 'redux'\r\nimport type { ThunkMiddleware } from 'redux-thunk'\r\nimport thunkMiddleware from 'redux-thunk'\r\nimport type { ImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware'\r\n/* PROD_START_REMOVE_UMD */\r\nimport { createImmutableStateInvariantMiddleware } from './immutableStateInvariantMiddleware'\r\n/* PROD_STOP_REMOVE_UMD */\r\n\r\nimport type { SerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware'\r\nimport { createSerializableStateInvariantMiddleware } from './serializableStateInvariantMiddleware'\r\nimport type { ExcludeFromTuple } from './tsHelpers'\r\nimport { MiddlewareArray } from './utils'\r\n\r\nfunction isBoolean(x: any): x is boolean {\r\n return typeof x === 'boolean'\r\n}\r\n\r\ninterface ThunkOptions {\r\n extraArgument: E\r\n}\r\n\r\ninterface GetDefaultMiddlewareOptions {\r\n thunk?: boolean | ThunkOptions\r\n immutableCheck?: boolean | ImmutableStateInvariantMiddlewareOptions\r\n serializableCheck?: boolean | SerializableStateInvariantMiddlewareOptions\r\n}\r\n\r\nexport type ThunkMiddlewareFor<\r\n S,\r\n O extends GetDefaultMiddlewareOptions = {}\r\n> = O extends {\r\n thunk: false\r\n}\r\n ? never\r\n : O extends { thunk: { extraArgument: infer E } }\r\n ? ThunkMiddleware\r\n : ThunkMiddleware\r\n\r\nexport type CurriedGetDefaultMiddleware = <\r\n O extends Partial = {\r\n thunk: true\r\n immutableCheck: true\r\n serializableCheck: true\r\n }\r\n>(\r\n options?: O\r\n) => MiddlewareArray], never>>\r\n\r\nexport function curryGetDefaultMiddleware<\r\n S = any\r\n>(): CurriedGetDefaultMiddleware {\r\n return function curriedGetDefaultMiddleware(options) {\r\n return getDefaultMiddleware(options)\r\n }\r\n}\r\n\r\n/**\r\n * Returns any array containing the default middleware installed by\r\n * `configureStore()`. Useful if you want to configure your store with a custom\r\n * `middleware` array but still keep the default set.\r\n *\r\n * @return The default middleware used by `configureStore()`.\r\n *\r\n * @public\r\n *\r\n * @deprecated Prefer to use the callback notation for the `middleware` option in `configureStore`\r\n * to access a pre-typed `getDefaultMiddleware` instead.\r\n */\r\nexport function getDefaultMiddleware<\r\n S = any,\r\n O extends Partial = {\r\n thunk: true\r\n immutableCheck: true\r\n serializableCheck: true\r\n }\r\n>(\r\n options: O = {} as O\r\n): MiddlewareArray], never>> {\r\n const {\r\n thunk = true,\r\n immutableCheck = true,\r\n serializableCheck = true,\r\n } = options\r\n\r\n let middlewareArray = new MiddlewareArray()\r\n\r\n if (thunk) {\r\n if (isBoolean(thunk)) {\r\n middlewareArray.push(thunkMiddleware)\r\n } else {\r\n middlewareArray.push(\r\n thunkMiddleware.withExtraArgument(thunk.extraArgument)\r\n )\r\n }\r\n }\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (immutableCheck) {\r\n /* PROD_START_REMOVE_UMD */\r\n let immutableOptions: ImmutableStateInvariantMiddlewareOptions = {}\r\n\r\n if (!isBoolean(immutableCheck)) {\r\n immutableOptions = immutableCheck\r\n }\r\n\r\n middlewareArray.unshift(\r\n createImmutableStateInvariantMiddleware(immutableOptions)\r\n )\r\n /* PROD_STOP_REMOVE_UMD */\r\n }\r\n\r\n if (serializableCheck) {\r\n let serializableOptions: SerializableStateInvariantMiddlewareOptions = {}\r\n\r\n if (!isBoolean(serializableCheck)) {\r\n serializableOptions = serializableCheck\r\n }\r\n\r\n middlewareArray.push(\r\n createSerializableStateInvariantMiddleware(serializableOptions)\r\n )\r\n }\r\n }\r\n\r\n return middlewareArray as any\r\n}\r\n","import type { Action } from 'redux'\r\nimport type {\r\n IsUnknownOrNonInferrable,\r\n IfMaybeUndefined,\r\n IfVoid,\r\n IsAny,\r\n} from './tsHelpers'\r\nimport isPlainObject from './isPlainObject'\r\n\r\n/**\r\n * An action with a string type and an associated payload. This is the\r\n * type of action returned by `createAction()` action creators.\r\n *\r\n * @template P The type of the action's payload.\r\n * @template T the type used for the action type.\r\n * @template M The type of the action's meta (optional)\r\n * @template E The type of the action's error (optional)\r\n *\r\n * @public\r\n */\r\nexport type PayloadAction<\r\n P = void,\r\n T extends string = string,\r\n M = never,\r\n E = never\r\n> = {\r\n payload: P\r\n type: T\r\n} & ([M] extends [never]\r\n ? {}\r\n : {\r\n meta: M\r\n }) &\r\n ([E] extends [never]\r\n ? {}\r\n : {\r\n error: E\r\n })\r\n\r\n/**\r\n * A \"prepare\" method to be used as the second parameter of `createAction`.\r\n * Takes any number of arguments and returns a Flux Standard Action without\r\n * type (will be added later) that *must* contain a payload (might be undefined).\r\n *\r\n * @public\r\n */\r\nexport type PrepareAction

=\r\n | ((...args: any[]) => { payload: P })\r\n | ((...args: any[]) => { payload: P; meta: any })\r\n | ((...args: any[]) => { payload: P; error: any })\r\n | ((...args: any[]) => { payload: P; meta: any; error: any })\r\n\r\n/**\r\n * Internal version of `ActionCreatorWithPreparedPayload`. Not to be used externally.\r\n *\r\n * @internal\r\n */\r\nexport type _ActionCreatorWithPreparedPayload<\r\n PA extends PrepareAction | void,\r\n T extends string = string\r\n> = PA extends PrepareAction\r\n ? ActionCreatorWithPreparedPayload<\r\n Parameters,\r\n P,\r\n T,\r\n ReturnType extends {\r\n error: infer E\r\n }\r\n ? E\r\n : never,\r\n ReturnType extends {\r\n meta: infer M\r\n }\r\n ? M\r\n : never\r\n >\r\n : void\r\n\r\n/**\r\n * Basic type for all action creators.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n */\r\nexport interface BaseActionCreator {\r\n type: T\r\n match: (action: Action) => action is PayloadAction\r\n}\r\n\r\n/**\r\n * An action creator that takes multiple arguments that are passed\r\n * to a `PrepareAction` method to create the final Action.\r\n * @typeParam Args arguments for the action creator function\r\n * @typeParam P `payload` type\r\n * @typeParam T `type` name\r\n * @typeParam E optional `error` type\r\n * @typeParam M optional `meta` type\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\r\nexport interface ActionCreatorWithPreparedPayload<\r\n Args extends unknown[],\r\n P,\r\n T extends string = string,\r\n E = never,\r\n M = never\r\n> extends BaseActionCreator {\r\n /**\r\n * Calling this {@link redux#ActionCreator} with `Args` will return\r\n * an Action with a payload of type `P` and (depending on the `PrepareAction`\r\n * method used) a `meta`- and `error` property of types `M` and `E` respectively.\r\n */\r\n (...args: Args): PayloadAction\r\n}\r\n\r\n/**\r\n * An action creator of type `T` that takes an optional payload of type `P`.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\r\nexport interface ActionCreatorWithOptionalPayload\r\n extends BaseActionCreator {\r\n /**\r\n * Calling this {@link redux#ActionCreator} with an argument will\r\n * return a {@link PayloadAction} of type `T` with a payload of `P`.\r\n * Calling it without an argument will return a PayloadAction with a payload of `undefined`.\r\n */\r\n (payload?: P): PayloadAction\r\n}\r\n\r\n/**\r\n * An action creator of type `T` that takes no payload.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\r\nexport interface ActionCreatorWithoutPayload\r\n extends BaseActionCreator {\r\n /**\r\n * Calling this {@link redux#ActionCreator} will\r\n * return a {@link PayloadAction} of type `T` with a payload of `undefined`\r\n */\r\n (): PayloadAction\r\n}\r\n\r\n/**\r\n * An action creator of type `T` that requires a payload of type P.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\r\nexport interface ActionCreatorWithPayload\r\n extends BaseActionCreator {\r\n /**\r\n * Calling this {@link redux#ActionCreator} with an argument will\r\n * return a {@link PayloadAction} of type `T` with a payload of `P`\r\n */\r\n (payload: P): PayloadAction\r\n}\r\n\r\n/**\r\n * An action creator of type `T` whose `payload` type could not be inferred. Accepts everything as `payload`.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\r\nexport interface ActionCreatorWithNonInferrablePayload<\r\n T extends string = string\r\n> extends BaseActionCreator {\r\n /**\r\n * Calling this {@link redux#ActionCreator} with an argument will\r\n * return a {@link PayloadAction} of type `T` with a payload\r\n * of exactly the type of the argument.\r\n */\r\n (payload: PT): PayloadAction\r\n}\r\n\r\n/**\r\n * An action creator that produces actions with a `payload` attribute.\r\n *\r\n * @typeParam P the `payload` type\r\n * @typeParam T the `type` of the resulting action\r\n * @typeParam PA if the resulting action is preprocessed by a `prepare` method, the signature of said method.\r\n *\r\n * @public\r\n */\r\nexport type PayloadActionCreator<\r\n P = void,\r\n T extends string = string,\r\n PA extends PrepareAction

| void = void\r\n> = IfPrepareActionMethodProvided<\r\n PA,\r\n _ActionCreatorWithPreparedPayload,\r\n // else\r\n IsAny<\r\n P,\r\n ActionCreatorWithPayload,\r\n IsUnknownOrNonInferrable<\r\n P,\r\n ActionCreatorWithNonInferrablePayload,\r\n // else\r\n IfVoid<\r\n P,\r\n ActionCreatorWithoutPayload,\r\n // else\r\n IfMaybeUndefined<\r\n P,\r\n ActionCreatorWithOptionalPayload,\r\n // else\r\n ActionCreatorWithPayload\r\n >\r\n >\r\n >\r\n >\r\n>\r\n\r\n/**\r\n * A utility function to create an action creator for the given action type\r\n * string. The action creator accepts a single argument, which will be included\r\n * in the action object as a field called payload. The action creator function\r\n * will also have its toString() overriden so that it returns the action type,\r\n * allowing it to be used in reducer logic that is looking for that action type.\r\n *\r\n * @param type The action type to use for created actions.\r\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\r\n * If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\r\n *\r\n * @public\r\n */\r\nexport function createAction

>(\r\n predicate: P,\r\n timeout: number | undefined\r\n ) => {\r\n validateActive(signal)\r\n\r\n // Placeholder unsubscribe function until the listener is added\r\n let unsubscribe: UnsubscribeListener = () => {}\r\n\r\n const tuplePromise = new Promise<[AnyAction, S, S]>((resolve) => {\r\n // Inside the Promise, we synchronously add the listener.\r\n unsubscribe = startListening({\r\n predicate: predicate as any,\r\n effect: (action, listenerApi): void => {\r\n // One-shot listener that cleans up as soon as the predicate passes\r\n listenerApi.unsubscribe()\r\n // Resolve the promise with the same arguments the predicate saw\r\n resolve([\r\n action,\r\n listenerApi.getState(),\r\n listenerApi.getOriginalState(),\r\n ])\r\n },\r\n })\r\n })\r\n\r\n const promises: (Promise | Promise<[AnyAction, S, S]>)[] = [\r\n promisifyAbortSignal(signal),\r\n tuplePromise,\r\n ]\r\n\r\n if (timeout != null) {\r\n promises.push(\r\n new Promise((resolve) => setTimeout(resolve, timeout, null))\r\n )\r\n }\r\n\r\n try {\r\n const output = await Promise.race(promises)\r\n\r\n validateActive(signal)\r\n return output\r\n } finally {\r\n // Always clean up the listener\r\n unsubscribe()\r\n }\r\n }\r\n\r\n return ((predicate: AnyListenerPredicate, timeout: number | undefined) =>\r\n catchRejection(take(predicate, timeout))) as TakePattern\r\n}\r\n\r\nconst getListenerEntryPropsFrom = (options: FallbackAddListenerOptions) => {\r\n let { type, actionCreator, matcher, predicate, effect } = options\r\n\r\n if (type) {\r\n predicate = createAction(type).match\r\n } else if (actionCreator) {\r\n type = actionCreator!.type\r\n predicate = actionCreator.match\r\n } else if (matcher) {\r\n predicate = matcher\r\n } else if (predicate) {\r\n // pass\r\n } else {\r\n throw new Error(\r\n 'Creating or removing a listener requires one of the known fields for matching an action'\r\n )\r\n }\r\n\r\n assertFunction(effect, 'options.listener')\r\n\r\n return { predicate, type, effect }\r\n}\r\n\r\n/** Accepts the possible options for creating a listener, and returns a formatted listener entry */\r\nexport const createListenerEntry: TypedCreateListenerEntry = (\r\n options: FallbackAddListenerOptions\r\n) => {\r\n const { type, predicate, effect } = getListenerEntryPropsFrom(options)\r\n\r\n const id = nanoid()\r\n const entry: ListenerEntry = {\r\n id,\r\n effect,\r\n type,\r\n predicate,\r\n pending: new Set(),\r\n unsubscribe: () => {\r\n throw new Error('Unsubscribe not initialized')\r\n },\r\n }\r\n\r\n return entry\r\n}\r\n\r\nconst createClearListenerMiddleware = (\r\n listenerMap: Map\r\n) => {\r\n return () => {\r\n listenerMap.forEach(cancelActiveListeners)\r\n\r\n listenerMap.clear()\r\n }\r\n}\r\n\r\n/**\r\n * Safely reports errors to the `errorHandler` provided.\r\n * Errors that occur inside `errorHandler` are notified in a new task.\r\n * Inspired by [rxjs reportUnhandledError](https://github.com/ReactiveX/rxjs/blob/6fafcf53dc9e557439b25debaeadfd224b245a66/src/internal/util/reportUnhandledError.ts)\r\n * @param errorHandler\r\n * @param errorToNotify\r\n */\r\nconst safelyNotifyError = (\r\n errorHandler: ListenerErrorHandler,\r\n errorToNotify: unknown,\r\n errorInfo: ListenerErrorInfo\r\n): void => {\r\n try {\r\n errorHandler(errorToNotify, errorInfo)\r\n } catch (errorHandlerError) {\r\n // We cannot let an error raised here block the listener queue.\r\n // The error raised here will be picked up by `window.onerror`, `process.on('error')` etc...\r\n setTimeout(() => {\r\n throw errorHandlerError\r\n }, 0)\r\n }\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport const addListener = createAction(\r\n `${alm}/add`\r\n) as TypedAddListener\r\n\r\n/**\r\n * @public\r\n */\r\nexport const clearAllListeners = createAction(`${alm}/removeAll`)\r\n\r\n/**\r\n * @public\r\n */\r\nexport const removeListener = createAction(\r\n `${alm}/remove`\r\n) as TypedRemoveListener\r\n\r\nconst defaultErrorHandler: ListenerErrorHandler = (...args: unknown[]) => {\r\n console.error(`${alm}/error`, ...args)\r\n}\r\n\r\nconst cancelActiveListeners = (\r\n entry: ListenerEntry>\r\n) => {\r\n entry.pending.forEach((controller) => {\r\n abortControllerWithReason(controller, listenerCancelled)\r\n })\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport function createListenerMiddleware<\r\n S = unknown,\r\n D extends Dispatch = ThunkDispatch,\r\n ExtraArgument = unknown\r\n>(middlewareOptions: CreateListenerMiddlewareOptions = {}) {\r\n const listenerMap = new Map()\r\n const { extra, onError = defaultErrorHandler } = middlewareOptions\r\n\r\n assertFunction(onError, 'onError')\r\n\r\n const insertEntry = (entry: ListenerEntry) => {\r\n entry.unsubscribe = () => listenerMap.delete(entry!.id)\r\n\r\n listenerMap.set(entry.id, entry)\r\n return (cancelOptions?: UnsubscribeListenerOptions) => {\r\n entry.unsubscribe()\r\n if (cancelOptions?.cancelActive) {\r\n cancelActiveListeners(entry)\r\n }\r\n }\r\n }\r\n\r\n const findListenerEntry = (\r\n comparator: (entry: ListenerEntry) => boolean\r\n ): ListenerEntry | undefined => {\r\n for (const entry of Array.from(listenerMap.values())) {\r\n if (comparator(entry)) {\r\n return entry\r\n }\r\n }\r\n\r\n return undefined\r\n }\r\n\r\n const startListening = (options: FallbackAddListenerOptions) => {\r\n let entry = findListenerEntry(\r\n (existingEntry) => existingEntry.effect === options.effect\r\n )\r\n\r\n if (!entry) {\r\n entry = createListenerEntry(options as any)\r\n }\r\n\r\n return insertEntry(entry)\r\n }\r\n\r\n const stopListening = (\r\n options: FallbackAddListenerOptions & UnsubscribeListenerOptions\r\n ): boolean => {\r\n const { type, effect, predicate } = getListenerEntryPropsFrom(options)\r\n\r\n const entry = findListenerEntry((entry) => {\r\n const matchPredicateOrType =\r\n typeof type === 'string'\r\n ? entry.type === type\r\n : entry.predicate === predicate\r\n\r\n return matchPredicateOrType && entry.effect === effect\r\n })\r\n\r\n if (entry) {\r\n entry.unsubscribe()\r\n if (options.cancelActive) {\r\n cancelActiveListeners(entry)\r\n }\r\n }\r\n\r\n return !!entry\r\n }\r\n\r\n const notifyListener = async (\r\n entry: ListenerEntry>,\r\n action: AnyAction,\r\n api: MiddlewareAPI,\r\n getOriginalState: () => S\r\n ) => {\r\n const internalTaskController = new AbortController()\r\n const take = createTakePattern(\r\n startListening,\r\n internalTaskController.signal\r\n )\r\n\r\n try {\r\n entry.pending.add(internalTaskController)\r\n await Promise.resolve(\r\n entry.effect(\r\n action,\r\n // Use assign() rather than ... to avoid extra helper functions added to bundle\r\n assign({}, api, {\r\n getOriginalState,\r\n condition: (\r\n predicate: AnyListenerPredicate,\r\n timeout?: number\r\n ) => take(predicate, timeout).then(Boolean),\r\n take,\r\n delay: createDelay(internalTaskController.signal),\r\n pause: createPause(internalTaskController.signal),\r\n extra,\r\n signal: internalTaskController.signal,\r\n fork: createFork(internalTaskController.signal),\r\n unsubscribe: entry.unsubscribe,\r\n subscribe: () => {\r\n listenerMap.set(entry.id, entry)\r\n },\r\n cancelActiveListeners: () => {\r\n entry.pending.forEach((controller, _, set) => {\r\n if (controller !== internalTaskController) {\r\n abortControllerWithReason(controller, listenerCancelled)\r\n set.delete(controller)\r\n }\r\n })\r\n },\r\n })\r\n )\r\n )\r\n } catch (listenerError) {\r\n if (!(listenerError instanceof TaskAbortError)) {\r\n safelyNotifyError(onError, listenerError, {\r\n raisedBy: 'effect',\r\n })\r\n }\r\n } finally {\r\n abortControllerWithReason(internalTaskController, listenerCompleted) // Notify that the task has completed\r\n entry.pending.delete(internalTaskController)\r\n }\r\n }\r\n\r\n const clearListenerMiddleware = createClearListenerMiddleware(listenerMap)\r\n\r\n const middleware: ListenerMiddleware =\r\n (api) => (next) => (action) => {\r\n if (addListener.match(action)) {\r\n return startListening(action.payload)\r\n }\r\n\r\n if (clearAllListeners.match(action)) {\r\n clearListenerMiddleware()\r\n return\r\n }\r\n\r\n if (removeListener.match(action)) {\r\n return stopListening(action.payload)\r\n }\r\n\r\n // Need to get this state _before_ the reducer processes the action\r\n let originalState: S | typeof INTERNAL_NIL_TOKEN = api.getState()\r\n\r\n // `getOriginalState` can only be called synchronously.\r\n // @see https://github.com/reduxjs/redux-toolkit/discussions/1648#discussioncomment-1932820\r\n const getOriginalState = (): S => {\r\n if (originalState === INTERNAL_NIL_TOKEN) {\r\n throw new Error(\r\n `${alm}: getOriginalState can only be called synchronously`\r\n )\r\n }\r\n\r\n return originalState as S\r\n }\r\n\r\n let result: unknown\r\n\r\n try {\r\n // Actually forward the action to the reducer before we handle listeners\r\n result = next(action)\r\n\r\n if (listenerMap.size > 0) {\r\n let currentState = api.getState()\r\n // Work around ESBuild+TS transpilation issue\r\n const listenerEntries = Array.from(listenerMap.values())\r\n for (let entry of listenerEntries) {\r\n let runListener = false\r\n\r\n try {\r\n runListener = entry.predicate(action, currentState, originalState)\r\n } catch (predicateError) {\r\n runListener = false\r\n\r\n safelyNotifyError(onError, predicateError, {\r\n raisedBy: 'predicate',\r\n })\r\n }\r\n\r\n if (!runListener) {\r\n continue\r\n }\r\n\r\n notifyListener(entry, action, api, getOriginalState)\r\n }\r\n }\r\n } finally {\r\n // Remove `originalState` store from this scope.\r\n originalState = INTERNAL_NIL_TOKEN\r\n }\r\n\r\n return result\r\n }\r\n\r\n return {\r\n middleware,\r\n startListening,\r\n stopListening,\r\n clearListeners: clearListenerMiddleware,\r\n } as ListenerMiddlewareInstance\r\n}\r\n","import type { AbortSignalWithReason } from './types'\r\n\r\nexport const assertFunction: (\r\n func: unknown,\r\n expected: string\r\n) => asserts func is (...args: unknown[]) => unknown = (\r\n func: unknown,\r\n expected: string\r\n) => {\r\n if (typeof func !== 'function') {\r\n throw new TypeError(`${expected} is not a function`)\r\n }\r\n}\r\n\r\nexport const noop = () => {}\r\n\r\nexport const catchRejection = (\r\n promise: Promise,\r\n onError = noop\r\n): Promise => {\r\n promise.catch(onError)\r\n\r\n return promise\r\n}\r\n\r\nexport const addAbortSignalListener = (\r\n abortSignal: AbortSignal,\r\n callback: (evt: Event) => void\r\n) => {\r\n abortSignal.addEventListener('abort', callback, { once: true })\r\n}\r\n\r\n/**\r\n * Calls `abortController.abort(reason)` and patches `signal.reason`.\r\n * if it is not supported.\r\n *\r\n * At the time of writing `signal.reason` is available in FF chrome, edge node 17 and deno.\r\n * @param abortController\r\n * @param reason\r\n * @returns\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/reason\r\n */\r\nexport const abortControllerWithReason = (\r\n abortController: AbortController,\r\n reason: T\r\n): void => {\r\n type Consumer = (val: T) => void\r\n\r\n const signal = abortController.signal as AbortSignalWithReason\r\n\r\n if (signal.aborted) {\r\n return\r\n }\r\n\r\n // Patch `reason` if necessary.\r\n // - We use defineProperty here because reason is a getter of `AbortSignal.__proto__`.\r\n // - We need to patch 'reason' before calling `.abort()` because listeners to the 'abort'\r\n // event are are notified immediately.\r\n if (!('reason' in signal)) {\r\n Object.defineProperty(signal, 'reason', {\r\n enumerable: true,\r\n value: reason,\r\n configurable: true,\r\n writable: true,\r\n })\r\n }\r\n\r\n ;(abortController.abort as Consumer)(reason)\r\n}\r\n","import { enableES5 } from 'immer'\r\nexport * from 'redux'\r\nexport {\r\n default as createNextState,\r\n current,\r\n freeze,\r\n original,\r\n isDraft,\r\n} from 'immer'\r\nexport type { Draft } from 'immer'\r\nexport { createSelector } from 'reselect'\r\nexport type {\r\n Selector,\r\n OutputParametricSelector,\r\n OutputSelector,\r\n ParametricSelector,\r\n} from 'reselect'\r\nexport { createDraftSafeSelector } from './createDraftSafeSelector'\r\nexport type { ThunkAction, ThunkDispatch } from 'redux-thunk'\r\n\r\n// We deliberately enable Immer's ES5 support, on the grounds that\r\n// we assume RTK will be used with React Native and other Proxy-less\r\n// environments. In addition, that's how Immer 4 behaved, and since\r\n// we want to ship this in an RTK minor, we should keep the same behavior.\r\nenableES5()\r\n\r\nexport {\r\n // js\r\n configureStore,\r\n} from './configureStore'\r\nexport type {\r\n // types\r\n ConfigureEnhancersCallback,\r\n ConfigureStoreOptions,\r\n EnhancedStore,\r\n} from './configureStore'\r\nexport type { DevToolsEnhancerOptions } from './devtoolsExtension'\r\nexport {\r\n // js\r\n createAction,\r\n getType,\r\n} from './createAction'\r\nexport type {\r\n // types\r\n PayloadAction,\r\n PayloadActionCreator,\r\n ActionCreatorWithNonInferrablePayload,\r\n ActionCreatorWithOptionalPayload,\r\n ActionCreatorWithPayload,\r\n ActionCreatorWithoutPayload,\r\n ActionCreatorWithPreparedPayload,\r\n PrepareAction,\r\n} from './createAction'\r\nexport {\r\n // js\r\n createReducer,\r\n} from './createReducer'\r\nexport type {\r\n // types\r\n Actions,\r\n CaseReducer,\r\n CaseReducers,\r\n} from './createReducer'\r\nexport {\r\n // js\r\n createSlice,\r\n} from './createSlice'\r\n\r\nexport type {\r\n // types\r\n CreateSliceOptions,\r\n Slice,\r\n CaseReducerActions,\r\n SliceCaseReducers,\r\n ValidateSliceCaseReducers,\r\n CaseReducerWithPrepare,\r\n SliceActionCreator,\r\n} from './createSlice'\r\nexport {\r\n // js\r\n createImmutableStateInvariantMiddleware,\r\n isImmutableDefault,\r\n} from './immutableStateInvariantMiddleware'\r\nexport type {\r\n // types\r\n ImmutableStateInvariantMiddlewareOptions,\r\n} from './immutableStateInvariantMiddleware'\r\nexport {\r\n // js\r\n createSerializableStateInvariantMiddleware,\r\n findNonSerializableValue,\r\n isPlain,\r\n} from './serializableStateInvariantMiddleware'\r\nexport type {\r\n // types\r\n SerializableStateInvariantMiddlewareOptions,\r\n} from './serializableStateInvariantMiddleware'\r\nexport {\r\n // js\r\n getDefaultMiddleware,\r\n} from './getDefaultMiddleware'\r\nexport type {\r\n // types\r\n ActionReducerMapBuilder,\r\n} from './mapBuilders'\r\nexport { MiddlewareArray } from './utils'\r\n\r\nexport { createEntityAdapter } from './entities/create_adapter'\r\nexport type {\r\n Dictionary,\r\n EntityState,\r\n EntityAdapter,\r\n EntitySelectors,\r\n EntityStateAdapter,\r\n EntityId,\r\n Update,\r\n IdSelector,\r\n Comparer,\r\n} from './entities/models'\r\n\r\nexport {\r\n createAsyncThunk,\r\n unwrapResult,\r\n miniSerializeError,\r\n} from './createAsyncThunk'\r\nexport type {\r\n AsyncThunk,\r\n AsyncThunkOptions,\r\n AsyncThunkAction,\r\n AsyncThunkPayloadCreatorReturnValue,\r\n AsyncThunkPayloadCreator,\r\n SerializedError,\r\n} from './createAsyncThunk'\r\n\r\nexport {\r\n // js\r\n isAllOf,\r\n isAnyOf,\r\n isPending,\r\n isRejected,\r\n isFulfilled,\r\n isAsyncThunkAction,\r\n isRejectedWithValue,\r\n} from './matchers'\r\nexport type {\r\n // types\r\n ActionMatchingAllOf,\r\n ActionMatchingAnyOf,\r\n} from './matchers'\r\n\r\nexport { nanoid } from './nanoid'\r\n\r\nexport { default as isPlainObject } from './isPlainObject'\r\n\r\nexport type {\r\n ListenerEffect,\r\n ListenerMiddleware,\r\n ListenerEffectAPI,\r\n ListenerMiddlewareInstance,\r\n CreateListenerMiddlewareOptions,\r\n ListenerErrorHandler,\r\n TypedStartListening,\r\n TypedAddListener,\r\n TypedStopListening,\r\n TypedRemoveListener,\r\n UnsubscribeListener,\r\n UnsubscribeListenerOptions,\r\n ForkedTaskExecutor,\r\n ForkedTask,\r\n ForkedTaskAPI,\r\n AsyncTaskExecutor,\r\n SyncTaskExecutor,\r\n TaskCancelled,\r\n TaskRejected,\r\n TaskResolved,\r\n TaskResult,\r\n} from './listenerMiddleware/index'\r\nexport type { AnyListenerPredicate } from './listenerMiddleware/types'\r\n\r\nexport {\r\n createListenerMiddleware,\r\n addListener,\r\n removeListener,\r\n clearAllListeners,\r\n TaskAbortError,\r\n} from './listenerMiddleware/index'\r\n","import { createSlice } from \"@reduxjs/toolkit\";\r\nimport axios from \"axios\";\r\n\r\nimport { toast } from \"react-toastify\";\r\nimport APIKEY from \"../../apikey\";\r\n\r\nconst initialState = {\r\n cityLatLon: {\r\n name: \"-----\"\r\n },\r\n data: {\r\n cod: 0,\r\n main: {\r\n temp: \"---\",\r\n feels_like: \"---\",\r\n humidity: \"---\",\r\n temp_max: \"---\",\r\n temp_min: \"---\",\r\n pressure: \"---\"\r\n },\r\n weather: [\r\n {\r\n icon: \"01d\",\r\n main: \"---\"\r\n }\r\n ],\r\n wind: {\r\n speed: 0,\r\n deg: 0\r\n },\r\n clouds: {\r\n all: 0\r\n },\r\n sys: {\r\n sunrise: 0,\r\n sunset: 0\r\n }\r\n },\r\n airPollution: {\r\n pm10: 0,\r\n no2: 0,\r\n o3: 0,\r\n pm2_5: 0\r\n },\r\n forecast: {\r\n list: []\r\n }\r\n};\r\n\r\nconst errorLoading = () => {\r\n toast.error(`City can't be found.`, {\r\n position: \"bottom-left\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: false,\r\n pauseOnHover: false,\r\n draggable: false,\r\n progress: undefined,\r\n toastId: \"error\",\r\n theme: \"dark\"\r\n });\r\n};\r\n\r\nconst loaded = () => {\r\n toast.success(`Data loaded.`, {\r\n position: \"bottom-left\",\r\n autoClose: 2000,\r\n hideProgressBar: false,\r\n closeOnClick: false,\r\n pauseOnHover: false,\r\n draggable: false,\r\n progress: undefined,\r\n toastId: \"success\",\r\n theme: \"dark\"\r\n });\r\n};\r\n\r\nconst dataSlice = createSlice({\r\n name: \"data\",\r\n initialState,\r\n reducers: {\r\n setData(state, action) {\r\n state.data = action.payload;\r\n },\r\n setLatLon(state, action) {\r\n state.cityLatLon = action.payload;\r\n },\r\n setAirPollution(state, action) {\r\n state.airPollution = action.payload;\r\n },\r\n setForecast(state, action) {\r\n state.forecast = [...action.payload];\r\n }\r\n }\r\n});\r\n\r\nexport const getAPIData = (cityName) => {\r\n return async (dispatch) => {\r\n const latLonURL = `https://api.openweathermap.org/geo/1.0/direct?q=${cityName}&limit=1&appid=${APIKEY()}`;\r\n\r\n axios\r\n .get(latLonURL)\r\n .then((resp) => {\r\n if (resp.data.length != 0) {\r\n dispatch(setLatLon(resp.data[0]));\r\n\r\n // Get Weather data\r\n const getWeatherURL = `https://api.openweathermap.org/data/2.5/weather?lat=${\r\n resp.data[0].lat\r\n }&lon=${resp.data[0].lon}&appid=${APIKEY()}&units=metric`;\r\n axios\r\n .get(getWeatherURL)\r\n .then((response) => {\r\n dispatch(setData(response.data));\r\n loaded();\r\n })\r\n .catch((err) => {\r\n errorLoading();\r\n });\r\n\r\n // Get Air Pollution data\r\n const getAirQualityURL = `https://api.openweathermap.org/data/2.5/air_pollution?lat=${\r\n resp.data[0].lat\r\n }&lon=${resp.data[0].lon}&appid=${APIKEY()}`;\r\n axios\r\n .get(getAirQualityURL)\r\n .then((response) => {\r\n let airdata = response.data.list[0].components;\r\n dispatch(setAirPollution(airdata));\r\n })\r\n .catch((err) => {\r\n errorLoading();\r\n });\r\n\r\n // Get forecast for five days\r\n const getForecastFive = `https://api.openweathermap.org/data/2.5/forecast?lat=${\r\n resp.data[0].lat\r\n }&lon=${resp.data[0].lon}&appid=${APIKEY()}&units=metric`;\r\n axios\r\n .get(getForecastFive)\r\n .then((response) => {\r\n let forecastData = response.data.list;\r\n dispatch(setForecast(forecastData));\r\n })\r\n .catch((err) => {\r\n errorLoading();\r\n });\r\n } else {\r\n errorLoading();\r\n }\r\n })\r\n .catch((err) => {\r\n console.log(err);\r\n errorLoading();\r\n });\r\n };\r\n};\r\n\r\n// Action creators are generated for each case reducer function\r\nexport const { setData, setLatLon, setAirPollution, setForecast } =\r\n dataSlice.actions;\r\n\r\nexport default dataSlice.reducer;\r\n","import type { AnyAction, Reducer } from 'redux'\r\nimport { createNextState } from '.'\r\nimport type {\r\n ActionCreatorWithoutPayload,\r\n PayloadAction,\r\n PayloadActionCreator,\r\n PrepareAction,\r\n _ActionCreatorWithPreparedPayload,\r\n} from './createAction'\r\nimport { createAction } from './createAction'\r\nimport type {\r\n CaseReducer,\r\n CaseReducers,\r\n ReducerWithInitialState,\r\n} from './createReducer'\r\nimport { createReducer, NotFunction } from './createReducer'\r\nimport type { ActionReducerMapBuilder } from './mapBuilders'\r\nimport { executeReducerBuilderCallback } from './mapBuilders'\r\nimport type { NoInfer } from './tsHelpers'\r\nimport { freezeDraftable } from './utils'\r\n\r\n/**\r\n * An action creator attached to a slice.\r\n *\r\n * @deprecated please use PayloadActionCreator directly\r\n *\r\n * @public\r\n */\r\nexport type SliceActionCreator

= PayloadActionCreator

\r\n\r\n/**\r\n * The return value of `createSlice`\r\n *\r\n * @public\r\n */\r\nexport interface Slice<\r\n State = any,\r\n CaseReducers extends SliceCaseReducers = SliceCaseReducers,\r\n Name extends string = string\r\n> {\r\n /**\r\n * The slice name.\r\n */\r\n name: Name\r\n\r\n /**\r\n * The slice's reducer.\r\n */\r\n reducer: Reducer\r\n\r\n /**\r\n * Action creators for the types of actions that are handled by the slice\r\n * reducer.\r\n */\r\n actions: CaseReducerActions\r\n\r\n /**\r\n * The individual case reducer functions that were passed in the `reducers` parameter.\r\n * This enables reuse and testing if they were defined inline when calling `createSlice`.\r\n */\r\n caseReducers: SliceDefinedCaseReducers\r\n\r\n /**\r\n * Provides access to the initial state value given to the slice.\r\n * If a lazy state initializer was provided, it will be called and a fresh value returned.\r\n */\r\n getInitialState: () => State\r\n}\r\n\r\n/**\r\n * Options for `createSlice()`.\r\n *\r\n * @public\r\n */\r\nexport interface CreateSliceOptions<\r\n State = any,\r\n CR extends SliceCaseReducers = SliceCaseReducers,\r\n Name extends string = string\r\n> {\r\n /**\r\n * The slice's name. Used to namespace the generated action types.\r\n */\r\n name: Name\r\n\r\n /**\r\n * The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\r\n */\r\n initialState: State | (() => State)\r\n\r\n /**\r\n * A mapping from action types to action-type-specific *case reducer*\r\n * functions. For every action type, a matching action creator will be\r\n * generated using `createAction()`.\r\n */\r\n reducers: ValidateSliceCaseReducers\r\n\r\n /**\r\n * A callback that receives a *builder* object to define\r\n * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\r\n * \r\n * Alternatively, a mapping from action types to action-type-specific *case reducer*\r\n * functions. These reducers should have existing action types used\r\n * as the keys, and action creators will _not_ be generated.\r\n * \r\n * @example\r\n```ts\r\nimport { createAction, createSlice, Action, AnyAction } from '@reduxjs/toolkit'\r\nconst incrementBy = createAction('incrementBy')\r\nconst decrement = createAction('decrement')\r\n\r\ninterface RejectedAction extends Action {\r\n error: Error\r\n}\r\n\r\nfunction isRejectedAction(action: AnyAction): action is RejectedAction {\r\n return action.type.endsWith('rejected')\r\n}\r\n\r\ncreateSlice({\r\n name: 'counter',\r\n initialState: 0,\r\n reducers: {},\r\n extraReducers: builder => {\r\n builder\r\n .addCase(incrementBy, (state, action) => {\r\n // action is inferred correctly here if using TS\r\n })\r\n // You can chain calls, or have separate `builder.addCase()` lines each time\r\n .addCase(decrement, (state, action) => {})\r\n // You can match a range of action types\r\n .addMatcher(\r\n isRejectedAction,\r\n // `action` will be inferred as a RejectedAction due to isRejectedAction being defined as a type guard\r\n (state, action) => {}\r\n )\r\n // and provide a default case if no other handlers matched\r\n .addDefaultCase((state, action) => {})\r\n }\r\n})\r\n```\r\n */\r\n extraReducers?:\r\n | CaseReducers, any>\r\n | ((builder: ActionReducerMapBuilder>) => void)\r\n}\r\n\r\n/**\r\n * A CaseReducer with a `prepare` method.\r\n *\r\n * @public\r\n */\r\nexport type CaseReducerWithPrepare = {\r\n reducer: CaseReducer\r\n prepare: PrepareAction\r\n}\r\n\r\n/**\r\n * The type describing a slice's `reducers` option.\r\n *\r\n * @public\r\n */\r\nexport type SliceCaseReducers = {\r\n [K: string]:\r\n | CaseReducer>\r\n | CaseReducerWithPrepare>\r\n}\r\n\r\n/**\r\n * Derives the slice's `actions` property from the `reducers` options\r\n *\r\n * @public\r\n */\r\nexport type CaseReducerActions> = {\r\n [Type in keyof CaseReducers]: CaseReducers[Type] extends { prepare: any }\r\n ? ActionCreatorForCaseReducerWithPrepare\r\n : ActionCreatorForCaseReducer\r\n}\r\n\r\n/**\r\n * Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`\r\n *\r\n * @internal\r\n */\r\ntype ActionCreatorForCaseReducerWithPrepare =\r\n _ActionCreatorWithPreparedPayload\r\n\r\n/**\r\n * Get a `PayloadActionCreator` type for a passed `CaseReducer`\r\n *\r\n * @internal\r\n */\r\ntype ActionCreatorForCaseReducer = CR extends (\r\n state: any,\r\n action: infer Action\r\n) => any\r\n ? Action extends { payload: infer P }\r\n ? PayloadActionCreator

\r\n : ActionCreatorWithoutPayload\r\n : ActionCreatorWithoutPayload\r\n\r\n/**\r\n * Extracts the CaseReducers out of a `reducers` object, even if they are\r\n * tested into a `CaseReducerWithPrepare`.\r\n *\r\n * @internal\r\n */\r\ntype SliceDefinedCaseReducers> = {\r\n [Type in keyof CaseReducers]: CaseReducers[Type] extends {\r\n reducer: infer Reducer\r\n }\r\n ? Reducer\r\n : CaseReducers[Type]\r\n}\r\n\r\n/**\r\n * Used on a SliceCaseReducers object.\r\n * Ensures that if a CaseReducer is a `CaseReducerWithPrepare`, that\r\n * the `reducer` and the `prepare` function use the same type of `payload`.\r\n *\r\n * Might do additional such checks in the future.\r\n *\r\n * This type is only ever useful if you want to write your own wrapper around\r\n * `createSlice`. Please don't use it otherwise!\r\n *\r\n * @public\r\n */\r\nexport type ValidateSliceCaseReducers<\r\n S,\r\n ACR extends SliceCaseReducers\r\n> = ACR & {\r\n [T in keyof ACR]: ACR[T] extends {\r\n reducer(s: S, action?: infer A): any\r\n }\r\n ? {\r\n prepare(...a: never[]): Omit\r\n }\r\n : {}\r\n}\r\n\r\nfunction getType(slice: string, actionKey: string): string {\r\n return `${slice}/${actionKey}`\r\n}\r\n\r\n/**\r\n * A function that accepts an initial state, an object full of reducer\r\n * functions, and a \"slice name\", and automatically generates\r\n * action creators and action types that correspond to the\r\n * reducers and state.\r\n *\r\n * The `reducer` argument is passed to `createReducer()`.\r\n *\r\n * @public\r\n */\r\nexport function createSlice<\r\n State,\r\n CaseReducers extends SliceCaseReducers,\r\n Name extends string = string\r\n>(\r\n options: CreateSliceOptions\r\n): Slice {\r\n const { name } = options\r\n if (!name) {\r\n throw new Error('`name` is a required option for createSlice')\r\n }\r\n\r\n if (\r\n typeof process !== 'undefined' &&\r\n process.env.NODE_ENV === 'development'\r\n ) {\r\n if(options.initialState === undefined) {\r\n console.error('You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`')\r\n }\r\n }\r\n\r\n const initialState =\r\n typeof options.initialState == 'function'\r\n ? options.initialState\r\n : freezeDraftable(options.initialState)\r\n\r\n const reducers = options.reducers || {}\r\n\r\n const reducerNames = Object.keys(reducers)\r\n\r\n const sliceCaseReducersByName: Record = {}\r\n const sliceCaseReducersByType: Record = {}\r\n const actionCreators: Record = {}\r\n\r\n reducerNames.forEach((reducerName) => {\r\n const maybeReducerWithPrepare = reducers[reducerName]\r\n const type = getType(name, reducerName)\r\n\r\n let caseReducer: CaseReducer\r\n let prepareCallback: PrepareAction | undefined\r\n\r\n if ('reducer' in maybeReducerWithPrepare) {\r\n caseReducer = maybeReducerWithPrepare.reducer\r\n prepareCallback = maybeReducerWithPrepare.prepare\r\n } else {\r\n caseReducer = maybeReducerWithPrepare\r\n }\r\n\r\n sliceCaseReducersByName[reducerName] = caseReducer\r\n sliceCaseReducersByType[type] = caseReducer\r\n actionCreators[reducerName] = prepareCallback\r\n ? createAction(type, prepareCallback)\r\n : createAction(type)\r\n })\r\n\r\n function buildReducer() {\r\n const [\r\n extraReducers = {},\r\n actionMatchers = [],\r\n defaultCaseReducer = undefined,\r\n ] =\r\n typeof options.extraReducers === 'function'\r\n ? executeReducerBuilderCallback(options.extraReducers)\r\n : [options.extraReducers]\r\n\r\n const finalCaseReducers = { ...extraReducers, ...sliceCaseReducersByType }\r\n return createReducer(\r\n initialState,\r\n finalCaseReducers as any,\r\n actionMatchers,\r\n defaultCaseReducer\r\n )\r\n }\r\n\r\n let _reducer: ReducerWithInitialState\r\n\r\n return {\r\n name,\r\n reducer(state, action) {\r\n if (!_reducer) _reducer = buildReducer()\r\n\r\n return _reducer(state, action)\r\n },\r\n actions: actionCreators as any,\r\n caseReducers: sliceCaseReducersByName as any,\r\n getInitialState() {\r\n if (!_reducer) _reducer = buildReducer()\r\n\r\n return _reducer.getInitialState()\r\n },\r\n }\r\n}\r\n","import type { Draft } from 'immer'\r\nimport createNextState, { isDraft, isDraftable } from 'immer'\r\nimport type { AnyAction, Action, Reducer } from 'redux'\r\nimport type { ActionReducerMapBuilder } from './mapBuilders'\r\nimport { executeReducerBuilderCallback } from './mapBuilders'\r\nimport type { NoInfer } from './tsHelpers'\r\nimport { freezeDraftable } from './utils'\r\n\r\n/**\r\n * Defines a mapping from action types to corresponding action object shapes.\r\n *\r\n * @deprecated This should not be used manually - it is only used for internal\r\n * inference purposes and should not have any further value.\r\n * It might be removed in the future.\r\n * @public\r\n */\r\nexport type Actions = Record\r\n\r\n/**\r\n * @deprecated use `TypeGuard` instead\r\n */\r\nexport interface ActionMatcher {\r\n (action: AnyAction): action is A\r\n}\r\n\r\nexport type ActionMatcherDescription = {\r\n matcher: ActionMatcher\r\n reducer: CaseReducer>\r\n}\r\n\r\nexport type ReadonlyActionMatcherDescriptionCollection = ReadonlyArray<\r\n ActionMatcherDescription\r\n>\r\n\r\nexport type ActionMatcherDescriptionCollection = Array<\r\n ActionMatcherDescription\r\n>\r\n\r\n/**\r\n * A *case reducer* is a reducer function for a specific action type. Case\r\n * reducers can be composed to full reducers using `createReducer()`.\r\n *\r\n * Unlike a normal Redux reducer, a case reducer is never called with an\r\n * `undefined` state to determine the initial state. Instead, the initial\r\n * state is explicitly specified as an argument to `createReducer()`.\r\n *\r\n * In addition, a case reducer can choose to mutate the passed-in `state`\r\n * value directly instead of returning a new state. This does not actually\r\n * cause the store state to be mutated directly; instead, thanks to\r\n * [immer](https://github.com/mweststrate/immer), the mutations are\r\n * translated to copy operations that result in a new state.\r\n *\r\n * @public\r\n */\r\nexport type CaseReducer = (\r\n state: Draft,\r\n action: A\r\n) => S | void | Draft\r\n\r\n/**\r\n * A mapping from action types to case reducers for `createReducer()`.\r\n *\r\n * @deprecated This should not be used manually - it is only used\r\n * for internal inference purposes and using it manually\r\n * would lead to type erasure.\r\n * It might be removed in the future.\r\n * @public\r\n */\r\nexport type CaseReducers = {\r\n [T in keyof AS]: AS[T] extends Action ? CaseReducer : void\r\n}\r\n\r\nexport type NotFunction = T extends Function ? never : T\r\n\r\nfunction isStateFunction(x: unknown): x is () => S {\r\n return typeof x === 'function'\r\n}\r\n\r\nexport type ReducerWithInitialState> = Reducer & {\r\n getInitialState: () => S\r\n}\r\n\r\n/**\r\n * A utility function that allows defining a reducer as a mapping from action\r\n * type to *case reducer* functions that handle these action types. The\r\n * reducer's initial state is passed as the first argument.\r\n *\r\n * @remarks\r\n * The body of every case reducer is implicitly wrapped with a call to\r\n * `produce()` from the [immer](https://github.com/mweststrate/immer) library.\r\n * This means that rather than returning a new state object, you can also\r\n * mutate the passed-in state object directly; these mutations will then be\r\n * automatically and efficiently translated into copies, giving you both\r\n * convenience and immutability.\r\n *\r\n * @overloadSummary\r\n * This overload accepts a callback function that receives a `builder` object as its argument.\r\n * That builder provides `addCase`, `addMatcher` and `addDefaultCase` functions that may be\r\n * called to define what actions this reducer will handle.\r\n *\r\n * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\r\n * @param builderCallback - `(builder: Builder) => void` A callback that receives a *builder* object to define\r\n * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\r\n * @example\r\n```ts\r\nimport {\r\n createAction,\r\n createReducer,\r\n AnyAction,\r\n PayloadAction,\r\n} from \"@reduxjs/toolkit\";\r\n\r\nconst increment = createAction(\"increment\");\r\nconst decrement = createAction(\"decrement\");\r\n\r\nfunction isActionWithNumberPayload(\r\n action: AnyAction\r\n): action is PayloadAction {\r\n return typeof action.payload === \"number\";\r\n}\r\n\r\nconst reducer = createReducer(\r\n {\r\n counter: 0,\r\n sumOfNumberPayloads: 0,\r\n unhandledActions: 0,\r\n },\r\n (builder) => {\r\n builder\r\n .addCase(increment, (state, action) => {\r\n // action is inferred correctly here\r\n state.counter += action.payload;\r\n })\r\n // You can chain calls, or have separate `builder.addCase()` lines each time\r\n .addCase(decrement, (state, action) => {\r\n state.counter -= action.payload;\r\n })\r\n // You can apply a \"matcher function\" to incoming actions\r\n .addMatcher(isActionWithNumberPayload, (state, action) => {})\r\n // and provide a default case if no other handlers matched\r\n .addDefaultCase((state, action) => {});\r\n }\r\n);\r\n```\r\n * @public\r\n */\r\nexport function createReducer>(\r\n initialState: S | (() => S),\r\n builderCallback: (builder: ActionReducerMapBuilder) => void\r\n): ReducerWithInitialState\r\n\r\n/**\r\n * A utility function that allows defining a reducer as a mapping from action\r\n * type to *case reducer* functions that handle these action types. The\r\n * reducer's initial state is passed as the first argument.\r\n *\r\n * The body of every case reducer is implicitly wrapped with a call to\r\n * `produce()` from the [immer](https://github.com/mweststrate/immer) library.\r\n * This means that rather than returning a new state object, you can also\r\n * mutate the passed-in state object directly; these mutations will then be\r\n * automatically and efficiently translated into copies, giving you both\r\n * convenience and immutability.\r\n * \r\n * @overloadSummary\r\n * This overload accepts an object where the keys are string action types, and the values\r\n * are case reducer functions to handle those action types.\r\n *\r\n * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\r\n * @param actionsMap - An object mapping from action types to _case reducers_, each of which handles one specific action type.\r\n * @param actionMatchers - An array of matcher definitions in the form `{matcher, reducer}`.\r\n * All matching reducers will be executed in order, independently if a case reducer matched or not.\r\n * @param defaultCaseReducer - A \"default case\" reducer that is executed if no case reducer and no matcher\r\n * reducer was executed for this action.\r\n *\r\n * @example\r\n```js\r\nconst counterReducer = createReducer(0, {\r\n increment: (state, action) => state + action.payload,\r\n decrement: (state, action) => state - action.payload\r\n})\r\n\r\n// Alternately, use a \"lazy initializer\" to provide the initial state\r\n// (works with either form of createReducer)\r\nconst initialState = () => 0\r\nconst counterReducer = createReducer(initialState, {\r\n increment: (state, action) => state + action.payload,\r\n decrement: (state, action) => state - action.payload\r\n})\r\n```\r\n \r\n * Action creators that were generated using [`createAction`](./createAction) may be used directly as the keys here, using computed property syntax:\r\n\r\n```js\r\nconst increment = createAction('increment')\r\nconst decrement = createAction('decrement')\r\n\r\nconst counterReducer = createReducer(0, {\r\n [increment]: (state, action) => state + action.payload,\r\n [decrement.type]: (state, action) => state - action.payload\r\n})\r\n```\r\n * @public\r\n */\r\nexport function createReducer<\r\n S extends NotFunction,\r\n CR extends CaseReducers = CaseReducers\r\n>(\r\n initialState: S | (() => S),\r\n actionsMap: CR,\r\n actionMatchers?: ActionMatcherDescriptionCollection,\r\n defaultCaseReducer?: CaseReducer\r\n): ReducerWithInitialState\r\n\r\nexport function createReducer>(\r\n initialState: S | (() => S),\r\n mapOrBuilderCallback:\r\n | CaseReducers\r\n | ((builder: ActionReducerMapBuilder) => void),\r\n actionMatchers: ReadonlyActionMatcherDescriptionCollection = [],\r\n defaultCaseReducer?: CaseReducer\r\n): ReducerWithInitialState {\r\n let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] =\r\n typeof mapOrBuilderCallback === 'function'\r\n ? executeReducerBuilderCallback(mapOrBuilderCallback)\r\n : [mapOrBuilderCallback, actionMatchers, defaultCaseReducer]\r\n\r\n // Ensure the initial state gets frozen either way (if draftable)\r\n let getInitialState: () => S\r\n if (isStateFunction(initialState)) {\r\n getInitialState = () => freezeDraftable(initialState())\r\n } else {\r\n const frozenInitialState = freezeDraftable(initialState)\r\n getInitialState = () => frozenInitialState\r\n }\r\n\r\n function reducer(state = getInitialState(), action: any): S {\r\n let caseReducers = [\r\n actionsMap[action.type],\r\n ...finalActionMatchers\r\n .filter(({ matcher }) => matcher(action))\r\n .map(({ reducer }) => reducer),\r\n ]\r\n if (caseReducers.filter((cr) => !!cr).length === 0) {\r\n caseReducers = [finalDefaultCaseReducer]\r\n }\r\n\r\n return caseReducers.reduce((previousState, caseReducer): S => {\r\n if (caseReducer) {\r\n if (isDraft(previousState)) {\r\n // If it's already a draft, we must already be inside a `createNextState` call,\r\n // likely because this is being wrapped in `createReducer`, `createSlice`, or nested\r\n // inside an existing draft. It's safe to just pass the draft to the mutator.\r\n const draft = previousState as Draft // We can assume this is already a draft\r\n const result = caseReducer(draft, action)\r\n\r\n if (result === undefined) {\r\n return previousState\r\n }\r\n\r\n return result as S\r\n } else if (!isDraftable(previousState)) {\r\n // If state is not draftable (ex: a primitive, such as 0), we want to directly\r\n // return the caseReducer func and not wrap it with produce.\r\n const result = caseReducer(previousState as any, action)\r\n\r\n if (result === undefined) {\r\n if (previousState === null) {\r\n return previousState\r\n }\r\n throw Error(\r\n 'A case reducer on a non-draftable value must not return undefined'\r\n )\r\n }\r\n\r\n return result as S\r\n } else {\r\n // @ts-ignore createNextState() produces an Immutable> rather\r\n // than an Immutable, and TypeScript cannot find out how to reconcile\r\n // these two types.\r\n return createNextState(previousState, (draft: Draft) => {\r\n return caseReducer(draft, action)\r\n })\r\n }\r\n }\r\n\r\n return previousState\r\n }, state)\r\n }\r\n\r\n reducer.getInitialState = getInitialState\r\n\r\n return reducer as ReducerWithInitialState\r\n}\r\n","export default function APIKEY() {\r\n return \"25a5b5c60510a8bae4994bcd56629d8c\";\r\n}\r\n","import React from 'react';\nexport const ReactReduxContext = /*#__PURE__*/React.createContext(null);\n\nif (process.env.NODE_ENV !== 'production') {\n ReactReduxContext.displayName = 'ReactRedux';\n}\n\nexport default ReactReduxContext;","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\n\n/**\r\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @returns {any} the value of the `ReactReduxContext`\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useReduxContext } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const { store } = useReduxContext()\r\n * return

\r\n * }\r\n */\nexport function useReduxContext() {\n const contextValue = useContext(ReactReduxContext);\n\n if (process.env.NODE_ENV !== 'production' && !contextValue) {\n throw new Error('could not find react-redux context value; please ensure the component is wrapped in a ');\n }\n\n return contextValue;\n}","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\n/**\r\n * Hook factory, which creates a `useStore` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useStore` hook bound to the specified context.\r\n */\n\nexport function createStoreHook(context = ReactReduxContext) {\n const useReduxContext = // @ts-ignore\n context === ReactReduxContext ? useDefaultReduxContext : () => useContext(context);\n return function useStore() {\n const {\n store\n } = useReduxContext(); // @ts-ignore\n\n return store;\n };\n}\n/**\r\n * A hook to access the redux store.\r\n *\r\n * @returns {any} the redux store\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useStore } from 'react-redux'\r\n *\r\n * export const ExampleComponent = () => {\r\n * const store = useStore()\r\n * return
{store.getState()}
\r\n * }\r\n */\n\nexport const useStore = /*#__PURE__*/createStoreHook();","import { ReactReduxContext } from '../components/Context';\nimport { useStore as useDefaultStore, createStoreHook } from './useStore';\n/**\r\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useDispatch` hook bound to the specified context.\r\n */\n\nexport function createDispatchHook(context = ReactReduxContext) {\n const useStore = // @ts-ignore\n context === ReactReduxContext ? useDefaultStore : createStoreHook(context);\n return function useDispatch() {\n const store = useStore(); // @ts-ignore\n\n return store.dispatch;\n };\n}\n/**\r\n * A hook to access the redux `dispatch` function.\r\n *\r\n * @returns {any|function} redux store's `dispatch` function\r\n *\r\n * @example\r\n *\r\n * import React, { useCallback } from 'react'\r\n * import { useDispatch } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n * const dispatch = useDispatch()\r\n * const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\r\n * return (\r\n *
\r\n * {value}\r\n * \r\n *
\r\n * )\r\n * }\r\n */\n\nexport const useDispatch = /*#__PURE__*/createDispatchHook();","import React, { useState } from \"react\";\r\nimport { toast } from \"react-toastify\";\r\nimport { getAPIData } from \"../../redux/dataSlice/dataSlice\";\r\nimport { useDispatch } from \"react-redux/es/hooks/useDispatch\";\r\nimport \"./city-input-style.css\";\r\n\r\nexport default function CityInput() {\r\n let [cityname, setCityName] = useState(\"\");\r\n const dispatch = useDispatch();\r\n\r\n const errorFnc = () =>\r\n toast.error(`City name can't be empty.`, {\r\n position: \"bottom-left\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: false,\r\n pauseOnHover: false,\r\n draggable: false,\r\n progress: undefined,\r\n toastId: \"error\",\r\n theme: \"dark\"\r\n });\r\n\r\n const handleEnterKey = (e) => {\r\n if (e.keyCode === 13) {\r\n if (cityname === \"\") {\r\n errorFnc();\r\n } else {\r\n dispatch(getAPIData(cityname));\r\n setCityName(\"\");\r\n }\r\n }\r\n };\r\n return (\r\n <>\r\n {\r\n setCityName(e.target.value);\r\n }}\r\n required\r\n />\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport CityInput from \"../city-input/city-input\";\r\nimport \"./header-style.css\";\r\n\r\nexport default function Header() {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n","export const notInitialized = () => {\n throw new Error('uSES not initialized!');\n};","import { useContext, useDebugValue } from 'react';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { ReactReduxContext } from '../components/Context';\nimport { notInitialized } from '../utils/useSyncExternalStore';\nlet useSyncExternalStoreWithSelector = notInitialized;\nexport const initializeUseSelector = fn => {\n useSyncExternalStoreWithSelector = fn;\n};\n\nconst refEquality = (a, b) => a === b;\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context = ReactReduxContext) {\n const useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : () => useContext(context);\n return function useSelector(selector, equalityFn = refEquality) {\n if (process.env.NODE_ENV !== 'production') {\n if (!selector) {\n throw new Error(`You must pass a selector to useSelector`);\n }\n\n if (typeof selector !== 'function') {\n throw new Error(`You must pass a function as a selector to useSelector`);\n }\n\n if (typeof equalityFn !== 'function') {\n throw new Error(`You must pass a function as an equality function to useSelector`);\n }\n }\n\n const {\n store,\n subscription,\n getServerState\n } = useReduxContext();\n const selectedState = useSyncExternalStoreWithSelector(subscription.addNestedSub, store.getState, getServerState || store.getState, selector, equalityFn);\n useDebugValue(selectedState);\n return selectedState;\n };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const counter = useSelector(state => state.counter)\r\n * return
{counter}
\r\n * }\r\n */\n\nexport const useSelector = /*#__PURE__*/createSelectorHook();","export default function getPicture(icon) {\r\n return `https://openweathermap.org/img/wn/${icon}@2x.png`;\r\n}\r\n","import React from \"react\";\r\nimport getPicture from \"../utils/getPicture\";\r\n\r\nexport default function LeftPanel({ data }) {\r\n return (\r\n <>\r\n
{data.name}
\r\n
\r\n \"icon\"\r\n
{data.desc}
\r\n
\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nexport default function Text({ frontText, dataText, unit }) {\r\n return (\r\n
\r\n {frontText}{\" \"}\r\n \r\n {dataText} {unit}\r\n \r\n
\r\n );\r\n}\r\n","export default function getDirection(deg) {\r\n var dir = \"\";\r\n if ((deg > 348.75 && deg <= 360.0) || (deg >= 0 && deg < 11.25)) {\r\n dir = \"N\";\r\n } else if (deg > 11.25 && deg <= 33.75) {\r\n dir = \"NNE\";\r\n } else if (deg > 33.75 && deg <= 56.25) {\r\n dir = \"NE\";\r\n } else if (deg > 56.25 && deg <= 78.75) {\r\n dir = \"ENE\";\r\n } else if (deg > 78.75 && deg <= 101.25) {\r\n dir = \"E\";\r\n } else if (deg > 101.25 && deg <= 123.75) {\r\n dir = \"ESE\";\r\n } else if (deg > 123.75 && deg <= 146.25) {\r\n dir = \"SE\";\r\n } else if (deg > 146.25 && deg <= 168.75) {\r\n dir = \"SSE\";\r\n } else if (deg > 168.75 && deg <= 191.25) {\r\n dir = \"S\";\r\n } else if (deg > 191.25 && deg <= 213.75) {\r\n dir = \"SSW\";\r\n } else if (deg > 213.75 && deg <= 236.35) {\r\n dir = \"SW\";\r\n } else if (deg > 236.25 && deg <= 258.75) {\r\n dir = \"WSW\";\r\n } else if (deg > 258.75 && deg <= 281.25) {\r\n dir = \"W\";\r\n } else if (deg > 281.25 && deg <= 303.75) {\r\n dir = \"WNW\";\r\n } else if (deg > 303.75 && deg <= 326.25) {\r\n dir = \"NW\";\r\n } else if (deg > 326.25 && deg <= 348.75) {\r\n dir = \"NNW\";\r\n }\r\n\r\n return dir;\r\n}\r\n","import React from \"react\";\r\nimport Text from \"../text/text\";\r\nimport getDirection from \"../utils/getDirectionOfWind\";\r\n\r\nexport default function RightPanel({ data }) {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useSelector } from \"react-redux/es/hooks/useSelector\";\r\nimport LeftPanel from \"./left-panel\";\r\nimport RightPanel from \"./right-panel\";\r\nimport \"./weather-card-style.css\";\r\n\r\nexport default function WeatherCard() {\r\n var data = useSelector((state) => state.data.data);\r\n var latlon = useSelector((state) => state.data.cityLatLon);\r\n var rightPanelData = {\r\n temp: data.main.temp,\r\n feels: data.main.feels_like,\r\n humidity: data.main.humidity,\r\n max: data.main.temp_max,\r\n min: data.main.temp_min,\r\n pressure: data.main.pressure,\r\n speed: data.wind.speed,\r\n deg: data.wind.deg,\r\n all: data.clouds.all\r\n };\r\n var leftPanelData = {\r\n name: latlon.name,\r\n icon: data.weather[0].icon,\r\n desc: data.weather[0].main\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n","// Functions to return AQI color and Text for no2, pm10, o3, pm2.5 data that is returned from API\r\n// More about scale can be found at https://en.wikipedia.org/wiki/Air_quality_index#CAQI\r\nexport function no2(number) {\r\n if (number === 0) {\r\n return { color: \"\", text: \"---\" };\r\n } else if (number > 0 && number < 50) {\r\n return { color: \"#79bc6a\", text: \"Very low\" };\r\n } else if (number >= 50 && number < 100) {\r\n return { color: \"#bbcf4c\", text: \"Low\" };\r\n } else if (number >= 100 && number < 200) {\r\n return { color: \"#eec20b\", text: \"Medium\" };\r\n } else if (number >= 200 && number < 400) {\r\n return { color: \"#f29305\", text: \"High\" };\r\n } else if (number >= 400) {\r\n return { color: \"#e8416f\", text: \"Very high\" };\r\n }\r\n}\r\n\r\nexport function pm10(number) {\r\n if (number === 0) {\r\n return { color: \"\", text: \"---\" };\r\n } else if (number >= 0 && number < 25) {\r\n return { color: \"#79bc6a\", text: \"Very low\" };\r\n } else if (number >= 25 && number < 50) {\r\n return { color: \"#bbcf4c\", text: \"Low\" };\r\n } else if (number >= 50 && number < 90) {\r\n return { color: \"#eec20b\", text: \"Medium\" };\r\n } else if (number >= 90 && number < 180) {\r\n return { color: \"#f29305\", text: \"High\" };\r\n } else if (number >= 180) {\r\n return { color: \"#e8416f\", text: \"Very high\" };\r\n }\r\n}\r\n\r\nexport function o3(number) {\r\n if (number === 0) {\r\n return { color: \"\", text: \"---\" };\r\n } else if (number >= 0 && number < 60) {\r\n return { color: \"#79bc6a\", text: \"Very low\" };\r\n } else if (number >= 60 && number < 120) {\r\n return { color: \"#bbcf4c\", text: \"Low\" };\r\n } else if (number >= 120 && number < 180) {\r\n return { color: \"#eec20b\", text: \"Medium\" };\r\n } else if (number >= 180 && number < 240) {\r\n return { color: \"#f29305\", text: \"High\" };\r\n } else if (number >= 240) {\r\n return { color: \"#e8416f\", text: \"Very high\" };\r\n }\r\n}\r\n\r\nexport function pm25(number) {\r\n if (number === 0) {\r\n return { color: \"\", text: \"---\" };\r\n } else if (number >= 0 && number < 15) {\r\n return { color: \"#79bc6a\", text: \"Very low\" };\r\n } else if (number >= 15 && number < 30) {\r\n return { color: \"#bbcf4c\", text: \"Low\" };\r\n } else if (number >= 30 && number < 55) {\r\n return { color: \"#eec20b\", text: \"Medium\" };\r\n } else if (number >= 55 && number < 110) {\r\n return { color: \"#f29305\", text: \"High\" };\r\n } else if (number >= 110) {\r\n return { color: \"#e8416f\", text: \"Very high\" };\r\n }\r\n}\r\n","import React from \"react\";\r\n\r\nexport default function TableData({ color, text }) {\r\n return (\r\n \r\n {text}\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport \"./air-pollution-style.css\";\r\nimport { useSelector } from \"react-redux/es/hooks/useSelector\";\r\nimport { no2, pm10, o3, pm25 } from \"../utils/getColor\";\r\nimport TableData from \"../utils/tableData\";\r\n\r\nexport default function AirPollution() {\r\n let airData = useSelector((state) => state.data.airPollution);\r\n\r\n return (\r\n <>\r\n
\r\n
Air Pollution
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n NO2\r\n
μg/m3\r\n
\r\n PM10
μg/m3\r\n
\r\n O3
μg/m3\r\n
\r\n PM2.5
μg/m3\r\n
\r\n \r\n Read more about Air quality index\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n","export function getTime(unix) {\r\n return new Date(unix * 1000).toLocaleTimeString([], {hour: '2-digit', minute:'2-digit', hour12: false});;\r\n}\r\nexport function getDateTime(unix) {\r\n return new Date(unix * 1000).toLocaleDateString(\"de-DE\");\r\n}\r\n","import React from \"react\";\r\nimport \"./sun-info-style.css\";\r\nimport { useSelector } from \"react-redux/es/hooks/useSelector\";\r\nimport sunrise from \"../../icons/sunrise.png\";\r\nimport sunset from \"../../icons/sunset.png\";\r\nimport Text from \"../text/text\";\r\nimport { getTime } from \"../utils/getDateTime\";\r\n\r\nexport default function SunInfo() {\r\n let suninfo = useSelector((state) => state.data.data.sys);\r\n\r\n return (\r\n
\r\n
\r\n \"sunrise\r\n \r\n
\r\n
\r\n \"sunset\r\n \r\n
\r\n
\r\n );\r\n}\r\n","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n callback();\n}\n\nlet batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport const setBatch = newBatch => batch = newBatch; // Supply a getter just to skip dealing with ESM bindings\n\nexport const getBatch = () => batch;","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n const batch = getBatch();\n let first = null;\n let last = null;\n return {\n clear() {\n first = null;\n last = null;\n },\n\n notify() {\n batch(() => {\n let listener = first;\n\n while (listener) {\n listener.callback();\n listener = listener.next;\n }\n });\n },\n\n get() {\n let listeners = [];\n let listener = first;\n\n while (listener) {\n listeners.push(listener);\n listener = listener.next;\n }\n\n return listeners;\n },\n\n subscribe(callback) {\n let isSubscribed = true;\n let listener = last = {\n callback,\n next: null,\n prev: last\n };\n\n if (listener.prev) {\n listener.prev.next = listener;\n } else {\n first = listener;\n }\n\n return function unsubscribe() {\n if (!isSubscribed || first === null) return;\n isSubscribed = false;\n\n if (listener.next) {\n listener.next.prev = listener.prev;\n } else {\n last = listener.prev;\n }\n\n if (listener.prev) {\n listener.prev.next = listener.next;\n } else {\n first = listener.next;\n }\n };\n }\n\n };\n}\n\nconst nullListeners = {\n notify() {},\n\n get: () => []\n};\nexport function createSubscription(store, parentSub) {\n let unsubscribe;\n let listeners = nullListeners;\n\n function addNestedSub(listener) {\n trySubscribe();\n return listeners.subscribe(listener);\n }\n\n function notifyNestedSubs() {\n listeners.notify();\n }\n\n function handleChangeWrapper() {\n if (subscription.onStateChange) {\n subscription.onStateChange();\n }\n }\n\n function isSubscribed() {\n return Boolean(unsubscribe);\n }\n\n function trySubscribe() {\n if (!unsubscribe) {\n unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n listeners = createListenerCollection();\n }\n }\n\n function tryUnsubscribe() {\n if (unsubscribe) {\n unsubscribe();\n unsubscribe = undefined;\n listeners.clear();\n listeners = nullListeners;\n }\n }\n\n const subscription = {\n addNestedSub,\n notifyNestedSubs,\n handleChangeWrapper,\n isSubscribed,\n trySubscribe,\n tryUnsubscribe,\n getListeners: () => listeners\n };\n return subscription;\n}","import { useEffect, useLayoutEffect } from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n// Matches logic in React's `shared/ExecutionEnvironment` file\n\nexport const canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\nexport const useIsomorphicLayoutEffect = canUseDOM ? useLayoutEffect : useEffect;","import React, { useMemo } from 'react';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider({\n store,\n context,\n children,\n serverState\n}) {\n const contextValue = useMemo(() => {\n const subscription = createSubscription(store);\n return {\n store,\n subscription,\n getServerState: serverState ? () => serverState : undefined\n };\n }, [store, serverState]);\n const previousState = useMemo(() => store.getState(), [store]);\n useIsomorphicLayoutEffect(() => {\n const {\n subscription\n } = contextValue;\n subscription.onStateChange = subscription.notifyNestedSubs;\n subscription.trySubscribe();\n\n if (previousState !== store.getState()) {\n subscription.notifyNestedSubs();\n }\n\n return () => {\n subscription.tryUnsubscribe();\n subscription.onStateChange = undefined;\n };\n }, [contextValue, previousState]);\n const Context = context || ReactReduxContext; // @ts-ignore 'AnyAction' is assignable to the constraint of type 'A', but 'A' could be instantiated with a different subtype\n\n return /*#__PURE__*/React.createElement(Context.Provider, {\n value: contextValue\n }, children);\n}\n\nexport default Provider;","// The primary entry point assumes we're working with standard ReactDOM/RN, but\n// older versions that do not include `useSyncExternalStore` (React 16.9 - 17.x).\n// Because of that, the useSyncExternalStore compat shim is needed.\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch';\nimport { initializeUseSelector } from './hooks/useSelector';\nimport { initializeConnect } from './components/connect';\ninitializeUseSelector(useSyncExternalStoreWithSelector);\ninitializeConnect(useSyncExternalStore); // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };\nexport * from './exports';","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"reactReduxForwardedRef\"];\n\n/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */\nimport hoistStatics from 'hoist-non-react-statics';\nimport React, { useContext, useMemo, useRef } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport defaultSelectorFactory from '../connect/selectorFactory';\nimport { mapDispatchToPropsFactory } from '../connect/mapDispatchToProps';\nimport { mapStateToPropsFactory } from '../connect/mapStateToProps';\nimport { mergePropsFactory } from '../connect/mergeProps';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport shallowEqual from '../utils/shallowEqual';\nimport warning from '../utils/warning';\nimport { ReactReduxContext } from './Context';\nimport { notInitialized } from '../utils/useSyncExternalStore';\nlet useSyncExternalStore = notInitialized;\nexport const initializeConnect = fn => {\n useSyncExternalStore = fn;\n}; // Define some constant arrays just to avoid re-creating these\n\nconst EMPTY_ARRAY = [null, 0];\nconst NO_SUBSCRIPTION_ARRAY = [null, null]; // Attempts to stringify whatever not-really-a-component value we were given\n// for logging in an error message\n\nconst stringifyComponent = Comp => {\n try {\n return JSON.stringify(Comp);\n } catch (err) {\n return String(Comp);\n }\n};\n\n// This is \"just\" a `useLayoutEffect`, but with two modifications:\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\n// - we extract this to a separate function to avoid closing over values\n// and causing memory leaks\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);\n} // Effect callback, extracted: assign the latest props values to refs for later usage\n\n\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, // actualChildProps: unknown,\nchildPropsFromStoreUpdate, notifyNestedSubs) {\n // We want to capture the wrapper props and child props we used for later comparisons\n lastWrapperProps.current = wrapperProps;\n renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n if (childPropsFromStoreUpdate.current) {\n childPropsFromStoreUpdate.current = null;\n notifyNestedSubs();\n }\n} // Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,\n// check for updates after dispatched actions, and trigger re-renders.\n\n\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, // forceComponentUpdateDispatch: React.Dispatch,\nadditionalSubscribeListener) {\n // If we're not subscribed to the store, nothing to do here\n if (!shouldHandleStateChanges) return () => {}; // Capture values for checking if and when this component unmounts\n\n let didUnsubscribe = false;\n let lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n const checkForUpdates = () => {\n if (didUnsubscribe || !isMounted.current) {\n // Don't run stale listeners.\n // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n return;\n } // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it\n\n\n const latestStoreState = store.getState();\n let newChildProps, error;\n\n try {\n // Actually run the selector with the most recent store state and wrapper props\n // to determine what the child props should be\n newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n } catch (e) {\n error = e;\n lastThrownError = e;\n }\n\n if (!error) {\n lastThrownError = null;\n } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n if (newChildProps === lastChildProps.current) {\n if (!renderIsScheduled.current) {\n notifyNestedSubs();\n }\n } else {\n // Save references to the new child props. Note that we track the \"child props from store update\"\n // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n // been processed. If this went into useState/useReducer, we couldn't clear out the value without\n // forcing another re-render, which we don't want.\n lastChildProps.current = newChildProps;\n childPropsFromStoreUpdate.current = newChildProps;\n renderIsScheduled.current = true; // TODO This is hacky and not how `uSES` is meant to be used\n // Trigger the React `useSyncExternalStore` subscriber\n\n additionalSubscribeListener();\n }\n }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n // changed since we began.\n\n checkForUpdates();\n\n const unsubscribeWrapper = () => {\n didUnsubscribe = true;\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n\n if (lastThrownError) {\n // It's possible that we caught an error due to a bad mapState function, but the\n // parent re-rendered without this component and we're about to unmount.\n // This shouldn't happen as long as we do top-down subscriptions correctly, but\n // if we ever do those wrong, this throw will surface the error in our tests.\n // In that case, throw the error from here so it doesn't get lost.\n throw lastThrownError;\n }\n };\n\n return unsubscribeWrapper;\n} // Reducer initial state creation for our update reducer\n\n\nconst initStateUpdates = () => EMPTY_ARRAY;\n\nfunction strictEqual(a, b) {\n return a === b;\n}\n/**\r\n * Infers the type of props that a connector will inject into a component.\r\n */\n\n\nlet hasWarnedAboutDeprecatedPureOption = false;\n/**\r\n * Connects a React component to a Redux store.\r\n *\r\n * - Without arguments, just wraps the component, without changing the behavior / props\r\n *\r\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\r\n * is to override ownProps (as stated in the docs), so what remains is everything that's\r\n * not a state or dispatch prop\r\n *\r\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\r\n * should be valid component props, because it depends on mergeProps implementation.\r\n * As such, it is the user's responsibility to extend ownProps interface from state or\r\n * dispatch props or both when applicable\r\n *\r\n * @param mapStateToProps A function that extracts values from state\r\n * @param mapDispatchToProps Setup for dispatching actions\r\n * @param mergeProps Optional callback to merge state and dispatch props together\r\n * @param options Options for configuring the connection\r\n *\r\n */\n\nfunction connect(mapStateToProps, mapDispatchToProps, mergeProps, {\n // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n // @ts-ignore\n pure,\n areStatesEqual = strictEqual,\n areOwnPropsEqual = shallowEqual,\n areStatePropsEqual = shallowEqual,\n areMergedPropsEqual = shallowEqual,\n // use React's forwardRef to expose a ref of the wrapped component\n forwardRef = false,\n // the context consumer to use\n context = ReactReduxContext\n} = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) {\n hasWarnedAboutDeprecatedPureOption = true;\n warning('The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component');\n }\n }\n\n const Context = context;\n const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);\n const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);\n const initMergeProps = mergePropsFactory(mergeProps);\n const shouldHandleStateChanges = Boolean(mapStateToProps);\n\n const wrapWithConnect = WrappedComponent => {\n if (process.env.NODE_ENV !== 'production' && !isValidElementType(WrappedComponent)) {\n throw new Error(`You must pass a component to the function returned by connect. Instead received ${stringifyComponent(WrappedComponent)}`);\n }\n\n const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n const displayName = `Connect(${wrappedComponentName})`;\n const selectorFactoryOptions = {\n shouldHandleStateChanges,\n displayName,\n wrappedComponentName,\n WrappedComponent,\n // @ts-ignore\n initMapStateToProps,\n // @ts-ignore\n initMapDispatchToProps,\n initMergeProps,\n areStatesEqual,\n areStatePropsEqual,\n areOwnPropsEqual,\n areMergedPropsEqual\n };\n\n function ConnectFunction(props) {\n const [propsContext, reactReduxForwardedRef, wrapperProps] = useMemo(() => {\n // Distinguish between actual \"data\" props that were passed to the wrapper component,\n // and values needed to control behavior (forwarded refs, alternate context instances).\n // To maintain the wrapperProps object reference, memoize this destructuring.\n const {\n reactReduxForwardedRef\n } = props,\n wrapperProps = _objectWithoutPropertiesLoose(props, _excluded);\n\n return [props.context, reactReduxForwardedRef, wrapperProps];\n }, [props]);\n const ContextToUse = useMemo(() => {\n // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n // Memoize the check that determines which context instance we should use.\n return propsContext && propsContext.Consumer && // @ts-ignore\n isContextConsumer( /*#__PURE__*/React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n const contextValue = useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n // We'll check to see if it _looks_ like a Redux store first.\n // This allows us to pass through a `store` prop that is just a plain value.\n\n const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n\n if (process.env.NODE_ENV !== 'production' && !didStoreComeFromProps && !didStoreComeFromContext) {\n throw new Error(`Could not find \"store\" in the context of ` + `\"${displayName}\". Either wrap the root component in a , ` + `or pass a custom React context provider to and the corresponding ` + `React context consumer to ${displayName} in connect options.`);\n } // Based on the previous check, one of these must be true\n\n\n const store = didStoreComeFromProps ? props.store : contextValue.store;\n const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;\n const childPropsSelector = useMemo(() => {\n // The child props selector needs the store reference as an input.\n // Re-create this selector whenever the store changes.\n return defaultSelectorFactory(store.dispatch, selectorFactoryOptions);\n }, [store]);\n const [subscription, notifyNestedSubs] = useMemo(() => {\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n const subscription = createSubscription(store, didStoreComeFromProps ? undefined : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n\n const notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n return [subscription, notifyNestedSubs];\n }, [store, didStoreComeFromProps, contextValue]); // Determine what {store, subscription} value should be put into nested context, if necessary,\n // and memoize that value to avoid unnecessary context updates.\n\n const overriddenContextValue = useMemo(() => {\n if (didStoreComeFromProps) {\n // This component is directly subscribed to a store from props.\n // We don't want descendants reading from this store - pass down whatever\n // the existing context value is from the nearest connected ancestor.\n return contextValue;\n } // Otherwise, put this component's subscription instance into context, so that\n // connected descendants won't update until after this component is done\n\n\n return _extends({}, contextValue, {\n subscription\n });\n }, [didStoreComeFromProps, contextValue, subscription]); // Set up refs to coordinate values between the subscription effect and the render logic\n\n const lastChildProps = useRef();\n const lastWrapperProps = useRef(wrapperProps);\n const childPropsFromStoreUpdate = useRef();\n const renderIsScheduled = useRef(false);\n const isProcessingDispatch = useRef(false);\n const isMounted = useRef(false);\n const latestSubscriptionCallbackError = useRef();\n useIsomorphicLayoutEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n const actualChildPropsSelector = useMemo(() => {\n const selector = () => {\n // Tricky logic here:\n // - This render may have been triggered by a Redux store update that produced new child props\n // - However, we may have gotten new wrapper props after that\n // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n return childPropsFromStoreUpdate.current;\n } // TODO We're reading the store directly in render() here. Bad idea?\n // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n // to determine what the child props should be.\n\n\n return childPropsSelector(store.getState(), wrapperProps);\n };\n\n return selector;\n }, [store, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n // just useEffect instead to avoid the warning, since neither will run anyway.\n\n const subscribeForReact = useMemo(() => {\n const subscribe = reactListener => {\n if (!subscription) {\n return () => {};\n }\n\n return subscribeUpdates(shouldHandleStateChanges, store, subscription, // @ts-ignore\n childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, reactListener);\n };\n\n return subscribe;\n }, [subscription]);\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs]);\n let actualChildProps;\n\n try {\n actualChildProps = useSyncExternalStore( // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n subscribeForReact, // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n actualChildPropsSelector, getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector);\n } catch (err) {\n if (latestSubscriptionCallbackError.current) {\n ;\n err.message += `\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`;\n }\n\n throw err;\n }\n\n useIsomorphicLayoutEffect(() => {\n latestSubscriptionCallbackError.current = undefined;\n childPropsFromStoreUpdate.current = undefined;\n lastChildProps.current = actualChildProps;\n }); // Now that all that's done, we can finally try to actually render the child component.\n // We memoize the elements for the rendered child component as an optimization.\n\n const renderedWrappedComponent = useMemo(() => {\n return (\n /*#__PURE__*/\n // @ts-ignore\n React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n ref: reactReduxForwardedRef\n }))\n );\n }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n const renderedChild = useMemo(() => {\n if (shouldHandleStateChanges) {\n // If this component is subscribed to store updates, we need to pass its own\n // subscription instance down to our descendants. That means rendering the same\n // Context instance, and putting a different value into the context.\n return /*#__PURE__*/React.createElement(ContextToUse.Provider, {\n value: overriddenContextValue\n }, renderedWrappedComponent);\n }\n\n return renderedWrappedComponent;\n }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n return renderedChild;\n }\n\n const _Connect = React.memo(ConnectFunction);\n\n // Add a hacky cast to get the right output type\n const Connect = _Connect;\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = ConnectFunction.displayName = displayName;\n\n if (forwardRef) {\n const _forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n // @ts-ignore\n return /*#__PURE__*/React.createElement(Connect, _extends({}, props, {\n reactReduxForwardedRef: ref\n }));\n });\n\n const forwarded = _forwarded;\n forwarded.displayName = displayName;\n forwarded.WrappedComponent = WrappedComponent;\n return hoistStatics(forwarded, WrappedComponent);\n }\n\n return hoistStatics(Connect, WrappedComponent);\n };\n\n return wrapWithConnect;\n}\n\nexport default connect;","import React from \"react\";\r\nimport \"./forecast-card-style.css\";\r\nimport getPicture from \"../utils/getPicture\";\r\nimport { getDateTime, getTime } from \"../utils/getDateTime\";\r\nimport temperatureIcon from \"../../icons/temperature.png\";\r\nimport pressureIcon from \"../../icons/pressure.png\";\r\nimport humidityIcon from \"../../icons/humidity.png\";\r\n\r\nexport default function ForecastCard({ data }) {\r\n return (\r\n
\r\n
\r\n {getTime(data.dt)}\r\n
\r\n
\r\n \r\n
{data.weather[0].main}
\r\n\r\n
\r\n {\" \"}\r\n {data.main.temp}°C\r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport \"./forecast-list-style.css\";\r\nimport ForecastCard from \"../forecast-card/forecast-card\";\r\nimport { getForecastDays } from \"../utils/getForecastDays\";\r\nimport { getDateTime } from \"../utils/getDateTime\";\r\n\r\nexport default function ForecastList() {\r\n let forecastData = useSelector((state) => state.data.forecast);\r\n const handleScroll = (event) => {\r\n const container = event.target;\r\n const scrollAmount = event.deltaY;\r\n container.scrollTo({\r\n top: 0,\r\n left: container.scrollLeft + scrollAmount,\r\n behavior: 'smooth'\r\n });\r\n };\r\n\r\n if (forecastData.length > 0) {\r\n var eachDay = getForecastDays(forecastData);\r\n\r\n return (\r\n <>\r\n
\r\n {eachDay.map((x, index2) => {\r\n if (x.length < 3) {\r\n } else {\r\n return (\r\n
\r\n
\r\n {getDateTime(x[0].dt)}\r\n
\r\n
\r\n {x.map((item, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n );\r\n }\r\n })}\r\n
\r\n \r\n );\r\n }\r\n}\r\n","import { getDateTime } from \"./getDateTime\";\r\n\r\nexport function getForecastDays(data) {\r\n var eachDay = [];\r\n let tempArray = [data[0]];\r\n\r\n data.forEach((element, index) => {\r\n var date = getDateTime(element.dt);\r\n var day = date.split(\".\")[0];\r\n\r\n if (index != 0) {\r\n if (getDateTime(tempArray[0].dt).split(\".\")[0] === day) {\r\n tempArray.push(element);\r\n } else {\r\n eachDay.push(tempArray);\r\n tempArray = [element];\r\n }\r\n }\r\n });\r\n return eachDay;\r\n}\r\n","import \"react-toastify/dist/ReactToastify.css\";\r\nimport \"./App.css\";\r\nimport Footer from \"./components/footer/Footer\";\r\nimport Header from \"./components/header/Header.js\";\r\nimport WeatherCard from \"./components/weather-card/weather-card\";\r\nimport { ToastContainer } from \"react-toastify\";\r\nimport AirPollution from \"./components/air-pollution/air-pollution\";\r\nimport SunInfo from \"./components/sun-info/sun-info\";\r\nimport ForecastList from \"./components/forecast-list/forecast-list\";\r\n\r\nfunction App() {\r\n return (\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default App;\r\n","import { configureStore } from \"@reduxjs/toolkit\";\r\nimport dataSliceReducer from \"./dataSlice/dataSlice\";\r\n\r\nexport const store = configureStore({\r\n reducer: {\r\n data: dataSliceReducer\r\n }\r\n});\r\n","import type {\r\n Reducer,\r\n ReducersMapObject,\r\n Middleware,\r\n Action,\r\n AnyAction,\r\n StoreEnhancer,\r\n Store,\r\n Dispatch,\r\n PreloadedState,\r\n CombinedState,\r\n} from 'redux'\r\nimport { createStore, compose, applyMiddleware, combineReducers } from 'redux'\r\nimport type { DevToolsEnhancerOptions as DevToolsOptions } from './devtoolsExtension'\r\nimport { composeWithDevTools } from './devtoolsExtension'\r\n\r\nimport isPlainObject from './isPlainObject'\r\nimport type {\r\n ThunkMiddlewareFor,\r\n CurriedGetDefaultMiddleware,\r\n} from './getDefaultMiddleware'\r\nimport { curryGetDefaultMiddleware } from './getDefaultMiddleware'\r\nimport type { NoInfer, ExtractDispatchExtensions } from './tsHelpers'\r\n\r\nconst IS_PRODUCTION = process.env.NODE_ENV === 'production'\r\n\r\n/**\r\n * Callback function type, to be used in `ConfigureStoreOptions.enhancers`\r\n *\r\n * @public\r\n */\r\nexport type ConfigureEnhancersCallback = (\r\n defaultEnhancers: readonly StoreEnhancer[]\r\n) => StoreEnhancer[]\r\n\r\n/**\r\n * Options for `configureStore()`.\r\n *\r\n * @public\r\n */\r\nexport interface ConfigureStoreOptions<\r\n S = any,\r\n A extends Action = AnyAction,\r\n M extends Middlewares = Middlewares\r\n> {\r\n /**\r\n * A single reducer function that will be used as the root reducer, or an\r\n * object of slice reducers that will be passed to `combineReducers()`.\r\n */\r\n reducer: Reducer | ReducersMapObject\r\n\r\n /**\r\n * An array of Redux middleware to install. If not supplied, defaults to\r\n * the set of middleware returned by `getDefaultMiddleware()`.\r\n *\r\n * @example `middleware: (gDM) => gDM().concat(logger, apiMiddleware, yourCustomMiddleware)`\r\n * @see https://redux-toolkit.js.org/api/getDefaultMiddleware#intended-usage\r\n */\r\n middleware?: ((getDefaultMiddleware: CurriedGetDefaultMiddleware) => M) | M\r\n\r\n /**\r\n * Whether to enable Redux DevTools integration. Defaults to `true`.\r\n *\r\n * Additional configuration can be done by passing Redux DevTools options\r\n */\r\n devTools?: boolean | DevToolsOptions\r\n\r\n /**\r\n * The initial state, same as Redux's createStore.\r\n * You may optionally specify it to hydrate the state\r\n * from the server in universal apps, or to restore a previously serialized\r\n * user session. If you use `combineReducers()` to produce the root reducer\r\n * function (either directly or indirectly by passing an object as `reducer`),\r\n * this must be an object with the same shape as the reducer map keys.\r\n */\r\n /* \r\n Not 100% correct but the best approximation we can get:\r\n - if S is a `CombinedState` applying a second `CombinedState` on it does not change anything.\r\n - if it is not, there could be two cases:\r\n - `ReducersMapObject` is being passed in. In this case, we will call `combineReducers` on it and `CombinedState` is correct\r\n - `Reducer` is being passed in. In this case, actually `CombinedState` is wrong and `S` would be correct.\r\n As we cannot distinguish between those two cases without adding another generic paramter, \r\n we just make the pragmatic assumption that the latter almost never happens.\r\n */\r\n preloadedState?: PreloadedState>>\r\n\r\n /**\r\n * The store enhancers to apply. See Redux's `createStore()`.\r\n * All enhancers will be included before the DevTools Extension enhancer.\r\n * If you need to customize the order of enhancers, supply a callback\r\n * function that will receive the original array (ie, `[applyMiddleware]`),\r\n * and should return a new array (such as `[applyMiddleware, offline]`).\r\n * If you only need to add middleware, you can use the `middleware` parameter instead.\r\n */\r\n enhancers?: StoreEnhancer[] | ConfigureEnhancersCallback\r\n}\r\n\r\ntype Middlewares = ReadonlyArray>\r\n\r\n/**\r\n * A Redux store returned by `configureStore()`. Supports dispatching\r\n * side-effectful _thunks_ in addition to plain actions.\r\n *\r\n * @public\r\n */\r\nexport interface EnhancedStore<\r\n S = any,\r\n A extends Action = AnyAction,\r\n M extends Middlewares = Middlewares\r\n> extends Store {\r\n /**\r\n * The `dispatch` method of your store, enhanced by all its middlewares.\r\n *\r\n * @inheritdoc\r\n */\r\n dispatch: ExtractDispatchExtensions & Dispatch
\r\n}\r\n\r\n/**\r\n * A friendly abstraction over the standard Redux `createStore()` function.\r\n *\r\n * @param config The store configuration.\r\n * @returns A configured Redux store.\r\n *\r\n * @public\r\n */\r\nexport function configureStore<\r\n S = any,\r\n A extends Action = AnyAction,\r\n M extends Middlewares = [ThunkMiddlewareFor]\r\n>(options: ConfigureStoreOptions): EnhancedStore {\r\n const curriedGetDefaultMiddleware = curryGetDefaultMiddleware()\r\n\r\n const {\r\n reducer = undefined,\r\n middleware = curriedGetDefaultMiddleware(),\r\n devTools = true,\r\n preloadedState = undefined,\r\n enhancers = undefined,\r\n } = options || {}\r\n\r\n let rootReducer: Reducer\r\n\r\n if (typeof reducer === 'function') {\r\n rootReducer = reducer\r\n } else if (isPlainObject(reducer)) {\r\n rootReducer = combineReducers(reducer) as unknown as Reducer\r\n } else {\r\n throw new Error(\r\n '\"reducer\" is a required argument, and must be a function or an object of functions that can be passed to combineReducers'\r\n )\r\n }\r\n\r\n let finalMiddleware = middleware\r\n if (typeof finalMiddleware === 'function') {\r\n finalMiddleware = finalMiddleware(curriedGetDefaultMiddleware)\r\n\r\n if (!IS_PRODUCTION && !Array.isArray(finalMiddleware)) {\r\n throw new Error(\r\n 'when using a middleware builder function, an array of middleware must be returned'\r\n )\r\n }\r\n }\r\n if (\r\n !IS_PRODUCTION &&\r\n finalMiddleware.some((item: any) => typeof item !== 'function')\r\n ) {\r\n throw new Error(\r\n 'each middleware provided to configureStore must be a function'\r\n )\r\n }\r\n\r\n const middlewareEnhancer = applyMiddleware(...finalMiddleware)\r\n\r\n let finalCompose = compose\r\n\r\n if (devTools) {\r\n finalCompose = composeWithDevTools({\r\n // Enable capture of stack traces for dispatched Redux actions\r\n trace: !IS_PRODUCTION,\r\n ...(typeof devTools === 'object' && devTools),\r\n })\r\n }\r\n\r\n let storeEnhancers: StoreEnhancer[] = [middlewareEnhancer]\r\n\r\n if (Array.isArray(enhancers)) {\r\n storeEnhancers = [middlewareEnhancer, ...enhancers]\r\n } else if (typeof enhancers === 'function') {\r\n storeEnhancers = enhancers(storeEnhancers)\r\n }\r\n\r\n const composedEnhancer = finalCompose(...storeEnhancers) as any\r\n\r\n return createStore(rootReducer, preloadedState, composedEnhancer)\r\n}\r\n","import React from \"react\";\nimport ReactDOM from \"react-dom/client\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport { store } from \"./redux/store\";\nimport { Provider } from \"react-redux\";\n\nconst root = ReactDOM.createRoot(document.getElementById(\"root\"));\nroot.render(\n \n \n \n);\n"],"names":["module","exports","utils","require","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","transitionalDefaults","AxiosError","CanceledError","parseProtocol","config","Promise","resolve","reject","onCanceled","requestData","data","requestHeaders","headers","responseType","done","cancelToken","unsubscribe","signal","removeEventListener","isFormData","isStandardBrowserEnv","request","XMLHttpRequest","auth","username","password","unescape","encodeURIComponent","Authorization","btoa","fullPath","baseURL","url","onloadend","responseHeaders","getAllResponseHeaders","response","responseText","status","statusText","value","err","open","method","toUpperCase","params","paramsSerializer","timeout","onreadystatechange","readyState","responseURL","indexOf","setTimeout","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","transitional","clarifyTimeoutError","ETIMEDOUT","xsrfValue","withCredentials","xsrfCookieName","read","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isUndefined","onDownloadProgress","addEventListener","onUploadProgress","upload","cancel","type","abort","subscribe","aborted","protocol","ERR_BAD_REQUEST","send","bind","Axios","mergeConfig","axios","createInstance","defaultConfig","context","instance","prototype","extend","create","instanceConfig","CancelToken","isCancel","VERSION","toFormData","Cancel","all","promises","spread","isAxiosError","executor","TypeError","resolvePromise","this","promise","token","then","_listeners","i","l","length","onfulfilled","_resolve","message","reason","throwIfRequested","listener","push","index","splice","source","c","call","ERR_CANCELED","name","inherits","__CANCEL__","InterceptorManager","dispatchRequest","validator","validators","defaults","interceptors","configOrUrl","assertOptions","silentJSONParsing","boolean","forcedJSONParsing","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","unshift","fulfilled","rejected","responseInterceptorChain","chain","Array","apply","concat","shift","newConfig","onFulfilled","onRejected","error","getUri","generateHTTPMethod","isForm","code","Error","toJSON","description","number","fileName","lineNumber","columnNumber","stack","descriptors","Object","defineProperties","defineProperty","from","customProps","axiosError","toFlatObject","obj","assign","handlers","use","options","eject","id","fn","h","isAbsoluteURL","combineURLs","requestedURL","transformData","throwIfCancellationRequested","transformRequest","merge","common","adapter","transformResponse","config1","config2","getMergedValue","target","isPlainObject","isArray","slice","mergeDeepProperties","prop","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","keys","configValue","validateStatus","ERR_BAD_RESPONSE","Math","floor","fns","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","process","toString","getDefaultAdapter","isArrayBuffer","isBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isURLSearchParams","isFileList","isObjectPayload","isObject","contentType","_FormData","env","FormData","rawValue","parser","encoder","isString","JSON","parse","trim","e","stringify","stringifySafely","strictJSONParsing","maxContentLength","maxBodyLength","thisArg","args","arguments","encode","replace","serializedParams","parts","v","isDate","toISOString","join","hashmarkIndex","relativeURL","write","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","document","match","RegExp","decodeURIComponent","remove","now","test","payload","originURL","msie","navigator","userAgent","urlParsingNode","createElement","resolveURL","href","setAttribute","host","search","hash","hostname","port","pathname","charAt","window","location","requestURL","parsed","normalizedName","ignoreDuplicateOf","split","line","substr","exec","callback","arr","formData","convertValue","isTypedArray","Blob","Buffer","build","parentKey","fullKey","endsWith","toArray","el","append","pop","thing","deprecatedWarnings","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","schema","allowUnknown","ERR_BAD_OPTION_VALUE","result","ERR_BAD_OPTION","cache","kindOf","str","kindOfTest","getPrototypeOf","isFunction","hasOwnProperty","TypedArray","Uint8Array","constructor","pattern","ArrayBuffer","isView","pipe","product","assignValue","a","b","stripBOM","content","charCodeAt","superConstructor","props","sourceObj","destObj","filter","merged","getOwnPropertyNames","searchString","position","String","lastIndex","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","displayName","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","render","Memo","getOwnPropertySymbols","getOwnPropertyDescriptor","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","descriptor","Symbol","for","d","f","g","k","m","n","p","q","r","t","w","x","y","z","u","$$typeof","A","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","aa","ca","da","Set","ea","fa","ha","add","ia","ja","ka","la","ma","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","ra","sa","ta","pa","isNaN","qa","oa","removeAttribute","setAttributeNS","xlinkHref","ua","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","va","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","iterator","Ka","La","Ma","Na","Oa","prepareStackTrace","set","Reflect","construct","includes","Pa","tag","Qa","_context","_payload","_init","Ra","Sa","Ta","nodeName","Va","_valueTracker","get","configurable","enumerable","getValue","setValue","stopTracking","Ua","Wa","checked","Xa","activeElement","body","Ya","defaultChecked","defaultValue","_wrapperState","initialChecked","Za","initialValue","controlled","ab","bb","cb","db","ownerDocument","eb","fb","selected","defaultSelected","disabled","gb","dangerouslySetInnerHTML","children","hb","ib","jb","textContent","kb","lb","mb","nb","namespaceURI","innerHTML","valueOf","firstChild","removeChild","appendChild","MSApp","execUnsafeLocalFunction","ob","lastChild","nodeType","nodeValue","pb","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","qb","rb","sb","style","setProperty","substring","tb","menuitem","area","base","br","col","embed","hr","img","input","keygen","link","meta","param","track","wbr","ub","vb","is","wb","xb","srcElement","correspondingUseElement","parentNode","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","onError","Ob","Pb","Qb","Rb","Sb","Tb","Vb","alternate","return","flags","Wb","memoizedState","dehydrated","Xb","Zb","child","sibling","current","Yb","$b","ac","unstable_scheduleCallback","bc","unstable_cancelCallback","cc","unstable_shouldYield","dc","unstable_requestPaint","B","unstable_now","ec","unstable_getCurrentPriorityLevel","fc","unstable_ImmediatePriority","gc","unstable_UserBlockingPriority","hc","unstable_NormalPriority","ic","unstable_LowPriority","jc","unstable_IdlePriority","kc","lc","oc","clz32","pc","qc","log","LN2","rc","sc","tc","uc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","vc","xc","yc","zc","Ac","eventTimes","Cc","C","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Map","Pc","Qc","Rc","Sc","delete","pointerId","Tc","nativeEvent","blockedOn","domEventName","eventSystemFlags","targetContainers","Vc","Wc","priority","isDehydrated","containerInfo","Xc","Yc","dispatchEvent","Zc","$c","ad","bd","cd","ReactCurrentBatchConfig","dd","ed","transition","fd","gd","hd","Uc","stopPropagation","jd","kd","ld","md","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","preventDefault","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","td","ud","view","detail","vd","Ad","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","clipboardData","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","fromCharCode","repeat","locale","which","Rd","Td","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","touches","targetTouches","changedTouches","Xd","Yd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","documentMode","ce","de","ee","fe","ge","he","ie","le","color","date","datetime","email","month","range","tel","text","time","week","me","ne","oe","event","listeners","pe","qe","re","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ie","Je","Ke","node","offset","nextSibling","Le","contains","compareDocumentPosition","Me","HTMLIFrameElement","contentWindow","Ne","contentEditable","Oe","focusedElem","selectionRange","documentElement","start","end","selectionStart","selectionEnd","min","defaultView","getSelection","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","element","left","scrollLeft","top","scrollTop","focus","Pe","Qe","Re","Se","Te","Ue","Ve","We","animationend","animationiteration","animationstart","transitionend","Xe","Ye","Ze","animation","$e","af","bf","cf","df","ef","ff","gf","hf","lf","mf","nf","Ub","D","of","has","pf","qf","rf","random","sf","capture","passive","J","F","tf","uf","parentWindow","vf","wf","na","xa","$a","ba","je","char","ke","xf","yf","zf","Af","Bf","Cf","Df","Ef","__html","Ff","Gf","clearTimeout","Hf","Jf","queueMicrotask","catch","If","Kf","Lf","Mf","previousSibling","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","E","G","Vf","H","Wf","Xf","Yf","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Zf","$f","ag","bg","getChildContext","cg","__reactInternalMemoizedMergedChildContext","dg","eg","fg","gg","hg","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","I","zg","Ag","Bg","elementType","deletions","Cg","pendingProps","overflow","treeContext","retryLane","Dg","mode","Eg","Fg","Gg","memoizedProps","Hg","Ig","Jg","Kg","Lg","Mg","Ng","Og","Pg","Qg","Rg","_currentValue","Sg","childLanes","Tg","dependencies","firstContext","lanes","Ug","Vg","memoizedValue","next","Wg","Xg","Yg","interleaved","Zg","$g","ah","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","pending","effects","bh","ch","eventTime","lane","dh","K","eh","fh","gh","hh","ih","jh","Component","refs","kh","nh","isMounted","_reactInternals","enqueueSetState","L","lh","mh","enqueueReplaceState","enqueueForceUpdate","oh","shouldComponentUpdate","isPureReactComponent","ph","state","updater","qh","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","rh","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","sh","ref","_owner","_stringRef","th","uh","vh","wh","xh","yh","implementation","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","tagName","Jh","Kh","Lh","M","Mh","revealOrder","Nh","Oh","_workInProgressVersionPrimary","Ph","ReactCurrentDispatcher","Qh","Rh","N","O","P","Sh","Th","Uh","Vh","Q","Wh","Xh","Yh","Zh","$h","ai","bi","ci","baseQueue","queue","di","ei","fi","lastRenderedReducer","action","hasEagerState","eagerState","lastRenderedState","dispatch","gi","hi","ii","ji","ki","getSnapshot","li","mi","R","ni","lastEffect","stores","oi","pi","qi","ri","destroy","deps","si","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","Ci","Di","Ei","Fi","Gi","Hi","Ii","Ji","readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","Ki","digest","Li","Mi","Ni","WeakMap","Oi","Pi","Qi","Ri","componentDidCatch","Si","componentStack","Ti","pingCache","Ui","Vi","Wi","Xi","ReactCurrentOwner","Yi","Zi","$i","aj","bj","cj","dj","ej","baseLanes","cachePool","transitions","fj","gj","hj","ij","jj","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","kj","lj","pendingContext","mj","Aj","Cj","Dj","nj","oj","pj","fallback","qj","rj","tj","dataset","dgst","uj","vj","_reactRetry","sj","subtreeFlags","wj","xj","isBackwards","rendering","renderingStartTime","last","tail","tailMode","yj","Ej","S","Fj","Gj","wasMultiple","multiple","suppressHydrationWarning","onClick","onclick","size","createElementNS","autoFocus","createTextNode","T","Hj","Ij","Jj","Kj","U","Lj","WeakSet","V","Mj","W","Nj","Oj","Qj","Rj","Sj","Tj","Uj","Vj","Wj","insertBefore","_reactRootContainer","Xj","X","Yj","Zj","ak","onCommitFiberUnmount","componentWillUnmount","bk","ck","dk","ek","fk","isHidden","gk","hk","display","ik","jk","kk","lk","__reactInternalSnapshotBeforeUpdate","src","Wk","mk","ceil","nk","ok","pk","Y","Z","qk","rk","sk","tk","uk","Infinity","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","callbackNode","expirationTimes","expiredLanes","wc","callbackPriority","ig","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","Pk","finishedWork","finishedLanes","Qk","timeoutHandle","Rk","Sk","Tk","Uk","Vk","mutableReadLanes","Bc","Pj","onCommitFiberRoot","mc","onRecoverableError","Xk","onPostCommitFiberRoot","Yk","Zk","al","isReactComponent","pendingChildren","bl","mutableSourceEagerHydrationData","cl","pendingSuspenseBoundaries","dl","fl","gl","hl","il","jl","zj","$k","ll","reportError","ml","_internalRoot","nl","ol","pl","ql","sl","rl","unmount","unstable_scheduleHydration","querySelectorAll","form","tl","usingClientEntryPoint","Events","ul","findFiberByHostInstance","bundleType","rendererPackageName","vl","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","wl","isDisabled","supportsFiber","inject","createPortal","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","_source","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","__self","__source","jsx","jsxs","setState","forceUpdate","escape","_status","_result","default","Children","map","count","only","PureComponent","cloneElement","createContext","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","createFactory","createRef","forwardRef","isValidElement","lazy","memo","startTransition","unstable_act","sortIndex","performance","setImmediate","startTime","expirationTime","priorityLevel","scheduling","isInputPending","MessageChannel","port2","port1","onmessage","postMessage","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","delay","unstable_wrapCallback","inst","useSyncExternalStoreWithSelector","hasValue","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","o","Footer","className","_arrayLikeToArray","len","arr2","_unsupportedIterableToArray","minLen","_i","_s","_e","_arr","_n","_d","_defineProperty","writable","ownKeys","object","enumerableOnly","symbols","sym","_objectSpread2","getOwnPropertyDescriptors","_objectWithoutProperties","excluded","sourceKeys","sourceSymbolKeys","propertyIsEnumerable","iter","isNum","isBool","isStr","isFn","parseClassName","isToastIdValid","toastId","canBeRendered","POSITION","TOP_LEFT","TOP_RIGHT","TOP_CENTER","BOTTOM_LEFT","BOTTOM_RIGHT","BOTTOM_CENTER","TYPE","INFO","SUCCESS","WARNING","ERROR","DEFAULT","cssTransition","enter","_ref","exit","appendPosition","collapse","collapseDuration","_ref2","preventExitTransition","nodeRef","isIn","enterClassName","exitClassName","animationStep","classToToken","onEntered","Event","classList","onEnter","onExited","duration","scrollHeight","requestAnimationFrame","minHeight","padding","margin","collapseToast","React","toToastItem","toast","containerId","theme","isLoading","icon","eventManager","list","emitQueue","on","off","cancelEmit","timers","emit","timer","Svg","rest","viewBox","fill","Icons","info","warning","success","spinner","getIcon","Icon","iconProps","maybeIcon","useToastContainer","toastIds","setToastIds","containerRef","toastToRender","isToastActive","toastKey","displayedToast","getToast","clearWaitingQueue","limit","removeToast","dequeueToast","appendToast","toastContent","toastProps","staleId","buildToast","enableMultiContainer","updateId","isNotValid","closeToast","isNotAnUpdate","toastAutoClose","containerAutoClose","closeButton","rtl","toastClassName","bodyClassName","toastStyle","bodyStyle","pauseOnHover","pauseOnFocusLoss","draggable","draggablePercent","draggableDirection","closeOnClick","progressClassName","progressStyle","autoClose","hideProgressBar","progress","role","deleteToast","removed","queueLen","freeSlot","toDequeue","iconOut","onOpen","onClose","clear","getToastToRender","toRender","collection","values","newestOnTop","reverse","getX","getY","useToast","isRunning","setIsRunning","setPreventExitTransition","toastRef","drag","delta","removalDistance","canCloseOnClick","canDrag","boundingRect","didMove","syncProps","onDragStart","onDragMove","onDragEnd","getBoundingClientRect","offsetWidth","offsetHeight","onDragTransitionEnd","bottom","right","pauseToast","playToast","transform","abs","once","hasFocus","bindFocusEvents","eventHandlers","onMouseDown","onTouchStart","onMouseUp","onTouchEnd","onMouseEnter","onMouseLeave","CloseButton","ariaLabel","fillRule","ProgressBar","hide","userStyle","controlledProgress","animationDuration","animationPlayState","defaultClassName","cx","classNames","animationEvent","Toast","Transition","cssClasses","isProgressControlled","closeButtonProps","Close","Bounce","ToastContainer","getClassName","toastList","containerStyle","pointerEvents","latestInstance","containers","generateToastId","getToastId","dispatchToast","mergeOptions","createToastByType","_typeof","_regeneratorRuntime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","arg","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","skipTempReset","prev","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","die","msg","s","isDraft","DRAFT_STATE","isDraftable","proto","Ctor","Function","objectCtorString","DRAFTABLE","isMap","isSet","each","getArchtype","type_","propOrOldValue","hasMap","hasSet","latest","copy_","base_","shallowCopy","freeze","deep","isFrozen","dontMutateFrozenCollections","getPlugin","pluginKey","plugin","plugins","loadPlugin","getCurrentScope","currentScope","usePatchesInScope","scope","patchListener","patches_","inversePatches_","patchListener_","revokeScope","leaveScope","drafts_","revokeDraft","parent_","enterScope","immer","immer_","canAutoFreeze_","unfinalizedDrafts_","draft","revoke_","revoked_","processResult","baseDraft","isReplaced","useProxies_","willFinalizeES5_","modified_","finalize","maybeFreeze","generateReplacementPatches_","NOTHING","rootScope","childValue","finalizeProperty","scope_","finalized_","draft_","generatePatches_","parentState","targetObject","rootPath","res","assigned_","autoFreeze_","peek","getDescriptorFromProto","markChanged","prepareCopy","createProxy","parent","proxyMap_","proxySet_","isManual_","traps","objectTraps","arrayTraps","Proxy","revocable","revoke","proxy","createProxyProxy","createES5Proxy_","currentImpl","copy","archType","hasChanges_","copyHelper","enableES5","proxyProperty","markChangesSweep","drafts","hasArrayChanges","hasObjectChanges","baseValue","baseIsDraft","createES5Draft","markChangesRecursively","loading","resetParams","resolver","baseParams","update","dismiss","dark","isActive","container","oldOptions","oldContent","nextOptions","onChange","containerInstance","item","hasSymbol","hasProxies","_desc$get","readPropFromProto","currentState","deleteProperty","owner","Immer","recipe","defaultBase","_this","produce","_this2","hasError","ip","arg1","arg2","produceWithPatches","patches","inversePatches","nextState","useProxies","setUseProxies","autoFreeze","setAutoFreeze","createDraft","finishDraft","applyPatches","patch","op","applyPatchesImpl","applyPatches_","formatProdErrorMessage","$$observable","observable","randomString","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","createStore","reducer","preloadedState","enhancer","currentReducer","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","getState","isSubscribed","replaceReducer","nextReducer","outerSubscribe","observer","observeState","combineReducers","reducers","reducerKeys","finalReducers","shapeAssertionError","finalReducerKeys","assertReducerShape","hasChanged","_key","previousStateForKey","nextStateForKey","compose","_len","funcs","reduce","applyMiddleware","middlewares","store","_dispatch","middlewareAPI","middleware","_objectSpread","createThunkMiddleware","extraArgument","thunk","withExtraArgument","composeWithDevTools","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","__REDUX_DEVTOOLS_EXTENSION__","baseProto","MiddlewareArray","__extends","species","_super","freezeDraftable","createNextState","curryGetDefaultMiddleware","_c","middlewareArray","isBoolean","thunkMiddleware","getDefaultMiddleware","createAction","prepareAction","actionCreator","prepared","__spreadValues","executeReducerBuilderCallback","builderCallback","defaultCaseReducer","actionsMap","actionMatchers","builder","addCase","typeOrActionCreator","addMatcher","matcher","addDefaultCase","alm","errorLoading","dataSlice","_reducer","initialState","reducerNames","sliceCaseReducersByName","sliceCaseReducersByType","actionCreators","buildReducer","extraReducers","_f","finalCaseReducers","mapOrBuilderCallback","getInitialState","finalActionMatchers","finalDefaultCaseReducer","isStateFunction","frozenInitialState_1","caseReducers","reducer2","cr","previousState","caseReducer","isDraft2","isDraftable2","createNextState2","createReducer","reducerName","prepareCallback","maybeReducerWithPrepare","prepare","actions","createSlice","cityLatLon","cod","main","temp","feels_like","humidity","temp_max","temp_min","weather","wind","speed","deg","clouds","sys","sunrise","sunset","airPollution","pm10","no2","o3","pm2_5","forecast","setData","setLatLon","setAirPollution","setForecast","getAPIData","cityName","latLonURL","resp","getWeatherURL","lat","lon","getAirQualityURL","airdata","components","getForecastFive","forecastData","ReactReduxContext","useReduxContext","createStoreHook","useDefaultReduxContext","useStore","createDispatchHook","useDefaultStore","useDispatch","CityInput","cityname","setCityName","placeholder","onKeyDown","required","Header","notInitialized","refEquality","createSelectorHook","selector","equalityFn","subscription","getServerState","selectedState","addNestedSub","useSelector","getPicture","LeftPanel","alt","Text","frontText","dataText","unit","getDirection","dir","RightPanel","feels","max","WeatherCard","latlon","rightPanelData","leftPanelData","pm25","TableData","backgroundColor","AirPollution","airData","colSpan","getTime","unix","toLocaleTimeString","hour","minute","hour12","getDateTime","toLocaleDateString","SunInfo","suninfo","batch","getBatch","nullListeners","notify","createSubscription","parentSub","handleChangeWrapper","onStateChange","trySubscribe","first","createListenerCollection","notifyNestedSubs","Boolean","tryUnsubscribe","getListeners","useIsomorphicLayoutEffect","newBatch","serverState","contextValue","initializeUseSelector","initializeConnect","ForecastCard","dt","ForecastList","handleScroll","scrollAmount","scrollTo","behavior","eachDay","tempArray","day","getForecastDays","index2","onWheel","rootReducer","curriedGetDefaultMiddleware","devTools","_g","_h","enhancers","finalMiddleware","middlewareEnhancer","finalCompose","compose2","trace","storeEnhancers","configureStore","dataSliceReducer","ReactDOM","getElementById"],"sourceRoot":""} \ No newline at end of file

(\r\n type: T\r\n): PayloadActionCreator\r\n\r\n/**\r\n * A utility function to create an action creator for the given action type\r\n * string. The action creator accepts a single argument, which will be included\r\n * in the action object as a field called payload. The action creator function\r\n * will also have its toString() overriden so that it returns the action type,\r\n * allowing it to be used in reducer logic that is looking for that action type.\r\n *\r\n * @param type The action type to use for created actions.\r\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\r\n * If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\r\n *\r\n * @public\r\n */\r\nexport function createAction<\r\n PA extends PrepareAction,\r\n T extends string = string\r\n>(\r\n type: T,\r\n prepareAction: PA\r\n): PayloadActionCreator['payload'], T, PA>\r\n\r\nexport function createAction(type: string, prepareAction?: Function): any {\r\n function actionCreator(...args: any[]) {\r\n if (prepareAction) {\r\n let prepared = prepareAction(...args)\r\n if (!prepared) {\r\n throw new Error('prepareAction did not return an object')\r\n }\r\n\r\n return {\r\n type,\r\n payload: prepared.payload,\r\n ...('meta' in prepared && { meta: prepared.meta }),\r\n ...('error' in prepared && { error: prepared.error }),\r\n }\r\n }\r\n return { type, payload: args[0] }\r\n }\r\n\r\n actionCreator.toString = () => `${type}`\r\n\r\n actionCreator.type = type\r\n\r\n actionCreator.match = (action: Action): action is PayloadAction =>\r\n action.type === type\r\n\r\n return actionCreator\r\n}\r\n\r\nexport function isFSA(action: unknown): action is {\r\n type: string\r\n payload?: unknown\r\n error?: unknown\r\n meta?: unknown\r\n} {\r\n return (\r\n isPlainObject(action) &&\r\n typeof (action as any).type === 'string' &&\r\n Object.keys(action).every(isValidKey)\r\n )\r\n}\r\n\r\nfunction isValidKey(key: string) {\r\n return ['type', 'payload', 'error', 'meta'].indexOf(key) > -1\r\n}\r\n\r\n/**\r\n * Returns the action type of the actions created by the passed\r\n * `createAction()`-generated action creator (arbitrary action creators\r\n * are not supported).\r\n *\r\n * @param action The action creator whose action type to get.\r\n * @returns The action type used by the action creator.\r\n *\r\n * @public\r\n */\r\nexport function getType(\r\n actionCreator: PayloadActionCreator\r\n): T {\r\n return `${actionCreator}` as T\r\n}\r\n\r\n// helper types for more readable typings\r\n\r\ntype IfPrepareActionMethodProvided<\r\n PA extends PrepareAction | void,\r\n True,\r\n False\r\n> = PA extends (...args: any[]) => any ? True : False\r\n","import type { Action, AnyAction } from 'redux'\r\nimport type {\r\n CaseReducer,\r\n CaseReducers,\r\n ActionMatcherDescriptionCollection,\r\n} from './createReducer'\r\nimport type { TypeGuard } from './tsHelpers'\r\n\r\nexport interface TypedActionCreator {\r\n (...args: any[]): Action\r\n type: Type\r\n}\r\n\r\n/**\r\n * A builder for an action <-> reducer map.\r\n *\r\n * @public\r\n */\r\nexport interface ActionReducerMapBuilder {\r\n /**\r\n * Adds a case reducer to handle a single exact action type.\r\n * @remarks\r\n * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\r\n * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\r\n * @param reducer - The actual case reducer function.\r\n */\r\n addCase>(\r\n actionCreator: ActionCreator,\r\n reducer: CaseReducer>\r\n ): ActionReducerMapBuilder\r\n /**\r\n * Adds a case reducer to handle a single exact action type.\r\n * @remarks\r\n * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\r\n * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\r\n * @param reducer - The actual case reducer function.\r\n */\r\n addCase>(\r\n type: Type,\r\n reducer: CaseReducer\r\n ): ActionReducerMapBuilder\r\n\r\n /**\r\n * Allows you to match your incoming actions against your own filter function instead of only the `action.type` property.\r\n * @remarks\r\n * If multiple matcher reducers match, all of them will be executed in the order\r\n * they were defined in - even if a case reducer already matched.\r\n * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\r\n * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/advanced-types.html#using-type-predicates)\r\n * function\r\n * @param reducer - The actual case reducer function.\r\n *\r\n * @example\r\n```ts\r\nimport {\r\n createAction,\r\n createReducer,\r\n AsyncThunk,\r\n AnyAction,\r\n} from \"@reduxjs/toolkit\";\r\n\r\ntype GenericAsyncThunk = AsyncThunk;\r\n\r\ntype PendingAction = ReturnType;\r\ntype RejectedAction = ReturnType;\r\ntype FulfilledAction = ReturnType;\r\n\r\nconst initialState: Record = {};\r\nconst resetAction = createAction(\"reset-tracked-loading-state\");\r\n\r\nfunction isPendingAction(action: AnyAction): action is PendingAction {\r\n return action.type.endsWith(\"/pending\");\r\n}\r\n\r\nconst reducer = createReducer(initialState, (builder) => {\r\n builder\r\n .addCase(resetAction, () => initialState)\r\n // matcher can be defined outside as a type predicate function\r\n .addMatcher(isPendingAction, (state, action) => {\r\n state[action.meta.requestId] = \"pending\";\r\n })\r\n .addMatcher(\r\n // matcher can be defined inline as a type predicate function\r\n (action): action is RejectedAction => action.type.endsWith(\"/rejected\"),\r\n (state, action) => {\r\n state[action.meta.requestId] = \"rejected\";\r\n }\r\n )\r\n // matcher can just return boolean and the matcher can receive a generic argument\r\n .addMatcher(\r\n (action) => action.type.endsWith(\"/fulfilled\"),\r\n (state, action) => {\r\n state[action.meta.requestId] = \"fulfilled\";\r\n }\r\n );\r\n});\r\n```\r\n */\r\n addMatcher(\r\n matcher: TypeGuard | ((action: any) => boolean),\r\n reducer: CaseReducer\r\n ): Omit, 'addCase'>\r\n\r\n /**\r\n * Adds a \"default case\" reducer that is executed if no case reducer and no matcher\r\n * reducer was executed for this action.\r\n * @param reducer - The fallback \"default case\" reducer function.\r\n *\r\n * @example\r\n```ts\r\nimport { createReducer } from '@reduxjs/toolkit'\r\nconst initialState = { otherActions: 0 }\r\nconst reducer = createReducer(initialState, builder => {\r\n builder\r\n // .addCase(...)\r\n // .addMatcher(...)\r\n .addDefaultCase((state, action) => {\r\n state.otherActions++\r\n })\r\n})\r\n```\r\n */\r\n addDefaultCase(reducer: CaseReducer): {}\r\n}\r\n\r\nexport function executeReducerBuilderCallback(\r\n builderCallback: (builder: ActionReducerMapBuilder) => void\r\n): [\r\n CaseReducers,\r\n ActionMatcherDescriptionCollection,\r\n CaseReducer | undefined\r\n] {\r\n const actionsMap: CaseReducers = {}\r\n const actionMatchers: ActionMatcherDescriptionCollection = []\r\n let defaultCaseReducer: CaseReducer | undefined\r\n const builder = {\r\n addCase(\r\n typeOrActionCreator: string | TypedActionCreator,\r\n reducer: CaseReducer\r\n ) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n /*\r\n to keep the definition by the user in line with actual behavior, \r\n we enforce `addCase` to always be called before calling `addMatcher`\r\n as matching cases take precedence over matchers\r\n */\r\n if (actionMatchers.length > 0) {\r\n throw new Error(\r\n '`builder.addCase` should only be called before calling `builder.addMatcher`'\r\n )\r\n }\r\n if (defaultCaseReducer) {\r\n throw new Error(\r\n '`builder.addCase` should only be called before calling `builder.addDefaultCase`'\r\n )\r\n }\r\n }\r\n const type =\r\n typeof typeOrActionCreator === 'string'\r\n ? typeOrActionCreator\r\n : typeOrActionCreator.type\r\n if (type in actionsMap) {\r\n throw new Error(\r\n 'addCase cannot be called with two reducers for the same action type'\r\n )\r\n }\r\n actionsMap[type] = reducer\r\n return builder\r\n },\r\n addMatcher(\r\n matcher: TypeGuard,\r\n reducer: CaseReducer\r\n ) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (defaultCaseReducer) {\r\n throw new Error(\r\n '`builder.addMatcher` should only be called before calling `builder.addDefaultCase`'\r\n )\r\n }\r\n }\r\n actionMatchers.push({ matcher, reducer })\r\n return builder\r\n },\r\n addDefaultCase(reducer: CaseReducer) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (defaultCaseReducer) {\r\n throw new Error('`builder.addDefaultCase` can only be called once')\r\n }\r\n }\r\n defaultCaseReducer = reducer\r\n return builder\r\n },\r\n }\r\n builderCallback(builder)\r\n return [actionsMap, actionMatchers, defaultCaseReducer]\r\n}\r\n","import type { Dispatch, AnyAction, MiddlewareAPI } from 'redux'\r\nimport type { ThunkDispatch } from 'redux-thunk'\r\nimport { createAction } from '../createAction'\r\nimport { nanoid } from '../nanoid'\r\n\r\nimport type {\r\n ListenerMiddleware,\r\n ListenerMiddlewareInstance,\r\n AddListenerOverloads,\r\n AnyListenerPredicate,\r\n CreateListenerMiddlewareOptions,\r\n TypedAddListener,\r\n TypedCreateListenerEntry,\r\n FallbackAddListenerOptions,\r\n ListenerEntry,\r\n ListenerErrorHandler,\r\n UnsubscribeListener,\r\n TakePattern,\r\n ListenerErrorInfo,\r\n ForkedTaskExecutor,\r\n ForkedTask,\r\n TypedRemoveListener,\r\n TaskResult,\r\n AbortSignalWithReason,\r\n UnsubscribeListenerOptions,\r\n} from './types'\r\nimport {\r\n abortControllerWithReason,\r\n addAbortSignalListener,\r\n assertFunction,\r\n catchRejection,\r\n} from './utils'\r\nimport {\r\n listenerCancelled,\r\n listenerCompleted,\r\n TaskAbortError,\r\n taskCancelled,\r\n taskCompleted,\r\n} from './exceptions'\r\nimport {\r\n runTask,\r\n promisifyAbortSignal,\r\n validateActive,\r\n createPause,\r\n createDelay,\r\n} from './task'\r\nexport { TaskAbortError } from './exceptions'\r\nexport type {\r\n ListenerEffect,\r\n ListenerMiddleware,\r\n ListenerEffectAPI,\r\n ListenerMiddlewareInstance,\r\n CreateListenerMiddlewareOptions,\r\n ListenerErrorHandler,\r\n TypedStartListening,\r\n TypedAddListener,\r\n TypedStopListening,\r\n TypedRemoveListener,\r\n UnsubscribeListener,\r\n UnsubscribeListenerOptions,\r\n ForkedTaskExecutor,\r\n ForkedTask,\r\n ForkedTaskAPI,\r\n AsyncTaskExecutor,\r\n SyncTaskExecutor,\r\n TaskCancelled,\r\n TaskRejected,\r\n TaskResolved,\r\n TaskResult,\r\n} from './types'\r\n\r\n//Overly-aggressive byte-shaving\r\nconst { assign } = Object\r\n/**\r\n * @internal\r\n */\r\nconst INTERNAL_NIL_TOKEN = {} as const\r\n\r\nconst alm = 'listenerMiddleware' as const\r\n\r\nconst createFork = (parentAbortSignal: AbortSignalWithReason) => {\r\n const linkControllers = (controller: AbortController) =>\r\n addAbortSignalListener(parentAbortSignal, () =>\r\n abortControllerWithReason(controller, parentAbortSignal.reason)\r\n )\r\n\r\n return (taskExecutor: ForkedTaskExecutor): ForkedTask => {\r\n assertFunction(taskExecutor, 'taskExecutor')\r\n const childAbortController = new AbortController()\r\n\r\n linkControllers(childAbortController)\r\n\r\n const result = runTask(\r\n async (): Promise => {\r\n validateActive(parentAbortSignal)\r\n validateActive(childAbortController.signal)\r\n const result = (await taskExecutor({\r\n pause: createPause(childAbortController.signal),\r\n delay: createDelay(childAbortController.signal),\r\n signal: childAbortController.signal,\r\n })) as T\r\n validateActive(childAbortController.signal)\r\n return result\r\n },\r\n () => abortControllerWithReason(childAbortController, taskCompleted)\r\n )\r\n\r\n return {\r\n result: createPause>(parentAbortSignal)(result),\r\n cancel() {\r\n abortControllerWithReason(childAbortController, taskCancelled)\r\n },\r\n }\r\n }\r\n}\r\n\r\nconst createTakePattern = (\r\n startListening: AddListenerOverloads<\r\n UnsubscribeListener,\r\n S,\r\n Dispatch\r\n >,\r\n signal: AbortSignal\r\n): TakePattern => {\r\n /**\r\n * A function that takes a ListenerPredicate and an optional timeout,\r\n * and resolves when either the predicate returns `true` based on an action\r\n * state combination or when the timeout expires.\r\n * If the parent listener is canceled while waiting, this will throw a\r\n * TaskAbortError.\r\n */\r\n const take = async