diff --git a/feature/bootstrap5/asset-manifest.json b/feature/bootstrap5/asset-manifest.json index b1a93413..25b152e3 100644 --- a/feature/bootstrap5/asset-manifest.json +++ b/feature/bootstrap5/asset-manifest.json @@ -1,7 +1,7 @@ { - "main.css": "/shlink-web-client/feature/bootstrap5/static/css/main.8f098ec9.chunk.css", - "main.js": "/shlink-web-client/feature/bootstrap5/static/js/main.f50f3936.chunk.js", - "main.js.map": "/shlink-web-client/feature/bootstrap5/static/js/main.f50f3936.chunk.js.map", + "main.css": "/shlink-web-client/feature/bootstrap5/static/css/main.4159dfbb.chunk.css", + "main.js": "/shlink-web-client/feature/bootstrap5/static/js/main.5083eae8.chunk.js", + "main.js.map": "/shlink-web-client/feature/bootstrap5/static/js/main.5083eae8.chunk.js.map", "runtime~main.js": "/shlink-web-client/feature/bootstrap5/static/js/runtime~main.7d3ff180.js", "runtime~main.js.map": "/shlink-web-client/feature/bootstrap5/static/js/runtime~main.7d3ff180.js.map", "static/css/2.04c5acbe.chunk.css": "/shlink-web-client/feature/bootstrap5/static/css/2.04c5acbe.chunk.css", @@ -9,6 +9,6 @@ "static/js/2.f422478e.chunk.js.map": "/shlink-web-client/feature/bootstrap5/static/js/2.f422478e.chunk.js.map", "index.html": "/shlink-web-client/feature/bootstrap5/index.html", "static/css/2.04c5acbe.chunk.css.map": "/shlink-web-client/feature/bootstrap5/static/css/2.04c5acbe.chunk.css.map", - "static/css/main.8f098ec9.chunk.css.map": "/shlink-web-client/feature/bootstrap5/static/css/main.8f098ec9.chunk.css.map", + "static/css/main.4159dfbb.chunk.css.map": "/shlink-web-client/feature/bootstrap5/static/css/main.4159dfbb.chunk.css.map", "static/js/2.f422478e.chunk.js.LICENSE.txt": "/shlink-web-client/feature/bootstrap5/static/js/2.f422478e.chunk.js.LICENSE.txt" } \ No newline at end of file diff --git a/feature/bootstrap5/index.html b/feature/bootstrap5/index.html index 63ff0d08..23c38f47 100644 --- a/feature/bootstrap5/index.html +++ b/feature/bootstrap5/index.html @@ -1 +1 @@ -Shlink — The URL shortener
\ No newline at end of file +Shlink — The URL shortener
\ No newline at end of file diff --git a/feature/bootstrap5/static/css/main.8f098ec9.chunk.css b/feature/bootstrap5/static/css/main.4159dfbb.chunk.css similarity index 99% rename from feature/bootstrap5/static/css/main.8f098ec9.chunk.css rename to feature/bootstrap5/static/css/main.4159dfbb.chunk.css index 1b1303ee..09ab1e22 100644 --- a/feature/bootstrap5/static/css/main.8f098ec9.chunk.css +++ b/feature/bootstrap5/static/css/main.4159dfbb.chunk.css @@ -5,4 +5,4 @@ * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#4696e5;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:70,150,229;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg,hsla(0,0%,100%,0.15),hsla(0,0%,100%,0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,:after,:before{box-sizing:border-box}@media(prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-family:var(--bs-body-font-family);font-size:1rem;font-size:var(--bs-body-font-size);font-weight:400;font-weight:var(--bs-body-font-weight);line-height:1.5;line-height:var(--bs-body-line-height);color:#212529;color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:#fff;background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media(min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media(min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media(min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}a{color:#4696e5;text-decoration:underline}a:hover{color:#3878b7}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media(min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:initial}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-6{font-size:2.5rem}}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer:before{content:"— "}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:.75rem;padding-right:var(--bs-gutter-x,.75rem);padding-left:.75rem;padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media(min-width:576px){.container,.container-sm{max-width:540px}}@media(min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media(min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media(min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media(min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y)*-1);margin-right:calc(var(--bs-gutter-x)*-0.5);margin-left:calc(var(--bs-gutter-x)*-0.5)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*0.5);padding-left:calc(var(--bs-gutter-x)*0.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media(min-width:576px){.col-sm{flex:1 0}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media(min-width:768px){.col-md{flex:1 0}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media(min-width:992px){.col-lg{flex:1 0}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media(min-width:1200px){.col-xl{flex:1 0}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media(min-width:1400px){.col-xxl{flex:1 0}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0,0,0,0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0,0,0,0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0,0,0,0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:2px solid}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#daeafa;--bs-table-striped-bg:#cfdeee;--bs-table-striped-color:#000;--bs-table-active-bg:#c4d3e1;--bs-table-active-color:#000;--bs-table-hover-bg:#cad8e7;--bs-table-hover-color:#000;color:#000;border-color:#c4d3e1}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#a3cbf2;outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border:0 solid;border-color:inherit;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border:0 solid;border-color:inherit;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:initial;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media(prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#a3cbf2;outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.3rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:50%;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{-webkit-filter:brightness(90%);filter:brightness(90%)}.form-check-input:focus{border-color:#a3cbf2;outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25)}.form-check-input:checked{background-color:#4696e5;border-color:#4696e5}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3 6-6'/%3E%3C/svg%3E")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='2' fill='%23fff'/%3E%3C/svg%3E")}.form-check-input[type=checkbox]:indeterminate{background-color:#4696e5;border-color:#4696e5;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3E%3C/svg%3E")}.form-check-input:disabled{pointer-events:none;-webkit-filter:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(0, 0, 0, 0.25)'/%3E%3C/svg%3E");background-position:0;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23a3cbf2'/%3E%3C/svg%3E")}.form-switch .form-check-input:checked{background-position:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;-webkit-filter:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:initial;-webkit-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(70,150,229,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(70,150,229,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#4696e5;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media(prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#c8e0f7}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#4696e5;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#c8e0f7}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;-webkit-transform-origin:0 0;transform-origin:0 0;transition:opacity .1s ease-in-out,-webkit-transform .1s ease-in-out;transition:opacity .1s ease-in-out,transform .1s ease-in-out;transition:opacity .1s ease-in-out,transform .1s ease-in-out,-webkit-transform .1s ease-in-out}@media(prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-webkit-input-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;-webkit-transform:scale(.85) translateY(-.5rem) translateX(.15rem);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;-webkit-transform:scale(.85) translateY(-.5rem) translateX(.15rem);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3E%3C/svg%3E"),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3E%3C/svg%3E"),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;user-select:none;background-color:initial;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#000;background-color:#4696e5;border-color:#4696e5}.btn-check:focus+.btn-primary,.btn-primary:focus,.btn-primary:hover{color:#000;background-color:#62a6e9;border-color:#59a1e8}.btn-check:focus+.btn-primary,.btn-primary:focus{box-shadow:0 0 0 .25rem rgba(60,128,195,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#000;background-color:#6babea;border-color:#59a1e8}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,128,195,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#000;background-color:#4696e5;border-color:#4696e5}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-secondary,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-success,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-info,.btn-info:focus,.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-warning,.btn-warning:focus,.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-danger,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-light,.btn-light:focus,.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-dark,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#4696e5;border-color:#4696e5}.btn-outline-primary:hover{color:#000;background-color:#4696e5;border-color:#4696e5}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(70,150,229,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#000;background-color:#4696e5;border-color:#4696e5}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(70,150,229,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#4696e5;background-color:initial}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:initial}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:initial}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:initial}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:initial}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:initial}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:initial}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:initial}.btn-link{font-weight:400;color:#4696e5;text-decoration:underline}.btn-link:hover{color:#3878b7}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropstart .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:initial;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#4696e5}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:initial}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:hsla(0,0%,100%,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#4696e5}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#4696e5;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#3878b7}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:initial;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#4696e5}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:initial;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:50%;background-size:100%}.navbar-nav-scroll{max-height:75vh;max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media(min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler,.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:initial;border-right:0;border-left:0;transition:none;-webkit-transform:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler,.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:initial;border-right:0;border-left:0;transition:none;-webkit-transform:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler,.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:initial;border-right:0;border-left:0;transition:none;-webkit-transform:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler,.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:initial;border-right:0;border-left:0;transition:none;-webkit-transform:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler,.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:initial;border-right:0;border-left:0;transition:none;-webkit-transform:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler,.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:initial;border-right:0;border-left:0;transition:none;-webkit-transform:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.55)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.55);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.55)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:initial;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.5rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media(min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media(prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#3f87ce;background-color:#edf5fc;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed):after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%233f87ce'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 01.708 0L8 10.293l5.646-5.647a.5.5 0 01.708.708l-6 6a.5.5 0 01-.708 0l-6-6a.5.5 0 010-.708z'/%3E%3C/svg%3E");-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.accordion-button:after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 01.708 0L8 10.293l5.646-5.647a.5.5 0 01.708.708l-6 6a.5.5 0 01-.708 0l-6-6a.5.5 0 010-.708z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:1.25rem;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out}@media(prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#a3cbf2;outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{float:left;padding-right:.5rem;color:#6c757d;content:"/";content:var(--bs-breadcrumb-divider,"/")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#4696e5;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;border-color:#dee2e6}.page-link:focus,.page-link:hover{color:#3878b7;background-color:#e9ecef}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#4696e5;border-color:#4696e5}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:initial;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#2a5a89;background-color:#daeafa;border-color:#c8e0f7}.alert-primary .alert-link{color:#22486e}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{height:1rem;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:flex;overflow:hidden}.progress-bar{flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;transition:width .6s ease}@media(prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media(prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#4696e5;border-color:#4696e5}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media(min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#2a5a89;background-color:#daeafa}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#2a5a89;background-color:#c4d3e1}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#2a5a89;border-color:#2a5a89}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:initial;width:1em;height:1em;padding:.25em;color:#000;background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3E%3C/svg%3E") 50%/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;user-select:none;opacity:.25}.btn-close-white{-webkit-filter:invert(1) grayscale(100%) brightness(200%);filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media(prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media(min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media(min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow:after,.popover .popover-arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.popover-arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media(prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M11.354 1.646a.5.5 0 010 .708L5.707 8l5.647 5.646a.5.5 0 01-.708.708l-6-6a.5.5 0 010-.708l6-6a.5.5 0 01.708 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M4.646 1.646a.5.5 0 01.708 0l6 6a.5.5 0 010 .708l-6 6a.5.5 0 01-.708-.708L10.293 8 4.646 2.354a.5.5 0 010-.708z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:initial;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{-webkit-filter:invert(1) grayscale(100);filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}@media(prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem}.offcanvas-header .btn-close{padding:.5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);-webkit-transform:translateX(-100%);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-top{top:0;border-bottom:1px solid rgba(0,0,0,.2);-webkit-transform:translateY(-100%);transform:translateY(-100%)}.offcanvas-bottom,.offcanvas-top{right:0;left:0;height:30vh;max-height:100%}.offcanvas-bottom{border-top:1px solid rgba(0,0,0,.2);-webkit-transform:translateY(100%);transform:translateY(100%)}.offcanvas.show{-webkit-transform:none;transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn:before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}@keyframes placeholder-wave{to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}.clearfix:after{display:block;clear:both;content:""}.link-primary{color:#4696e5}.link-primary:focus,.link-primary:hover{color:#6babea}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio:before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.85714%}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media(min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{flex-direction:row;align-items:center}.hstack,.vstack{display:flex;align-self:stretch}.vstack{flex:1 1 auto;flex-direction:column}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:initial!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{-webkit-transform:translate(-50%,-50%)!important;transform:translate(-50%,-50%)!important}.translate-middle-x{-webkit-transform:translateX(-50%)!important;transform:translateX(-50%)!important}.translate-middle-y{-webkit-transform:translateY(-50%)!important;transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#4696e5!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{grid-gap:0!important;gap:0!important}.gap-1{grid-gap:.25rem!important;gap:.25rem!important}.gap-2{grid-gap:.5rem!important;gap:.5rem!important}.gap-3{grid-gap:1rem!important;gap:1rem!important}.gap-4{grid-gap:1.5rem!important;gap:1.5rem!important}.gap-5{grid-gap:3rem!important;gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important;font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(70,150,229,var(--bs-text-opacity))!important;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(108,117,125,var(--bs-text-opacity))!important;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(25,135,84,var(--bs-text-opacity))!important;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(13,202,240,var(--bs-text-opacity))!important;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(255,193,7,var(--bs-text-opacity))!important;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(220,53,69,var(--bs-text-opacity))!important;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(248,249,250,var(--bs-text-opacity))!important;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(33,37,41,var(--bs-text-opacity))!important;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(0,0,0,var(--bs-text-opacity))!important;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(255,255,255,var(--bs-text-opacity))!important;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(33,37,41,var(--bs-text-opacity))!important;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:hsla(0,0%,100%,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(70,150,229,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(108,117,125,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(25,135,84,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(13,202,240,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(255,193,7,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(220,53,69,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(248,249,250,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(33,37,41,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(0,0,0,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(255,255,255,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(255,255,255,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:initial!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0))!important;background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-end,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-end{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-start{border-bottom-left-radius:.25rem!important}.rounded-start{border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media(min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{grid-gap:0!important;gap:0!important}.gap-sm-1{grid-gap:.25rem!important;gap:.25rem!important}.gap-sm-2{grid-gap:.5rem!important;gap:.5rem!important}.gap-sm-3{grid-gap:1rem!important;gap:1rem!important}.gap-sm-4{grid-gap:1.5rem!important;gap:1.5rem!important}.gap-sm-5{grid-gap:3rem!important;gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media(min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{grid-gap:0!important;gap:0!important}.gap-md-1{grid-gap:.25rem!important;gap:.25rem!important}.gap-md-2{grid-gap:.5rem!important;gap:.5rem!important}.gap-md-3{grid-gap:1rem!important;gap:1rem!important}.gap-md-4{grid-gap:1.5rem!important;gap:1.5rem!important}.gap-md-5{grid-gap:3rem!important;gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media(min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{grid-gap:0!important;gap:0!important}.gap-lg-1{grid-gap:.25rem!important;gap:.25rem!important}.gap-lg-2{grid-gap:.5rem!important;gap:.5rem!important}.gap-lg-3{grid-gap:1rem!important;gap:1rem!important}.gap-lg-4{grid-gap:1.5rem!important;gap:1.5rem!important}.gap-lg-5{grid-gap:3rem!important;gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media(min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{grid-gap:0!important;gap:0!important}.gap-xl-1{grid-gap:.25rem!important;gap:.25rem!important}.gap-xl-2{grid-gap:.5rem!important;gap:.5rem!important}.gap-xl-3{grid-gap:1rem!important;gap:1rem!important}.gap-xl-4{grid-gap:1.5rem!important;gap:1.5rem!important}.gap-xl-5{grid-gap:3rem!important;gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media(min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{grid-gap:0!important;gap:0!important}.gap-xxl-1{grid-gap:.25rem!important;gap:.25rem!important}.gap-xxl-2{grid-gap:.5rem!important;gap:.5rem!important}.gap-xxl-3{grid-gap:1rem!important;gap:1rem!important}.gap-xxl-4{grid-gap:1.5rem!important;gap:1.5rem!important}.gap-xxl-5{grid-gap:3rem!important;gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media(min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}.react-tags{position:relative;padding:5px 0 0 6px;border-radius:.3rem;background-color:var(--input-color);border:1px solid var(--input-border-color);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;font-size:1em;line-height:1.2;cursor:text}.react-tags.is-focused{box-shadow:0 0 0 .2rem rgba(70,150,229,.25)}.react-tags__tag{font-size:100%}.react-tags__selected{display:inline;vertical-align:2px}.react-tags__selected-tag{display:inline-block;box-sizing:border-box;margin:0 6px 6px 0;padding:6px 8px;border:1px solid var(--input-border-color);border-radius:.25rem;background:#f1f1f1;font-size:inherit;line-height:inherit}.react-tags__selected-tag:after{content:"✕";color:#aaa;margin-left:8px}.react-tags__selected-tag:focus,.react-tags__selected-tag:hover{border-color:var(--input-border-color)}.react-tags__search{display:inline-block;padding:6px 2px;margin-bottom:5px;max-width:100%}@media screen and (min-width:576px){.react-tags__search{position:relative}}.react-tags__search-input{font-size:1.25rem;line-height:inherit;color:var(--input-text-color);background-color:var(--input-color);max-width:100%;margin:0 0 0 7px;padding:0;border:0;outline:none}.react-tags__search-input::-ms-clear{display:none}.react-tags__suggestions{position:absolute;top:100%;left:0;width:100%;z-index:10}@media screen and (min-width:576px){.react-tags__suggestions{width:240px}}.react-tags__suggestions ul{margin:4px -1px;padding:0;list-style:none;background:var(--primary-color);border:1px solid var(--border-color);border-radius:.25rem;box-shadow:0 2px 6px rgba(0,0,0,.2)}.react-tags__suggestions li{padding:8px 10px}.react-tags__suggestions li:not(:last-child){border-bottom:1px solid var(--border-color)}.react-tags__suggestions li .mark,.react-tags__suggestions li mark{text-decoration:underline;background:none;font-weight:600}.react-tags__suggestions li:hover{cursor:pointer}.react-tags__suggestions li.is-active,.react-tags__suggestions li:hover{background-color:var(--active-color)}.react-tags__suggestions li.is-disabled{opacity:.5;cursor:auto}html:not([data-theme=dark]){--primary-color:#fff;--primary-color-alfa:hsla(0,0%,100%,0.5);--secondary-color:#f5f6fe;--text-color:#232323;--border-color:rgba(0,0,0,0.125);--active-color:#eee;--brand-color:#4696e5;--input-color:#fff;--input-disabled-color:#f5f6fe;--input-border-color:rgba(0,0,0,0.19);--input-text-color:#495057;--table-border-color:#dee2e6;--table-highlight-color:rgba(0,0,0,0.075);--btn-close-filter:initial}html[data-theme=dark]{--primary-color:#161b22;--primary-color-alfa:rgba(22,27,34,0.8);--secondary-color:#0f131a;--text-color:#c9d1d9;--border-color:hsla(0,0%,100%,0.15);--active-color:#0f131a;--brand-color:#0b2d4e;--input-color:#12161c;--input-disabled-color:#1a2028;--input-border-color:hsla(0,0%,100%,0.15);--input-text-color:#c9d1d9;--table-border-color:#393d43;--table-highlight-color:hsla(0,0%,100%,0.15);--btn-close-filter:invert(1)}@media(max-width:991px){.responsive-table__header{display:none}}@media(max-width:991px){.responsive-table.table>:not(:first-child){border:none}}@media(max-width:991px){.responsive-table__row{display:block;margin-bottom:10px;border-bottom:1px solid var(--border-color);border-top:2px solid var(--border-color);position:relative}}.responsive-table__cell.responsive-table__cell{vertical-align:middle!important}@media(max-width:991px){.responsive-table__cell.responsive-table__cell{display:block;width:100%;position:relative;padding:.5rem;font-size:.9rem}.responsive-table__cell.responsive-table__cell[data-th]:before{content:attr(data-th) ": ";font-weight:700}.responsive-table__cell.responsive-table__cell:last-child{position:absolute;top:3.5px;right:.5rem;width:auto;padding:0;border:none}}@media(max-width:991px){.responsive-table__cell.responsive-table__cell .btn-group-sm>.btn,.responsive-table__cell.responsive-table__cell .btn-sm{padding:.1rem .4rem;margin-top:.16rem}}.sticky-card-paginator{position:-webkit-sticky;position:sticky;bottom:0;background-color:var(--primary-color-alfa);padding:.75rem 0;border-top:1px solid var(--border-color)}*{outline:none!important}:root{scroll-behavior:auto}#root,body,html{height:100%;background:var(--secondary-color);color:var(--text-color)}.btn-link,a{text-decoration:none}.btn-link:hover,a:not(.nav-link):not(.navbar-brand):not(.page-link):not(.highlight-card):not(.btn):hover{text-decoration:underline}.bg-main{background-color:#4696e5!important}.card-body,.card-header,.list-group-item{background-color:initial}.card-footer{background-color:var(--primary-color-alfa)}.card{box-shadow:0 .125rem .25rem rgba(0,0,0,.075);border-color:var(--border-color)}.card,.dropdown-menu,.list-group,.modal-content,.page-item.disabled .page-link,.page-link{background-color:var(--primary-color)}.card-footer,.card-header,.dropdown-divider,.dropdown-menu,.list-group-item,.modal-content,.modal-footer,.modal-header,.page-item.disabled .page-link,.page-link,.page-link:hover,.table td,.table th,.table thead th,hr{border-color:var(--border-color)}.table-bordered,.table-bordered thead td,.table-bordered thead th{border-color:var(--table-border-color)}.page-link:focus,.page-link:hover{background-color:var(--secondary-color)}.page-item.active .page-link{background-color:var(--brand-color);border-color:var(--brand-color)}.pagination .page-link{cursor:pointer}@media(min-width:1200px){.container-xl{max-width:1320px}}@media(max-width:767px){.container-xl{padding-right:0;padding-left:0}}.btn-block{display:block;width:100%}.btn-outline-primary.active,.btn-outline-primary:active,.btn-outline-primary:hover,.btn-primary,.btn-primary.active,.btn-primary:active,.btn-primary:hover{color:#fff}.dropdown-item,.dropdown-item-text{color:var(--text-color)}.dropdown-item:not(:disabled){cursor:pointer}.dropdown-item.active:not(:disabled),.dropdown-item:active:not(:disabled),.dropdown-item:focus:not(:disabled),.dropdown-item:hover:not(:disabled){background-color:var(--active-color)!important;color:var(--text-color)!important}.dropdown-item--danger.dropdown-item--danger{color:#dc3545}.dropdown-item--danger.dropdown-item--danger.active,.dropdown-item--danger.dropdown-item--danger:active,.dropdown-item--danger.dropdown-item--danger:hover{color:#dc3545!important}.badge-main{color:#fff;background-color:var(--brand-color)}.close,.close:hover,.table,.table-hover>tbody>tr:hover>*,.table-hover>tbody>tr>*{color:var(--text-color)}.btn-close{-webkit-filter:var(--btn-close-filter);filter:var(--btn-close-filter)}.table-hover tbody tr:hover{background-color:var(--secondary-color)}.form-control,.form-control:focus{background-color:var(--primary-color);border-color:var(--input-border-color);color:var(--input-text-color)}.form-control.disabled,.form-control:disabled{background-color:var(--input-disabled-color);cursor:not-allowed}.card .form-control:not(:disabled),.card .form-control:not(:disabled):hover{background-color:var(--input-color)}.table-active,.table-active>td,.table-active>th{background-color:var(--table-highlight-color)!important}@media(max-width:767px){.navbar-brand{margin:0 auto!important}}.indivisible{white-space:nowrap}.pointer{cursor:pointer}.text-ellipsis{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.progress-bar{background-color:#4696e5}@media(max-width:575px){.btn-xs-block{width:100%;display:block}}@media(max-width:991px){.btn-md-block{width:100%;display:block}} -/*# sourceMappingURL=main.8f098ec9.chunk.css.map */ \ No newline at end of file +/*# sourceMappingURL=main.4159dfbb.chunk.css.map */ \ No newline at end of file diff --git a/feature/bootstrap5/static/css/main.8f098ec9.chunk.css.map b/feature/bootstrap5/static/css/main.4159dfbb.chunk.css.map similarity index 99% rename from feature/bootstrap5/static/css/main.8f098ec9.chunk.css.map rename to feature/bootstrap5/static/css/main.4159dfbb.chunk.css.map index 74c9c5c9..72fdbbca 100644 --- a/feature/bootstrap5/static/css/main.8f098ec9.chunk.css.map +++ b/feature/bootstrap5/static/css/main.4159dfbb.chunk.css.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://./src/common/MainHeader.scss","webpack://./src/servers/ServersListGroup.scss","webpack://./src/utils/base.scss","webpack://./src/utils/mixins/vertical-align.scss","webpack://./src/utils/mixins/thin-scroll.scss","webpack://./src/common/Home.scss","webpack://./src/common/NoMenuLayout.scss","webpack://./src/common/MenuLayout.scss","webpack://./src/common/AsideMenu.scss","webpack://./src/common/ShlinkVersionsContainer.scss","webpack://./src/utils/SearchField.scss","webpack://./src/tags/helpers/Tag.scss","webpack://./src/utils/DropdownBtn.scss","webpack://./src/utils/DateInput.scss","webpack://./src/short-urls/ShortUrlsFilteringBar.scss","webpack://./src/utils/OrderingDropdown.scss","webpack://./src/utils/CopyToClipboardIcon.scss","webpack://./src/short-urls/helpers/ShortUrlVisitsCount.scss","webpack://./src/short-urls/helpers/ShortUrlsRow.scss","webpack://./src/utils/DropdownBtnMenu.scss","webpack://./src/short-urls/helpers/CreateShortUrlResult.scss","webpack://./src/short-urls/ShortUrlsTable.scss","webpack://./src/short-urls/helpers/QrCodeModal.scss","webpack://./src/short-urls/UseExistingIfFoundInfoIcon.scss","webpack://./src/short-urls/ShortUrlForm.scss","webpack://./src/servers/helpers/ImportServersBtn.scss","webpack://./src/servers/helpers/ServerError.scss","webpack://./src/servers/helpers/HighlightCard.scss","webpack://./src/visits/helpers/MapModal.scss","webpack://./src/utils/mixins/fit-with-margin.scss","webpack://./src/visits/ShortUrlVisitsHeader.scss","webpack://./src/utils/NavPills.scss","webpack://./src/visits/charts/LineChartCard.scss","webpack://./src/common/SimplePaginator.scss","webpack://./src/visits/VisitsTable.scss","webpack://./src/utils/mixins/sticky-cell.scss","webpack://./src/visits/helpers/OpenMapModalBtn.scss","webpack://./src/visits/charts/DoughnutChartLegend.scss","webpack://./src/visits/charts/ChartCard.scss","webpack://./src/tags/helpers/TagBullet.scss","webpack://./src/tags/TagCard.scss","webpack://./src/tags/helpers/EditTagModal.scss","webpack://./src/tags/TagsTable.scss","webpack://./src/settings/UserInterfaceSettings.scss","webpack://./src/domains/DomainSelector.scss","webpack://./src/common/AppUpdateBanner.scss","webpack://./src/utils/mixins/horizontal-align.scss","webpack://./src/app/App.scss","webpack://./src/index.scss","webpack://./node_modules/bootstrap/scss/bootstrap.scss","webpack://./node_modules/bootstrap/scss/_root.scss","webpack://./node_modules/bootstrap/scss/_reboot.scss","webpack://./node_modules/bootstrap/scss/vendor/_rfs.scss","webpack://./node_modules/bootstrap/scss/_variables.scss","webpack://./node_modules/bootstrap/scss/mixins/_border-radius.scss","webpack://./node_modules/bootstrap/scss/_type.scss","webpack://./node_modules/bootstrap/scss/mixins/_lists.scss","webpack://./node_modules/bootstrap/scss/_images.scss","webpack://./node_modules/bootstrap/scss/mixins/_image.scss","webpack://./node_modules/bootstrap/scss/_containers.scss","webpack://./node_modules/bootstrap/scss/mixins/_container.scss","webpack://./node_modules/bootstrap/scss/mixins/_breakpoints.scss","webpack://./node_modules/bootstrap/scss/_grid.scss","webpack://./node_modules/bootstrap/scss/mixins/_grid.scss","webpack://./node_modules/bootstrap/scss/_tables.scss","webpack://./node_modules/bootstrap/scss/mixins/_table-variants.scss","webpack://./node_modules/bootstrap/scss/forms/_labels.scss","webpack://./node_modules/bootstrap/scss/forms/_form-text.scss","webpack://./node_modules/bootstrap/scss/forms/_form-control.scss","webpack://./node_modules/bootstrap/scss/mixins/_transition.scss","webpack://./node_modules/bootstrap/scss/mixins/_gradients.scss","webpack://./node_modules/bootstrap/scss/forms/_form-select.scss","webpack://./node_modules/bootstrap/scss/forms/_form-check.scss","webpack://./node_modules/bootstrap/scss/forms/_form-range.scss","webpack://./node_modules/bootstrap/scss/forms/_floating-labels.scss","webpack://./node_modules/bootstrap/scss/forms/_input-group.scss","webpack://./node_modules/bootstrap/scss/mixins/_forms.scss","webpack://./node_modules/bootstrap/scss/_buttons.scss","webpack://./node_modules/bootstrap/scss/mixins/_buttons.scss","webpack://./node_modules/bootstrap/scss/_transitions.scss","webpack://./node_modules/bootstrap/scss/_dropdown.scss","webpack://./node_modules/bootstrap/scss/mixins/_caret.scss","webpack://./node_modules/bootstrap/scss/_button-group.scss","webpack://./node_modules/bootstrap/scss/_nav.scss","webpack://./node_modules/bootstrap/scss/_navbar.scss","webpack://./node_modules/bootstrap/scss/_card.scss","webpack://./node_modules/bootstrap/scss/_accordion.scss","webpack://./node_modules/bootstrap/scss/_breadcrumb.scss","webpack://./node_modules/bootstrap/scss/_pagination.scss","webpack://./node_modules/bootstrap/scss/mixins/_pagination.scss","webpack://./node_modules/bootstrap/scss/_badge.scss","webpack://./node_modules/bootstrap/scss/_alert.scss","webpack://./node_modules/bootstrap/scss/mixins/_alert.scss","webpack://./node_modules/bootstrap/scss/_progress.scss","webpack://./node_modules/bootstrap/scss/_list-group.scss","webpack://./node_modules/bootstrap/scss/mixins/_list-group.scss","webpack://./node_modules/bootstrap/scss/_close.scss","webpack://./node_modules/bootstrap/scss/_toasts.scss","webpack://./node_modules/bootstrap/scss/_modal.scss","webpack://./node_modules/bootstrap/scss/mixins/_backdrop.scss","webpack://./node_modules/bootstrap/scss/_tooltip.scss","webpack://./node_modules/bootstrap/scss/mixins/_reset-text.scss","webpack://./node_modules/bootstrap/scss/_popover.scss","webpack://./node_modules/bootstrap/scss/_carousel.scss","webpack://./node_modules/bootstrap/scss/mixins/_clearfix.scss","webpack://./node_modules/bootstrap/scss/_spinners.scss","webpack://./node_modules/bootstrap/scss/_offcanvas.scss","webpack://./node_modules/bootstrap/scss/_placeholders.scss","webpack://./node_modules/bootstrap/scss/helpers/_colored-links.scss","webpack://./node_modules/bootstrap/scss/helpers/_ratio.scss","webpack://./node_modules/bootstrap/scss/helpers/_position.scss","webpack://./node_modules/bootstrap/scss/helpers/_stacks.scss","webpack://./node_modules/bootstrap/scss/helpers/_visually-hidden.scss","webpack://./node_modules/bootstrap/scss/mixins/_visually-hidden.scss","webpack://./node_modules/bootstrap/scss/helpers/_stretched-link.scss","webpack://./node_modules/bootstrap/scss/helpers/_text-truncation.scss","webpack://./node_modules/bootstrap/scss/mixins/_text-truncate.scss","webpack://./node_modules/bootstrap/scss/helpers/_vr.scss","webpack://./node_modules/bootstrap/scss/mixins/_utilities.scss","webpack://./node_modules/bootstrap/scss/utilities/_api.scss","webpack://./src/common/react-tag-autocomplete.scss","webpack://./src/theme/theme.scss","webpack://./src/utils/table/ResponsiveTable.scss","webpack://./src/utils/StickyCardPaginator.scss"],"names":[],"mappings":"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DAEE,2CAAA,CAGF,kKAKE,UArBa,CAsBb,wBzBxBW,CyByBX,oBzBzBW,CyB2BX,gMAKI,2CAAA,CAKN,sDAEE,azBvCW,CyBwCX,wBAAA,CDvDF,qBCmBA,azBJa,CyBKb,oBzBLa,CyBOb,2BACE,UATY,CAUZ,wBzBTW,CyBUX,oBzBVW,CyBab,iEAEE,0CAAA,CAGF,iLAKE,UArBa,CAsBb,wBzBxBW,CyByBX,oBzBzBW,CyB2BX,+MAKI,0CAAA,CAKN,4DAEE,azBvCW,CyBwCX,wBAAA,CDvDF,oBCmBA,azBJa,CyBKb,oBzBLa,CyBOb,0BACE,UATY,CAUZ,wBzBTW,CyBUX,oBzBVW,CyBab,+DAEE,0CAAA,CAGF,4KAKE,UArBa,CAsBb,wBzBxBW,CyByBX,oBzBzBW,CyB2BX,0MAKI,0CAAA,CAKN,0DAEE,azBvCW,CyBwCX,wBAAA,CDvDF,mBCmBA,azBJa,CyBKb,oBzBLa,CyBOb,yBACE,UATY,CAUZ,wBzBTW,CyBUX,oBzBVW,CyBab,6DAEE,4CAAA,CAGF,uKAKE,UArBa,CAsBb,wBzBxBW,CyByBX,oBzBzBW,CyB2BX,qMAKI,4CAAA,CAKN,wDAEE,azBvCW,CyBwCX,wBAAA,CDvDF,kBCmBA,azBJa,CyBKb,oBzBLa,CyBOb,wBACE,UATY,CAUZ,wBzBTW,CyBUX,oBzBVW,CyBab,2DAEE,yCAAA,CAGF,kKAKE,UArBa,CAsBb,wBzBxBW,CyByBX,oBzBzBW,CyB2BX,gMAKI,yCAAA,CAKN,sDAEE,azBvCW,CyBwCX,wBAAA,CD3CJ,UACE,exBigB4B,CwBhgB5B,a3EnEU,C2EoEV,yBxB6WwC,CwB3WxC,gBACE,axB4WsC,CwBpWxC,sCAEE,axB/EO,CwB0FX,2BCuBE,kBAAA,C1BsKI,iBALI,CE7QN,mBAAA,CuByFJ,2BCmBE,oBAAA,C1BsKI,iBALI,CE7QN,mBAAA,CyBnBJ,MVgBM,8BUfJ,CVmBI,sCUpBN,MVqBQ,eAAA,CAAA,CUlBN,iBACE,SAAA,CAMF,qBACE,YAAA,CAIJ,YACE,QAAA,CACA,eAAA,CVDI,2BUEJ,CVEI,sCULN,YVMQ,eAAA,CAAA,CUDN,gCACE,OAAA,CACA,WAAA,CVNE,0BUOF,CVHE,sCAAA,gCACE,eAAA,CAAA,CWpBR,sCAIE,iBAAA,CAGF,iBACE,kBAAA,CCqBE,uBACE,oBAAA,CACA,kB5BqgBwB,C4BpgBxB,qB5BmgBwB,C4BlgBxB,UAAA,CAhCJ,qBAAA,CACA,mCAAA,CACA,eAAA,CACA,kCAAA,CAqDE,6BACE,aAAA,CD3CN,eACE,iBAAA,CACA,Y3ByhCkC,C2BxhClC,YAAA,CACA,e3B+mCkC,C2B9mClC,eAAA,CACA,QAAA,C5B+QI,cALI,C4BxQR,a3BPS,C2BQT,eAAA,CACA,eAAA,CACA,qB3BnBS,C2BoBT,2BAAA,CACA,gCAAA,C1BVE,oBAAA,C0BcF,+BACE,QAAA,CACA,MAAA,CACA,kB3BkmCgC,C2BtlChC,qBACE,mBAAA,CAEA,qCACE,UAAA,CACA,MAAA,CAIJ,mBACE,iBAAA,CAEA,mCACE,OAAA,CACA,SAAA,CnBCJ,wBmBfA,wBACE,mBAAA,CAEA,wCACE,UAAA,CACA,MAAA,CAIJ,sBACE,iBAAA,CAEA,sCACE,OAAA,CACA,SAAA,CAAA,CnBCJ,wBmBfA,wBACE,mBAAA,CAEA,wCACE,UAAA,CACA,MAAA,CAIJ,sBACE,iBAAA,CAEA,sCACE,OAAA,CACA,SAAA,CAAA,CnBCJ,wBmBfA,wBACE,mBAAA,CAEA,wCACE,UAAA,CACA,MAAA,CAIJ,sBACE,iBAAA,CAEA,sCACE,OAAA,CACA,SAAA,CAAA,CnBCJ,yBmBfA,wBACE,mBAAA,CAEA,wCACE,UAAA,CACA,MAAA,CAIJ,sBACE,iBAAA,CAEA,sCACE,OAAA,CACA,SAAA,CAAA,CnBCJ,yBmBfA,yBACE,mBAAA,CAEA,yCACE,UAAA,CACA,MAAA,CAIJ,uBACE,iBAAA,CAEA,uCACE,OAAA,CACA,SAAA,CAAA,CAUN,uCACE,QAAA,CACA,WAAA,CACA,YAAA,CACA,qB3B0jCgC,C4BxmChC,+BACE,oBAAA,CACA,kB5BqgBwB,C4BpgBxB,qB5BmgBwB,C4BlgBxB,UAAA,CAzBJ,YAAA,CACA,mCAAA,CACA,wBAAA,CACA,kCAAA,CA8CE,qCACE,aAAA,CD0BJ,wCACE,KAAA,CACA,UAAA,CACA,SAAA,CACA,YAAA,CACA,mB3B4iCgC,C4BxmChC,gCACE,oBAAA,CACA,kB5BqgBwB,C4BpgBxB,qB5BmgBwB,C4BlgBxB,UAAA,CAlBJ,iCAAA,CACA,cAAA,CACA,oCAAA,CACA,sBAAA,CAuCE,sCACE,aAAA,CDoCF,gCACE,gBAAA,CAMJ,0CACE,KAAA,CACA,UAAA,CACA,SAAA,CACA,YAAA,CACA,oB3B2hCgC,C4BxmChC,kCACE,oBAAA,CACA,kB5BqgBwB,C4BpgBxB,qB5BmgBwB,C4BlgBxB,UAAA,CAYE,YAZF,CAeA,mCACE,oBAAA,CACA,mB5BkfsB,C4BjftB,qB5BgfsB,C4B/etB,UAAA,CA9BN,iCAAA,CACA,uBAAA,CACA,oCAAA,CAiCE,wCACE,aAAA,CDqDF,mCACE,gBAAA,CAON,kBACE,QAAA,CACA,cAAA,CACA,eAAA,CACA,oCAAA,CAMF,eACE,aAAA,CACA,UAAA,CACA,mBAAA,CACA,UAAA,CACA,e3Bwc4B,C2Bvc5B,a3BvHS,C2BwHT,kBAAA,CACA,oBAAA,CACA,kBAAA,CACA,wBAAA,CACA,QAAA,CAcA,0CAEE,a3Bs/BgC,CiB/oClC,wBjBMS,C2BwJT,4CAEE,U3B5JO,C2B6JP,oBAAA,CVjKF,wBpEQU,C8E6JV,gDAEE,a3B9JO,C2B+JP,mBAAA,CACA,wBAAA,CAMJ,oBACE,aAAA,CAIF,iBACE,aAAA,CACA,kB3Bq+BkC,C2Bp+BlC,eAAA,C5B0GI,iBALI,C4BnGR,a3B/KS,C2BgLT,kBAAA,CAIF,oBACE,aAAA,CACA,mBAAA,CACA,a3BpLS,C2BwLX,oBACE,a3B/LS,C2BgMT,wB3B3LS,C2B4LT,4B3B87BkC,C2B37BlC,mCACE,a3BrMO,C2BuMP,kFAEE,U3B5MK,CiBJT,oCjBsqCkC,C2Bl9BhC,oFAEE,U3BlNK,CiBJT,wBpEQU,C8EkNR,wFAEE,a3BnNK,C2BuNT,sCACE,4B3Bq6BgC,C2Bl6BlC,wCACE,a3B9NO,C2BiOT,qCACE,a3BhOO,C6BZX,+BAEE,iBAAA,CACA,mBAAA,CACA,qBAAA,CAEA,yCACE,iBAAA,CACA,aAAA,CAKF,kXAME,SAAA,CAKJ,aACE,YAAA,CACA,cAAA,CACA,0BAAA,CAEA,0BACE,UAAA,CAMF,0EAEE,gBAAA,CAIF,mG5BRE,yBAAA,CACA,4BAAA,C4BgBF,6G5BHE,wBAAA,CACA,2BAAA,C4BqBJ,uBACE,sBAAA,CACA,qBAAA,CAEA,wGAGE,aAAA,CAGF,yCACE,cAAA,CAIJ,yEACE,qBAAA,CACA,oBAAA,CAGF,yEACE,oBAAA,CACA,mBAAA,CAoBF,oBACE,qBAAA,CACA,sBAAA,CACA,sBAAA,CAEA,wDAEE,UAAA,CAGF,4FAEE,eAAA,CAIF,qH5BvFE,4BAAA,CACA,2BAAA,C4B2FF,oF5B1GE,wBAAA,CACA,yBAAA,C6BxBJ,KACE,YAAA,CACA,cAAA,CACA,cAAA,CACA,eAAA,CACA,eAAA,CAGF,UACE,aAAA,CACA,kBAAA,CAGA,ajFNU,CiFOV,oBAAA,CdHI,iGcIJ,CAAA,sCAPF,UdQQ,eAAA,CAAA,CcCN,gCAEE,a9BuasC,C8BlaxC,mBACE,a9BhBO,C8BiBP,mBAAA,CACA,cAAA,CAQJ,UACE,+BAAA,CAEA,oBACE,kBAAA,CACA,eAAA,CACA,4BAAA,C7BlBA,6BAAA,CACA,8BAAA,C6BoBA,oDAEE,oC9BmhC8B,C8BjhC9B,iBAAA,CAGF,6BACE,a9B3CK,C8B4CL,wBAAA,CACA,wBAAA,CAIJ,8DAEE,a9BlDO,C8BmDP,qB9B1DO,C8B2DP,iC9BsgCgC,C8BngClC,yBAEE,eAAA,C7B5CA,wBAAA,CACA,yBAAA,C6BuDF,qBACE,eAAA,CACA,QAAA,C7BnEA,oBAAA,C6BuEF,uDAEE,U9BpFO,CiBJT,wBpEQU,CiF2FV,wCAEE,aAAA,CACA,iBAAA,CAKF,kDAEE,YAAA,CACA,WAAA,CACA,iBAAA,CAMF,iEACE,UAAA,CAUF,uBACE,YAAA,CAEF,qBACE,aAAA,CCxHJ,QACE,iBAAA,CACA,YAAA,CACA,cAAA,CACA,kBAAA,CACA,6BAAA,CACA,iB/B8jCkC,C+B5jClC,oB/B4jCkC,C+BrjClC,2JACE,YAAA,CACA,iBAAA,CACA,kBAAA,CACA,6BAAA,CAoBJ,cACE,oB/BqiCkC,C+BpiClC,uB/BoiCkC,C+BniClC,iB/BoiCkC,CDzzB9B,iBALI,CgCpOR,oBAAA,CACA,kBAAA,CAaF,YACE,YAAA,CACA,qBAAA,CACA,cAAA,CACA,eAAA,CACA,eAAA,CAEA,sBACE,eAAA,CACA,cAAA,CAGF,2BACE,eAAA,CASJ,aACE,iB/By9BkC,C+Bx9BlC,oB/Bw9BkC,C+B58BpC,iBACE,eAAA,CACA,WAAA,CAGA,kBAAA,CAIF,gBACE,qBAAA,ChC6KI,iBALI,CgCtKR,aAAA,CACA,wBAAA,CACA,4BAAA,C9BzGE,oBAAA,CeHE,sCe8GJ,Cf1GI,sCemGN,gBflGQ,eAAA,CAAA,Ce2GN,sBACE,oBAAA,CAGF,sBACE,oBAAA,CACA,SAAA,CACA,uBAAA,CAMJ,qBACE,oBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,2BAAA,CACA,uBAAA,CACA,oBAAA,CAGF,mBACE,eAAA,CAAA,uCAAA,CACA,eAAA,CvB1FE,wBuBsGA,kBAEI,gBAAA,CACA,0BAAA,CAEA,8BACE,kBAAA,CAEA,6CACE,iBAAA,CAGF,wCACE,mB/Bq6BwB,C+Bp6BxB,kB/Bo6BwB,C+Bh6B5B,qCACE,gBAAA,CAGF,mCACE,sBAAA,CACA,eAAA,CAOF,sEACE,YAAA,CAGF,6BACE,gBAAA,CACA,QAAA,CACA,YAAA,CACA,WAAA,CACA,4BAAA,CACA,wBAAA,CACA,cAAA,CACA,aAAA,CfhMJ,eeiMI,CACA,sBAAA,CAAA,cAAA,CAEF,qEAEE,WAAA,CACA,YAAA,CACA,eAAA,CAGF,kCACE,YAAA,CACA,WAAA,CACA,SAAA,CACA,kBAAA,CAAA,CvBhKN,wBuBsGA,kBAEI,gBAAA,CACA,0BAAA,CAEA,8BACE,kBAAA,CAEA,6CACE,iBAAA,CAGF,wCACE,mB/Bq6BwB,C+Bp6BxB,kB/Bo6BwB,C+Bh6B5B,qCACE,gBAAA,CAGF,mCACE,sBAAA,CACA,eAAA,CAOF,sEACE,YAAA,CAGF,6BACE,gBAAA,CACA,QAAA,CACA,YAAA,CACA,WAAA,CACA,4BAAA,CACA,wBAAA,CACA,cAAA,CACA,aAAA,CfhMJ,eeiMI,CACA,sBAAA,CAAA,cAAA,CAEF,qEAEE,WAAA,CACA,YAAA,CACA,eAAA,CAGF,kCACE,YAAA,CACA,WAAA,CACA,SAAA,CACA,kBAAA,CAAA,CvBhKN,wBuBsGA,kBAEI,gBAAA,CACA,0BAAA,CAEA,8BACE,kBAAA,CAEA,6CACE,iBAAA,CAGF,wCACE,mB/Bq6BwB,C+Bp6BxB,kB/Bo6BwB,C+Bh6B5B,qCACE,gBAAA,CAGF,mCACE,sBAAA,CACA,eAAA,CAOF,sEACE,YAAA,CAGF,6BACE,gBAAA,CACA,QAAA,CACA,YAAA,CACA,WAAA,CACA,4BAAA,CACA,wBAAA,CACA,cAAA,CACA,aAAA,CfhMJ,eeiMI,CACA,sBAAA,CAAA,cAAA,CAEF,qEAEE,WAAA,CACA,YAAA,CACA,eAAA,CAGF,kCACE,YAAA,CACA,WAAA,CACA,SAAA,CACA,kBAAA,CAAA,CvBhKN,yBuBsGA,kBAEI,gBAAA,CACA,0BAAA,CAEA,8BACE,kBAAA,CAEA,6CACE,iBAAA,CAGF,wCACE,mB/Bq6BwB,C+Bp6BxB,kB/Bo6BwB,C+Bh6B5B,qCACE,gBAAA,CAGF,mCACE,sBAAA,CACA,eAAA,CAOF,sEACE,YAAA,CAGF,6BACE,gBAAA,CACA,QAAA,CACA,YAAA,CACA,WAAA,CACA,4BAAA,CACA,wBAAA,CACA,cAAA,CACA,aAAA,CfhMJ,eeiMI,CACA,sBAAA,CAAA,cAAA,CAEF,qEAEE,WAAA,CACA,YAAA,CACA,eAAA,CAGF,kCACE,YAAA,CACA,WAAA,CACA,SAAA,CACA,kBAAA,CAAA,CvBhKN,yBuBsGA,mBAEI,gBAAA,CACA,0BAAA,CAEA,+BACE,kBAAA,CAEA,8CACE,iBAAA,CAGF,yCACE,mB/Bq6BwB,C+Bp6BxB,kB/Bo6BwB,C+Bh6B5B,sCACE,gBAAA,CAGF,oCACE,sBAAA,CACA,eAAA,CAOF,wEACE,YAAA,CAGF,8BACE,gBAAA,CACA,QAAA,CACA,YAAA,CACA,WAAA,CACA,4BAAA,CACA,wBAAA,CACA,cAAA,CACA,aAAA,CfhMJ,eeiMI,CACA,sBAAA,CAAA,cAAA,CAEF,uEAEE,WAAA,CACA,YAAA,CACA,eAAA,CAGF,mCACE,YAAA,CACA,WAAA,CACA,SAAA,CACA,kBAAA,CAAA,CA1DN,eAEI,gBAAA,CACA,0BAAA,CAEA,2BACE,kBAAA,CAEA,0CACE,iBAAA,CAGF,qCACE,mB/Bq6BwB,C+Bp6BxB,kB/Bo6BwB,C+Bh6B5B,kCACE,gBAAA,CAGF,gCACE,sBAAA,CACA,eAAA,CAOF,gEACE,YAAA,CAGF,0BACE,gBAAA,CACA,QAAA,CACA,YAAA,CACA,WAAA,CACA,4BAAA,CACA,wBAAA,CACA,cAAA,CACA,aAAA,CfhMJ,eeiMI,CACA,sBAAA,CAAA,cAAA,CAEF,+DAEE,WAAA,CACA,YAAA,CACA,eAAA,CAGF,+BACE,YAAA,CACA,WAAA,CACA,SAAA,CACA,kBAAA,CAiBN,gGAEE,oB/Bg4B8B,C+B33BhC,oCACE,qB/Bw3B8B,C+Bt3B9B,oFAEE,oB/Bq3B4B,C+Bl3B9B,6CACE,oB/Bm3B4B,C+B/2BhC,qFAEE,oB/B42B8B,C+Bx2BlC,8BACE,qB/Bq2BgC,C+Bp2BhC,2B/By2BgC,C+Bt2BlC,mCACE,sQAAA,CAGF,2BACE,qB/B41BgC,C+B11BhC,mGAGE,oB/By1B8B,C+B/0BhC,6FAEE,U/B7RK,C+BkSP,mCACE,yB/B8zB8B,C+B5zB9B,kFAEE,yB/B2zB4B,C+BxzB9B,4CACE,yB/ByzB4B,C+BrzBhC,mFAEE,U/BjTK,C+BqTT,6BACE,yB/B2yBgC,C+B1yBhC,+B/B+yBgC,C+B5yBlC,kCACE,4QAAA,CAGF,0BACE,yB/BkyBgC,C+BjyBhC,gGAGE,U/BnUK,CgCJX,MACE,iBAAA,CACA,YAAA,CACA,qBAAA,CACA,WAAA,CAEA,oBAAA,CACA,qBhCHS,CgCIT,uBAAA,CACA,iCAAA,C/BME,oBAAA,C+BFF,SACE,cAAA,CACA,aAAA,CAGF,kBACE,kBAAA,CACA,qBAAA,CAEA,8BACE,kBAAA,C/BCF,yCAAA,CACA,0CAAA,C+BEA,6BACE,qBAAA,C/BUF,6CAAA,CACA,4CAAA,C+BJF,8DAEE,YAAA,CAIJ,WAGE,aAAA,CACA,YAAA,CAIF,YACE,mBhCirCkC,CgC9qCpC,eACE,kBACA,CAGF,qCAHE,eAIA,CAQA,sBACE,gBhC8SK,CgCtST,aACE,kBAAA,CACA,eAAA,CAEA,gChC2pCkC,CgC1pClC,wCAAA,CAEA,yB/BpEE,uDAAA,C+ByEJ,aACE,kBAAA,CAEA,gChCgpCkC,CgC/oClC,qCAAA,CAEA,wB/B/EE,uDAAA,C+ByFJ,kBAEE,oBAAA,CAEA,eAAA,CAUF,qCAbE,mBAAA,CAEA,kBAaA,CAIF,kBACE,iBAAA,CACA,KAAA,CACA,OAAA,CACA,QAAA,CACA,MAAA,CACA,YhCgPO,CCnWL,gCAAA,C+BuHJ,yCAGE,UAAA,CAGF,wB/BpHI,yCAAA,CACA,0CAAA,C+BwHJ,2B/B3GI,6CAAA,CACA,4CAAA,C+BuHF,kBACE,oBhCklCgC,CQtrChC,wBwBgGJ,YAQI,YAAA,CACA,kBAAA,CAGA,kBAEE,QAAA,CACA,eAAA,CAEA,wBACE,aAAA,CACA,aAAA,CAKA,mC/BpJJ,yBAAA,CACA,4BAAA,C+BsJM,iGAGE,yBAAA,CAEF,oGAGE,4BAAA,CAIJ,oC/BrJJ,wBAAA,CACA,2BAAA,C+BuJM,mGAGE,wBAAA,CAEF,sGAGE,2BAAA,CAAA,CC7MZ,kBACE,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,oBAAA,ClC4RI,cALI,CkCrRR,ajCMS,CiCLT,eAAA,CACA,qBjCLS,CiCMT,QAAA,ChCKE,eAAA,CgCHF,oBAAA,CAAA,qJACA,CjBGI,sCiBhBN,kBjBiBQ,eAAA,CAAA,CiBFN,kCACE,ajCyvCsC,CiCxvCtC,wBjCuvCsC,CiCtvCtC,0CAAA,CAEA,wCACE,uSAAA,CACA,iCjC4vCoC,CiC5vCpC,yBjC4vCoC,CiCvvCxC,wBACE,aAAA,CACA,ajCivCsC,CiChvCtC,cjCgvCsC,CiC/uCtC,gBAAA,CACA,UAAA,CACA,uSAAA,CACA,2BAAA,CACA,uBjC2uCsC,CgBlwCpC,4CiBwBF,CjBxBE,oCiBwBF,CjBxBE,sEiBwBF,CjBpBE,sCiBWJ,wBjBVM,eAAA,CAAA,CiBsBN,wBACE,SAAA,CAGF,wBACE,SAAA,CACA,oBjCizBoC,CiChzBpC,SAAA,CACA,4CjC8rB4B,CiC1rBhC,kBACE,eAAA,CAGF,gBACE,qBjCpDS,CiCqDT,iCAAA,CAEA,8BhCnCE,6BAAA,CACA,8BAAA,CgCqCA,gDhCtCA,yCAAA,CACA,0CAAA,CgC0CF,oCACE,YAAA,CAIF,6BhClCE,iCAAA,CACA,gCAAA,CgCqCE,yDhCtCF,6CAAA,CACA,4CAAA,CgC0CA,iDhC3CA,iCAAA,CACA,gCAAA,CgCgDJ,gBACE,oBAAA,CASA,qCACE,cAAA,CAGF,iCACE,cAAA,CACA,aAAA,ChCxFA,eAAA,CgC2FA,6CAAA,YAAA,CACA,4CAAA,eAAA,CAEA,mDhC9FA,eAAA,CiCnBJ,YACE,YAAA,CACA,cAAA,CACA,SAAA,CACA,kBlCw/CkC,CkCt/ClC,eAAA,CAOA,kCACE,kBlC6+CgC,CkC3+ChC,yCACE,UAAA,CACA,mBlCy+C8B,CkCx+C9B,alCLK,CkCML,WAAA,CAAA,wCAAA,CAIJ,wBACE,alCXO,CmCdX,YACE,YAAA,ChCGA,cAAA,CACA,eAAA,CAAA,WgCCA,iBAAA,CACA,aAAA,CACA,atFIU,CsFHV,oBAAA,CACA,qBnCFS,CmCGT,wBAAA,CnBKI,6HmBJJ,CnBQI,sCmBfN,WnBgBQ,eAAA,CAAA,CmBPN,iBACE,SAAA,CAIA,oBnCRO,CmCWT,kCANE,anC+asC,CmC7atC,wBnC+tB4B,CmC3tB9B,iBACE,SAAA,CAGA,SnC4qCgC,CmC3qChC,4CnCstB4B,CmCjtB9B,wCACE,gBnC+pCgC,CmC5pClC,6BACE,SAAA,CACA,UnC9BO,CiBJT,wBpEQU,CsF4BR,oBtF5BQ,CsF+BV,+BACE,anC9BO,CmC+BP,mBAAA,CACA,qBnCtCO,CmCuCP,oBnCpCO,CoCPT,WACE,sBAAA,CAOI,kCnCqCJ,6BAAA,CACA,gCAAA,CmChCI,iCnCiBJ,8BAAA,CACA,iCAAA,CmChCF,0BACE,qBAAA,CrCgSE,iBALI,CqCpRF,iDnCqCJ,4BAAA,CACA,+BAAA,CmChCI,gDnCiBJ,6BAAA,CACA,gCAAA,CmChCF,0BACE,oBAAA,CrCgSE,iBALI,CqCpRF,iDnCqCJ,4BAAA,CACA,+BAAA,CmChCI,gDnCiBJ,6BAAA,CACA,gCAAA,CoC/BJ,OACE,oBAAA,CACA,mBAAA,CtC8RI,eALI,CsCvRR,erCukB4B,CqCtkB5B,aAAA,CACA,UrCHS,CqCIT,iBAAA,CACA,kBAAA,CACA,sBAAA,CpCKE,oBAAA,CAAA,aoCCA,YAAA,CAKJ,YACE,iBAAA,CACA,QAAA,CCvBF,OACE,iBAAA,CACA,YAAA,CACA,kBtCk6C8B,CsCj6C9B,4BAAA,CrCWE,oBAAA,CqCNJ,eAEE,aAAA,CAIF,YACE,etC4jB4B,CsCpjB9B,mBACE,kBtCm5C8B,CsCh5C9B,8BACE,iBAAA,CACA,KAAA,CACA,OAAA,CACA,SAAA,CACA,oBAAA,CAeF,eClDA,aD8Cc,CrB5Cd,wBqB0CmB,CC1CnB,oBD2Ce,CCzCf,2BACE,aAAA,CD6CF,iBClDA,aD8Cc,CrB5Cd,wBqB0CmB,CC1CnB,oBD2Ce,CCzCf,6BACE,aAAA,CD6CF,eClDA,aD8Cc,CrB5Cd,wBqB0CmB,CC1CnB,oBD2Ce,CCzCf,2BACE,aAAA,CD6CF,YClDA,aDgDgB,CrB9ChB,wBqB0CmB,CC1CnB,oBD2Ce,CCzCf,wBACE,aAAA,CD6CF,eClDA,aDgDgB,CrB9ChB,wBqB0CmB,CC1CnB,oBD2Ce,CCzCf,2BACE,aAAA,CD6CF,cClDA,aD8Cc,CrB5Cd,wBqB0CmB,CC1CnB,oBD2Ce,CCzCf,0BACE,aAAA,CD6CF,aClDA,aDgDgB,CrB9ChB,wBqB0CmB,CC1CnB,oBD2Ce,CCzCf,yBACE,aAAA,CD6CF,YClDA,aD8Cc,CrB5Cd,wBqB0CmB,CC1CnB,oBD2Ce,CCzCf,wBACE,aAAA,CCHF,wCACE,GAAA,0BxCk7CgC,CAAA,CwCn7ClC,gCACE,GAAA,0BxCk7CgC,CAAA,CwC76CpC,UAEE,WxC26CkC,CDlpC9B,gBALI,CyCjRR,wBxCLS,CCSP,oBAAA,CuCCJ,wBATE,YAAA,CAEA,eAgBA,CATF,cAEE,qBAAA,CACA,sBAAA,CAEA,UxCjBS,CwCkBT,iBAAA,CACA,kBAAA,CxBXI,yBwBaJ,CxBTI,sCAAA,cACE,eAAA,CAAA,CwBWR,sBvBYE,qKAAA,CuBVA,yBAAA,CAIA,uBACE,yDAAA,CAAA,iDAAA,CAGE,sCAJJ,uBAKM,sBAAA,CAAA,cAAA,CAAA,CCvCR,YACE,YAAA,CACA,qBAAA,CAGA,cAAA,CACA,eAAA,CxCSE,oBAAA,CwCLJ,qBACE,oBAAA,CACA,qBAAA,CAEA,+BAEE,kCAAA,CACA,yBAAA,CAUJ,wBACE,UAAA,CACA,azClBS,CyCmBT,kBAAA,CAGA,4DAEE,SAAA,CACA,azCzBO,CyC0BP,oBAAA,CACA,wBzCjCO,CyCoCT,+BACE,azC7BO,CyC8BP,wBzCrCO,CyC8CX,iBACE,iBAAA,CACA,aAAA,CACA,kBAAA,CACA,azC3CS,CyC4CT,oBAAA,CACA,qBzCtDS,CyCuDT,iCAAA,CAEA,6BxCrCE,8BAAA,CACA,+BAAA,CwCwCF,4BxC3BE,kCAAA,CACA,iCAAA,CwC8BF,oDAEE,azC7DO,CyC8DP,mBAAA,CACA,qBzCrEO,CyCyET,wBACE,SAAA,CACA,UzC3EO,CyC4EP,wB5FxEQ,C4FyER,oB5FzEQ,C4F4EV,kCACE,kBAAA,CAEA,yCACE,eAAA,CACA,oBzCwawB,CyC1Z1B,uBACE,kBAAA,CAGE,oDxCrCJ,gCAAA,CAZA,yBAAA,CwCsDI,mDxCtDJ,8BAAA,CAYA,2BAAA,CwC+CI,+CACE,YAAA,CAGF,yDACE,oBzCuYoB,CyCtYpB,mBAAA,CAEA,gEACE,gBAAA,CACA,qBzCkYkB,CQtc1B,wBiC4CA,0BACE,kBAAA,CAGE,uDxCrCJ,gCAAA,CAZA,yBAAA,CwCsDI,sDxCtDJ,8BAAA,CAYA,2BAAA,CwC+CI,kDACE,YAAA,CAGF,4DACE,oBzCuYoB,CyCtYpB,mBAAA,CAEA,mEACE,gBAAA,CACA,qBzCkYkB,CAAA,CQtc1B,wBiC4CA,0BACE,kBAAA,CAGE,uDxCrCJ,gCAAA,CAZA,yBAAA,CwCsDI,sDxCtDJ,8BAAA,CAYA,2BAAA,CwC+CI,kDACE,YAAA,CAGF,4DACE,oBzCuYoB,CyCtYpB,mBAAA,CAEA,mEACE,gBAAA,CACA,qBzCkYkB,CAAA,CQtc1B,wBiC4CA,0BACE,kBAAA,CAGE,uDxCrCJ,gCAAA,CAZA,yBAAA,CwCsDI,sDxCtDJ,8BAAA,CAYA,2BAAA,CwC+CI,kDACE,YAAA,CAGF,4DACE,oBzCuYoB,CyCtYpB,mBAAA,CAEA,mEACE,gBAAA,CACA,qBzCkYkB,CAAA,CQtc1B,yBiC4CA,0BACE,kBAAA,CAGE,uDxCrCJ,gCAAA,CAZA,yBAAA,CwCsDI,sDxCtDJ,8BAAA,CAYA,2BAAA,CwC+CI,kDACE,YAAA,CAGF,4DACE,oBzCuYoB,CyCtYpB,mBAAA,CAEA,mEACE,gBAAA,CACA,qBzCkYkB,CAAA,CQtc1B,yBiC4CA,2BACE,kBAAA,CAGE,wDxCrCJ,gCAAA,CAZA,yBAAA,CwCsDI,uDxCtDJ,8BAAA,CAYA,2BAAA,CwC+CI,mDACE,YAAA,CAGF,6DACE,oBzCuYoB,CyCtYpB,mBAAA,CAEA,oEACE,gBAAA,CACA,qBzCkYkB,CAAA,CyCpX9B,kBxC9HI,eAAA,CwCiIF,mCACE,oBAAA,CAEA,8CACE,qBAAA,CCpJJ,yBACE,aDiKyB,CChKzB,wBD+JsB,CC5JpB,4GAEE,aD2JqB,CC1JrB,wBAAA,CAGF,uDACE,U1CRG,C0CSH,wBDqJqB,CCpJrB,oBDoJqB,CClK3B,2BACE,aDiKyB,CChKzB,wBD+JsB,CC5JpB,gHAEE,aD2JqB,CC1JrB,wBAAA,CAGF,yDACE,U1CRG,C0CSH,wBDqJqB,CCpJrB,oBDoJqB,CClK3B,yBACE,aDiKyB,CChKzB,wBD+JsB,CC5JpB,4GAEE,aD2JqB,CC1JrB,wBAAA,CAGF,uDACE,U1CRG,C0CSH,wBDqJqB,CCpJrB,oBDoJqB,CClK3B,sBACE,aDmK2B,CClK3B,wBD+JsB,CC5JpB,sGAEE,aD6JuB,CC5JvB,wBAAA,CAGF,oDACE,U1CRG,C0CSH,wBDuJuB,CCtJvB,oBDsJuB,CCpK7B,yBACE,aDmK2B,CClK3B,wBD+JsB,CC5JpB,4GAEE,aD6JuB,CC5JvB,wBAAA,CAGF,uDACE,U1CRG,C0CSH,wBDuJuB,CCtJvB,oBDsJuB,CCpK7B,wBACE,aDiKyB,CChKzB,wBD+JsB,CC5JpB,0GAE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","file":"main.8f098ec9.chunk.css","sourcesContent":["@import '../utils/base';\n\n.main-header.main-header {\n color: white;\n background-color: var(--brand-color) !important;\n\n .navbar-brand {\n color: inherit !important;\n }\n}\n\n.main-header__brand-logo {\n width: 26px;\n margin-right: 5px;\n}\n\n.main-header__toggle-icon {\n width: 20px;\n transition: transform 300ms;\n}\n\n.main-header__toggle-icon--opened {\n transform: rotate(180deg);\n}\n","@import '../utils/base';\n@import '../utils/mixins/vertical-align';\n@import '../utils/mixins/thin-scroll';\n\n.servers-list__list-group.servers-list__list-group {\n width: 100%;\n}\n\n.servers-list__list-group:not(.servers-list__list-group--embedded) {\n max-width: 400px;\n box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075);\n}\n\n.servers-list__server-item.servers-list__server-item {\n text-align: left;\n position: relative;\n padding: .75rem 2.5rem .75rem 1rem;\n}\n\n.servers-list__server-item:not(:hover) {\n color: $mainColor;\n}\n\n.servers-list__server-item:hover {\n background-color: var(--secondary-color);\n}\n\n.servers-list__server-item-icon {\n @include vertical-align();\n\n right: 1rem;\n}\n\n.servers-list__list-group--embedded.servers-list__list-group--embedded {\n border-radius: 0;\n border-top: 1px solid var(--border-color);\n\n @media (min-width: $mdMin) {\n max-height: 220px;\n overflow-x: auto;\n\n @include thin-scroll();\n }\n\n .servers-list__server-item {\n border: none;\n border-bottom: 1px solid var(--border-color);\n }\n}\n","// Breakpoints\n$xsMax: 575px;\n$smMin: 576px;\n$smMax: 767px;\n$mdMin: 768px;\n$mdMax: 991px;\n$lgMin: 992px;\n$lgMax: 1199px;\n$xlgMin: 1200px;\n$responsiveTableBreakpoint: $mdMax;\n\n// Colors\n$mainColor: #4696e5;\n$lightColor: #f5f6fe;\n$lightGrey: #eeeeee;\n$dangerColor: #dc3545;\n$mediumGrey: #dee2e6;\n$textPlaceholder: #6c757d;\n\n// Misc\n$headerHeight: 56px;\n$asideMenuWidth: 260px;\n$footer-height: 2.3rem;\n$footer-margin: .8rem;\n\n// Bootstrap overwrites\n$primary: $mainColor;\n","@mixin vertical-align($extraTransforms: null) {\n position: absolute;\n top: 50%;\n transform: translateY(-50%) $extraTransforms;\n}\n","@mixin thin-scroll() {\n /* Forefox scrollbar */\n scrollbar-color: rgba(0, 0, 0, .2) #f5f5f5;\n scrollbar-width: thin;\n\n /* Chrome webkit scrollbar */\n &::-webkit-scrollbar {\n width: 6px;\n background-color: #f5f5f5;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, .2);\n border-radius: .5rem;\n }\n}\n","@import '../utils/base';\n@import '../utils/mixins/vertical-align';\n\n$mainCardWidth: 720px;\n$totalColumns: 12;\n$logoColumns: 5;\n\n.home {\n position: relative;\n padding-top: 15px;\n width: 100%;\n\n @media (min-width: $mdMin) {\n padding-top: 0;\n height: calc(100vh - #{$headerHeight} - #{($footer-height + $footer-margin)});\n }\n}\n\n.home__logo-wrapper {\n padding: 1.5rem !important;\n height: 100% !important;\n min-height: 300px;\n}\n\n.home__logo {\n @include vertical-align();\n\n width: calc(#{$mainCardWidth / $totalColumns * $logoColumns} - 3rem);\n}\n\n.home__main-card {\n margin: 0 auto;\n max-width: $mainCardWidth;\n\n @media (min-width: $mdMin) {\n @include vertical-align();\n }\n}\n\n.home__title-wrapper {\n padding: 1.5rem !important;\n border-bottom: 1px solid var(--border-color);\n}\n\n.home__title {\n text-align: center;\n font-size: 1.75rem;\n margin: 0;\n\n @media (min-width: $mdMin) {\n font-size: 2.2rem;\n }\n}\n\n.home__servers-container {\n @media (min-width: $mdMin) {\n border-left: 1px solid var(--border-color);\n }\n}\n","@import '../utils/base';\n\n.no-menu-wrapper {\n padding: 15px 0 0;\n\n @media (min-width: $mdMin) {\n padding: 30px 20px 20px;\n }\n}\n","@import '../utils/base';\n\n.menu-layout__swipeable {\n height: 100%;\n}\n\n.menu-layout__swipeable-inner {\n height: 100%;\n}\n\n.menu-layout__burger-icon {\n display: none;\n transition: color 300ms;\n position: fixed;\n top: 18px;\n z-index: 1035;\n font-size: 1.5rem;\n cursor: pointer;\n color: rgba(255, 255, 255, .5);\n\n @media (max-width: $smMax) {\n display: inline-block;\n }\n}\n\n.menu-layout__burger-icon--active {\n color: white;\n}\n\n.menu-layout__container.menu-layout__container {\n padding: 20px 0 0;\n min-height: 100%;\n\n @media (min-width: $mdMin) {\n padding: 30px 0 0 $asideMenuWidth;\n }\n}\n","@import '../utils/base';\n@import '../utils/mixins/vertical-align';\n\n.aside-menu {\n width: $asideMenuWidth;\n background-color: var(--primary-color);\n box-shadow: rgba(0, 0, 0, .05) 0 8px 15px;\n position: fixed !important;\n padding-top: 13px;\n padding-bottom: 10px;\n top: $headerHeight;\n bottom: 0;\n left: 0;\n display: block;\n z-index: 1010;\n overflow-x: hidden;\n overflow-y: auto;\n\n @media (min-width: $mdMin) {\n padding: 30px 15px 15px;\n }\n\n @media (max-width: $smMax) {\n transition: left 300ms;\n top: $headerHeight - 3px;\n box-shadow: -10px 0 50px 11px rgba(0, 0, 0, .55);\n }\n}\n\n.aside-menu--hidden {\n @media (max-width: $smMax) {\n left: -($asideMenuWidth + 35px);\n }\n}\n\n.aside-menu__nav {\n height: 100%;\n}\n\n.aside-menu__item {\n padding: 10px 20px;\n margin: 0 -15px;\n text-decoration: none !important;\n cursor: pointer;\n\n @media (max-width: $smMax) {\n margin: 0;\n }\n}\n\n.aside-menu__item:hover {\n background-color: var(--secondary-color);\n}\n\n.aside-menu__item--selected,\n.aside-menu__item--selected:hover {\n color: #ffffff;\n background-color: var(--brand-color);\n}\n\n.aside-menu__item--divider {\n border-bottom: 1px solid #eeeeee;\n margin: 20px 0;\n}\n\n.aside-menu__item--danger {\n color: $dangerColor;\n}\n\n.aside-menu__item--push {\n margin-top: auto;\n}\n\n.aside-menu__item--danger:hover {\n color: #ffffff;\n background-color: $dangerColor;\n}\n\n.aside-menu__item-text {\n margin-left: 8px;\n}\n","@import '../utils/base';\n\n.shlink-versions-container--with-server {\n margin-left: 0;\n\n @media (min-width: $mdMin) {\n margin-left: $asideMenuWidth;\n }\n}\n","@import '../utils/mixins/vertical-align';\n\n.search-field {\n position: relative;\n\n &:focus-within {\n z-index: 1;\n }\n}\n\n.search-field__input.search-field__input {\n padding-left: 40px;\n padding-right: 40px;\n}\n\n.search-field__input--no-border.search-field__input--no-border {\n border: none;\n border-radius: 0;\n}\n\n.search-field__icon {\n @include vertical-align();\n\n left: 15px;\n color: #707581;\n}\n\n.search-field__close {\n @include vertical-align();\n\n right: 15px;\n cursor: pointer;\n}\n",".tag {\n color: #fff;\n}\n\n.tag--light-bg {\n color: #222 !important;\n}\n\n.tag:not(:last-child) {\n margin-right: 3px;\n}\n\n.tag__close-selected-tag.tag__close-selected-tag {\n font-size: inherit;\n color: inherit;\n opacity: 1;\n cursor: pointer;\n margin-left: 5px;\n}\n\n.tag__close-selected-tag.tag__close-selected-tag:hover {\n color: inherit !important;\n opacity: 1 !important;\n}\n","/* stylelint-disable no-descending-specificity */\n\n@import '../utils/mixins/vertical-align';\n\n.dropdown-btn__toggle.dropdown-btn__toggle,\n.dropdown-btn__toggle.dropdown-btn__toggle:not(:disabled):not(.disabled).active,\n.dropdown-btn__toggle.dropdown-btn__toggle:not(:disabled):not(.disabled):active,\n.dropdown-btn__toggle.dropdown-btn__toggle:not(:disabled):not(.disabled):focus,\n.dropdown-btn__toggle.dropdown-btn__toggle:not(:disabled):not(.disabled):hover,\n.show > .dropdown-btn__toggle.dropdown-btn__toggle.dropdown-toggle {\n text-align: left;\n color: var(--input-text-color);\n background-color: var(--primary-color);\n border-color: var(--input-border-color);\n}\n\n.card .dropdown-btn__toggle.dropdown-btn__toggle,\n.card .dropdown-btn__toggle.dropdown-btn__toggle:not(:disabled):not(.disabled).active,\n.card .dropdown-btn__toggle.dropdown-btn__toggle:not(:disabled):not(.disabled):active,\n.card .dropdown-btn__toggle.dropdown-btn__toggle:not(:disabled):not(.disabled):focus,\n.card .dropdown-btn__toggle.dropdown-btn__toggle:not(:disabled):not(.disabled):hover,\n.show > .card .dropdown-btn__toggle.dropdown-btn__toggle.dropdown-toggle {\n background-color: var(--input-color);\n}\n\n.dropdown-btn__toggle.dropdown-btn__toggle.disabled,\n.dropdown-btn__toggle.dropdown-btn__toggle:disabled {\n background-color: var(--input-disabled-color);\n}\n\n.dropdown-btn__toggle.dropdown-btn__toggle:after {\n @include vertical-align();\n\n right: .75rem;\n}\n","@import './mixins/vertical-align';\n@import './base';\n\n.date-input-container {\n position: relative;\n}\n\n.date-input-container__input {\n padding-right: 35px !important;\n}\n\n.date-input-container__input:not(:disabled) {\n background-color: var(--primary-color) !important;\n}\n\n.card .date-input-container__input:not(:disabled),\n.dropdown .date-input-container__input:not(:disabled) {\n background-color: var(--input-color) !important;\n}\n\n.date-input-container__icon {\n @include vertical-align();\n\n right: .75rem;\n cursor: pointer;\n}\n\n.react-datepicker__close-icon.react-datepicker__close-icon {\n @include vertical-align();\n\n right: 0;\n}\n\n.react-datepicker__close-icon.react-datepicker__close-icon:after {\n right: .75rem;\n line-height: 11px;\n background-color: #333333;\n font-size: 14px;\n}\n\n.react-datepicker__input-container,\n.react-datepicker-wrapper {\n display: block !important;\n}\n\n.react-datepicker__day--keyboard-selected {\n background-color: $mainColor;\n\n &:hover {\n background-color: darken($mainColor, 12%);\n }\n}\n\n.react-datepicker.react-datepicker {\n background-color: var(--primary-color);\n color: var(--text-color);\n border-color: var(--border-color);\n}\n\n.react-datepicker__header.react-datepicker__header {\n background-color: var(--secondary-color);\n border-color: var(--border-color);\n}\n\n.react-datepicker__current-month.react-datepicker__current-month,\n.react-datepicker-time__header.react-datepicker-time__header,\n.react-datepicker-year-header.react-datepicker-year-header,\n.react-datepicker__day-name.react-datepicker__day-name,\n.react-datepicker__day:not(:hover).react-datepicker__day:not(:hover),\n.react-datepicker__time-name.react-datepicker__time-name {\n color: inherit;\n}\n\n.react-datepicker__day--disabled.react-datepicker__day--disabled {\n cursor: default;\n color: var(--border-color) !important;\n}\n\n.react-datepicker__day--keyboard-selected.react-datepicker__day--keyboard-selected,\n.react-datepicker__month-text--keyboard-selected.react-datepicker__month-text--keyboard-selected,\n.react-datepicker__quarter-text--keyboard-selected.react-datepicker__quarter-text--keyboard-selected,\n.react-datepicker__year-text--keyboard-selected.react-datepicker__year-text--keyboard-selected {\n background-color: var(--brand-color) !important;\n color: white !important;\n}\n\n.react-datepicker-popper.react-datepicker-popper {\n z-index: 2;\n\n &[data-placement^='top'] .react-datepicker__triangle.react-datepicker__triangle {\n border-top-color: var(--primary-color);\n border-bottom-color: var(--border-color);\n\n &::before {\n border-top-color: var(--border-color);\n }\n }\n\n &[data-placement^='bottom'] .react-datepicker__triangle.react-datepicker__triangle {\n border-top-color: var(--border-color);\n border-bottom-color: var(--secondary-color);\n\n &::before {\n border-bottom-color: var(--border-color);\n }\n }\n}\n",".short-urls-filtering-bar__tags-icon {\n vertical-align: bottom;\n}\n",".ordering-dropdown__menu--link.ordering-dropdown__menu--link {\n min-width: 11rem;\n}\n\n.ordering-dropdown__sort-icon {\n margin: 3.5px 0 0;\n float: right;\n}\n",".copy-to-clipboard-icon {\n cursor: pointer;\n font-size: 1.2rem;\n}\n",".short-urls-visits-count__max-visits-control {\n cursor: help;\n}\n\n.short-url-visits-count__amount {\n transition: transform .3s ease;\n display: inline-block;\n}\n\n.short-url-visits-count__amount--big {\n transform: scale(1.5);\n}\n","@import '../../utils/base';\n@import '../../utils/mixins/vertical-align';\n\n.short-urls-row__cell.short-urls-row__cell {\n vertical-align: middle !important;\n}\n\n.short-urls-row__cell--break {\n word-break: break-all;\n}\n\n.short-urls-row__cell--relative {\n position: relative;\n}\n\n.short-urls-row__copy-hint {\n @include vertical-align(translateX(10px));\n\n box-shadow: 0 3px 15px rgba(0, 0, 0, .25);\n\n @media (max-width: $responsiveTableBreakpoint) {\n @include vertical-align(translateX(calc(-100% - 20px)));\n }\n}\n",".dropdown-btn-menu__dropdown-toggle:after {\n display: none !important;\n}\n",".create-short-url-result__copy-btn {\n margin-left: 10px;\n vertical-align: inherit;\n}\n",".short-urls-table__header-cell--with-action {\n cursor: pointer;\n}\n",".qr-code-modal__img {\n max-width: 100%;\n box-shadow: 0 0 .25rem rgb(0 0 0 / .2);\n}\n",".use-existing-if-found-info-icon__modal-quote {\n margin-bottom: 0;\n padding: 10px 15px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n background-color: #f9f9f9;\n}\n","@import '../utils/base';\n\n.short-url-form p:last-child {\n margin-bottom: 0;\n}\n\n.short-url-form .card {\n height: 100%;\n}\n",".import-servers-btn__csv-select {\n position: absolute;\n left: -9999px;\n top: -9999px;\n}\n","@import '../../utils/base';\n\n.server-error__container {\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.server-error__delete-btn {\n color: $dangerColor;\n cursor: pointer;\n}\n\n.server-error__delete-btn:hover {\n text-decoration: underline;\n}\n","@import '../../utils/base';\n\n.highlight-card.highlight-card {\n text-align: center;\n border-top: 3px solid var(--brand-color);\n color: inherit;\n text-decoration: none;\n}\n\n.highlight-card__link-icon {\n position: absolute;\n right: 5px;\n bottom: 5px;\n opacity: 0.1;\n transform: rotate(-45deg);\n}\n\n.highlight-card__title {\n text-transform: uppercase;\n color: $textPlaceholder;\n}\n","@import '../../utils/base';\n@import '../../utils/mixins/fit-with-margin';\n\n.map-modal__modal.map-modal__modal {\n @media (min-width: $mdMin) {\n $margin: 20px;\n\n @include fit-with-margin($margin);\n }\n\n @media (max-width: $smMax) {\n $margin: 10px;\n\n @include fit-with-margin($margin);\n }\n}\n\n.map-modal__modal-content.map-modal__modal-content {\n height: 100%;\n}\n\n.map-modal__modal-title.map-modal__modal-title {\n position: absolute;\n width: 100%;\n z-index: 1001;\n padding: .5rem 1rem 1rem;\n margin: 0;\n color: #fff;\n background: linear-gradient(rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));\n}\n\n.map-modal__modal-body.map-modal__modal-body {\n padding: 0;\n display: flex;\n overflow: hidden;\n}\n\n.map-modal__modal.map-modal__modal .leaflet-container.leaflet-container {\n flex: 1 1 auto;\n border-radius: .3rem;\n}\n\n.map-modal__modal.map-modal__modal .leaflet-top.leaflet-top .leaflet-control.leaflet-control {\n margin-top: 60px;\n}\n","@mixin fit-with-margin($margin) {\n $offset: $margin * 2;\n\n width: calc(100% - #{$offset});\n max-width: calc(100% - #{$offset});\n height: calc(100% - #{$offset});\n margin: $margin;\n}\n",".short-url-visits-header__created-at {\n cursor: default;\n}\n","@import './base';\n\n.nav-pills__nav {\n position: sticky !important;\n top: $headerHeight - 1px;\n z-index: 2;\n}\n\n.nav-pills__nav-link.nav-pills__nav-link {\n border-radius: 0 !important;\n padding-bottom: calc(.5rem - 3px) !important;\n border-bottom: 3px solid transparent !important;\n color: #5d6778;\n font-weight: 700;\n cursor: pointer;\n text-decoration: none;\n\n @media (min-width: $smMin) and (max-width: $mdMax) {\n font-size: 89%;\n }\n}\n\n.nav-pills__nav-link:hover {\n color: $mainColor !important;\n}\n\n.nav-pills__nav-link.active {\n border-color: $mainColor !important;\n background-color: var(--primary-color) !important;\n color: $mainColor !important;\n}\n","@import '../../utils/base';\n\n.line-chart-card__body canvas {\n height: 300px !important;\n\n @media (min-width: $mdMin) {\n height: 400px !important;\n }\n}\n",".simple-paginator {\n user-select: none;\n}\n","@import '../utils/base';\n@import '../utils/mixins/sticky-cell';\n\n.visits-table {\n margin: 1.5rem 0 0;\n position: relative;\n background-color: var(--primary-color);\n overflow-y: hidden;\n}\n\n.visits-table__header-cell {\n cursor: pointer;\n margin-bottom: 55px;\n\n @include sticky-cell();\n\n @media (min-width: $mdMin) {\n &.visits-table__sticky {\n top: $headerHeight + 40px;\n }\n }\n}\n\n.visits-table__header-icon {\n float: right;\n margin-top: 3px;\n}\n\n.visits-table__footer-cell.visits-table__footer-cell {\n bottom: 0;\n margin-top: 34px;\n padding: .5rem;\n\n @include sticky-cell();\n}\n\n.visits-table__sticky.visits-table__sticky {\n position: sticky;\n}\n","@import '../base';\n\n@mixin sticky-cell($with-separators: true) {\n z-index: 1;\n position: relative;\n\n &:before {\n content: '';\n position: absolute;\n top: -1px;\n left: 0;\n bottom: -1px;\n right: if($with-separators, -1px, 0);\n background: var(--table-border-color);\n z-index: -2;\n }\n\n &:first-child:before {\n left: if($with-separators, -1px, 0);\n }\n\n &:after {\n content: '';\n position: absolute;\n top: 0;\n left: if($with-separators, 1px, 0);\n bottom: 0;\n right: 0;\n background: var(--primary-color);\n z-index: -1;\n }\n\n &:first-child:after {\n left: 0;\n }\n}\n",".open-map-modal-btn__btn.open-map-modal-btn__btn {\n padding: 0;\n margin-right: 1rem;\n}\n","@import '../../utils/base';\n\n.doughnut-chart-legend {\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n @media (max-width: $smMax) {\n margin-top: 1rem;\n }\n}\n\n.doughnut-chart-legend__item:not(:first-child) {\n margin-top: .3rem;\n}\n\n.doughnut-chart-legend__item-color {\n width: 20px;\n min-width: 20px;\n height: 20px;\n margin-right: 5px;\n border-radius: 10px;\n}\n\n.doughnut-chart-legend__item-text {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n",".chart-card__footer--sticky {\n position: sticky;\n bottom: 0;\n}\n",".tag-bullet {\n $width: 20px;\n\n border-radius: 50%;\n width: $width;\n height: $width;\n display: inline-block;\n vertical-align: -4px;\n margin-right: 7px;\n}\n","@import '../utils/base';\n\n.tag-card.tag-card {\n margin-bottom: .5rem;\n}\n\n.tag-card__header.tag-card__header,\n.tag-card__body.tag-card__body {\n padding: .75rem;\n}\n\n.tag-card__tag-title {\n margin: 0;\n line-height: 31px;\n padding-right: 5px;\n}\n\n.tag-card__btn {\n float: right;\n}\n\n.tag-card__btn--last {\n margin-left: 3px;\n}\n\n.tag-card__table-cell.tag-card__table-cell {\n border: none;\n}\n\n.tag-card__tag-name {\n color: $mainColor;\n cursor: pointer;\n}\n\n.tag-card__tag-name:hover {\n color: darken($mainColor, 15%);\n text-decoration: underline;\n}\n",".edit-tag-modal__color-picker-toggle {\n cursor: pointer;\n}\n\n.edit-tag-modal__color-icon {\n color: #fff;\n}\n\n.edit-tag-modal__popover.edit-tag-modal__popover {\n border-radius: .6rem;\n}\n","@import '../utils/base';\n@import '../utils/mixins/sticky-cell';\n\n.tags-table__header-cell.tags-table__header-cell {\n @include sticky-cell(false);\n\n top: $headerHeight;\n position: sticky;\n cursor: pointer;\n}\n",".user-interface__theme-icon {\n float: right;\n margin-top: .25rem;\n}\n","@import '../utils/base';\n@import '../utils/mixins/vertical-align';\n\n.domains-dropdown__toggle-btn.domains-dropdown__toggle-btn,\n.domains-dropdown__toggle-btn.domains-dropdown__toggle-btn:hover,\n.domains-dropdown__toggle-btn.domains-dropdown__toggle-btn:active {\n color: $textPlaceholder !important;\n}\n\n.domains-dropdown__toggle-btn--active.domains-dropdown__toggle-btn--active,\n.domains-dropdown__toggle-btn--active.domains-dropdown__toggle-btn--active:hover,\n.domains-dropdown__toggle-btn--active.domains-dropdown__toggle-btn--active:active {\n color: var(--input-text-color) !important;\n}\n\n.domains-dropdown__back-btn.domains-dropdown__back-btn,\n.domains-dropdown__back-btn.domains-dropdown__back-btn:hover {\n border-color: var(--border-color);\n}\n","@import '../utils/base';\n@import '../utils/mixins/horizontal-align';\n\n.app-update-banner.app-update-banner {\n @include horizontal-align();\n\n position: fixed;\n top: $headerHeight - 25px;\n padding: 0 4rem 0 0;\n z-index: 1040;\n margin: 0;\n color: var(--text-color);\n text-align: center;\n width: 700px;\n max-width: calc(100% - 30px);\n box-shadow: 0 0 1rem var(--brand-color);\n}\n","@mixin horizontal-align {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n}\n","@import '../utils/base';\n\n.app-container {\n height: 100%;\n}\n\n.app {\n padding-top: $headerHeight;\n height: 100%;\n}\n\n.shlink-wrapper {\n min-height: 100%;\n padding-bottom: $footer-height + $footer-margin;\n margin-bottom: -($footer-height + $footer-margin);\n}\n\n.shlink-footer {\n height: $footer-height;\n margin-top: $footer-margin;\n padding: 0;\n\n @media (min-width: $mdMin) {\n padding: 0 15px;\n }\n}\n","/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #4696e5;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 70, 150, 229;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 33, 37, 41;--bs-body-bg-rgb: 255, 255, 255;--bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size: 1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-bg: #fff}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#4696e5;text-decoration:underline}a:hover{color:#3878b7}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr /* rtl:ignore */;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:0.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:\"— \"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:#6c757d}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:var(--bs-gutter-x, 0.75rem);padding-left:var(--bs-gutter-x, 0.75rem);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #212529;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #212529;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #212529;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:2px solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #daeafa;--bs-table-striped-bg: #cfdeee;--bs-table-striped-color: #000;--bs-table-active-bg: #c4d3e1;--bs-table-active-color: #000;--bs-table-hover-bg: #cad8e7;--bs-table-hover-color: #000;color:#000;border-color:#c4d3e1}.table-secondary{--bs-table-bg: #e2e3e5;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#a3cbf2;outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#a3cbf2;outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25)}.form-select[multiple],.form-select[size]:not([size=\"1\"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.3rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);appearance:none;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#a3cbf2;outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25)}.form-check-input:checked{background-color:#4696e5;border-color:#4696e5}.form-check-input:checked[type=checkbox]{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\")}.form-check-input:checked[type=radio]{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\")}.form-check-input[type=checkbox]:indeterminate{background-color:#4696e5;border-color:#4696e5;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23a3cbf2'/%3e%3c/svg%3e\")}.form-switch .form-check-input:checked{background-position:right center;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(70,150,229,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(70,150,229,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#4696e5;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#c8e0f7}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#4696e5;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#c8e0f7}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-right:calc(1.5em + 0.75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size=\"1\"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size=\"1\"]{padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"),url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:calc(1.5em + 0.75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size=\"1\"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size=\"1\"]{padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"),url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#000;background-color:#4696e5;border-color:#4696e5}.btn-primary:hover{color:#000;background-color:#62a6e9;border-color:#59a1e8}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#000;background-color:#62a6e9;border-color:#59a1e8;box-shadow:0 0 0 .25rem rgba(60,128,195,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#000;background-color:#6babea;border-color:#59a1e8}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,128,195,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#000;background-color:#4696e5;border-color:#4696e5}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#4696e5;border-color:#4696e5}.btn-outline-primary:hover{color:#000;background-color:#4696e5;border-color:#4696e5}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(70,150,229,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#000;background-color:#4696e5;border-color:#4696e5}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(70,150,229,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#4696e5;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#4696e5;text-decoration:underline}.btn-link:hover{color:#3878b7}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#4696e5}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:0.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#4696e5}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#4696e5;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:#3878b7}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#4696e5}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-top,.navbar-expand-sm .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-top,.navbar-expand-md .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-top,.navbar-expand-lg .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-top,.navbar-expand-xl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-top,.navbar-expand-xxl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-top,.navbar-expand .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-0.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#3f87ce;background-color:#edf5fc;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%233f87ce'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:\"\";background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#a3cbf2;outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#4696e5;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#3878b7;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#3878b7;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#4696e5;border-color:#4696e5}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:0.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#2a5a89;background-color:#daeafa;border-color:#c8e0f7}.alert-primary .alert-link{color:#22486e}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:0.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#4696e5;transition:width .6s ease}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, \".\") \". \";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#4696e5;border-color:#4696e5}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#2a5a89;background-color:#daeafa}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#2a5a89;background-color:#c4d3e1}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#2a5a89;border-color:#2a5a89}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(70,150,229,.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:0.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.toast-header .btn-close{margin-right:-0.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-0.5rem -0.5rem -0.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(0.3rem - 1px);border-bottom-left-radius:calc(0.3rem - 1px)}.modal-footer>*{margin:.25rem}@media(min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media(min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[data-popper-placement^=top]{padding:.4rem 0}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:0}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-end,.bs-tooltip-auto[data-popper-placement^=right]{padding:0 .4rem}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[data-popper-placement^=bottom]{padding:.4rem 0}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:0}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-start,.bs-tooltip-auto[data-popper-placement^=left]{padding:0 .4rem}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0 /* rtl:ignore */;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-0.5rem - 1px)}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-0.5rem - 1px);width:.5rem;height:1rem}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-0.5rem - 1px)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-0.5rem;content:\"\";border-bottom:1px solid #f0f0f0}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-0.5rem - 1px);width:.5rem;height:1rem}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;background-color:currentColor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-0.5rem;margin-right:-0.5rem;margin-bottom:-0.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:\"\"}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:\"\"}.link-primary{color:#4696e5}.link-primary:hover,.link-primary:focus{color:#6babea}.link-secondary{color:#6c757d}.link-secondary:hover,.link-secondary:focus{color:#565e64}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:\"\"}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio: calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio: calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:\"\"}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-top-0{border-top:0 !important}.border-end{border-right:1px solid #dee2e6 !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:1px solid #dee2e6 !important}.border-start-0{border-left:0 !important}.border-primary{border-color:#4696e5 !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:transparent !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:.25rem !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:.25rem !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-end{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-start{border-bottom-left-radius:.25rem !important;border-top-left-radius:.25rem !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}.react-tags{position:relative;padding:5px 0 0 6px;border-radius:.3rem;background-color:var(--input-color);border:1px solid var(--input-border-color);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;font-size:1em;line-height:1.2;cursor:text}.react-tags.is-focused{box-shadow:0 0 0 .2rem rgba(70,150,229,.25)}.react-tags__tag{font-size:100%}.react-tags__selected{display:inline;vertical-align:2px}.react-tags__selected-tag{display:inline-block;box-sizing:border-box;margin:0 6px 6px 0;padding:6px 8px;border:1px solid var(--input-border-color);border-radius:.25rem;background:#f1f1f1;font-size:inherit;line-height:inherit}.react-tags__selected-tag:after{content:\"✕\";color:#aaa;margin-left:8px}.react-tags__selected-tag:hover,.react-tags__selected-tag:focus{border-color:var(--input-border-color)}.react-tags__search{display:inline-block;padding:6px 2px;margin-bottom:5px;max-width:100%}@media screen and (min-width: 576px){.react-tags__search{position:relative}}.react-tags__search-input{font-size:1.25rem;line-height:inherit;color:var(--input-text-color);background-color:var(--input-color);max-width:100%;margin:0 0 0 7px;padding:0;border:0;outline:none}.react-tags__search-input::-ms-clear{display:none}.react-tags__suggestions{position:absolute;top:100%;left:0;width:100%;z-index:10}@media screen and (min-width: 576px){.react-tags__suggestions{width:240px}}.react-tags__suggestions ul{margin:4px -1px;padding:0;list-style:none;background:var(--primary-color);border:1px solid var(--border-color);border-radius:.25rem;box-shadow:0 2px 6px rgba(0,0,0,.2)}.react-tags__suggestions li{padding:8px 10px}.react-tags__suggestions li:not(:last-child){border-bottom:1px solid var(--border-color)}.react-tags__suggestions li mark,.react-tags__suggestions li .mark{text-decoration:underline;background:none;font-weight:600}.react-tags__suggestions li:hover{cursor:pointer;background-color:var(--active-color)}.react-tags__suggestions li.is-active{background-color:var(--active-color)}.react-tags__suggestions li.is-disabled{opacity:.5;cursor:auto}html:not([data-theme=dark]){--primary-color: #ffffff;--primary-color-alfa: rgba(255, 255, 255, 0.5);--secondary-color: #f5f6fe;--text-color: #232323;--border-color: rgba(0, 0, 0, 0.125);--active-color: #eeeeee;--brand-color: #4696e5;--input-color: #ffffff;--input-disabled-color: #f5f6fe;--input-border-color: rgba(0, 0, 0, 0.19);--input-text-color: #495057;--table-border-color: #dee2e6;--table-highlight-color: rgba(0, 0, 0, 0.075);--btn-close-filter: initial}html[data-theme=dark]{--primary-color: #161b22;--primary-color-alfa: rgba(22, 27, 34, 0.8);--secondary-color: #0f131a;--text-color: #c9d1d9;--border-color: rgba(255, 255, 255, 0.15);--active-color: #0f131a;--brand-color: #0b2d4e;--input-color: #12161c;--input-disabled-color: #1a2028;--input-border-color: rgba(255, 255, 255, 0.15);--input-text-color: #c9d1d9;--table-border-color: #393d43;--table-highlight-color: rgba(255, 255, 255, 0.15);--btn-close-filter: invert(1)}@media(max-width: 991px){.responsive-table__header{display:none}}@media(max-width: 991px){.responsive-table.table>:not(:first-child){border:none}}@media(max-width: 991px){.responsive-table__row{display:block;margin-bottom:10px;border-bottom:1px solid var(--border-color);border-top:2px solid var(--border-color);position:relative}}.responsive-table__cell.responsive-table__cell{vertical-align:middle !important}@media(max-width: 991px){.responsive-table__cell.responsive-table__cell{display:block;width:100%;position:relative;padding:.5rem;font-size:.9rem}.responsive-table__cell.responsive-table__cell[data-th]:before{content:attr(data-th) \": \";font-weight:700}.responsive-table__cell.responsive-table__cell:last-child{position:absolute;top:3.5px;right:.5rem;width:auto;padding:0;border:none}}@media(max-width: 991px){.responsive-table__cell.responsive-table__cell .btn-sm,.responsive-table__cell.responsive-table__cell .btn-group-sm>.btn{padding:.1rem .4rem;margin-top:.16rem}}.sticky-card-paginator{position:sticky;bottom:0;background-color:var(--primary-color-alfa);padding:.75rem 0;border-top:1px solid var(--border-color)}*{outline:none !important}:root{scroll-behavior:auto}html,body,#root{height:100%;background:var(--secondary-color);color:var(--text-color)}a,.btn-link{text-decoration:none}a:not(.nav-link):not(.navbar-brand):not(.page-link):not(.highlight-card):not(.btn):hover,.btn-link:hover{text-decoration:underline}.bg-main{background-color:#4696e5 !important}.card-body,.card-header,.list-group-item{background-color:transparent}.card-footer{background-color:var(--primary-color-alfa)}.card{box-shadow:0 .125rem .25rem rgba(0,0,0,.075);background-color:var(--primary-color);border-color:var(--border-color)}.list-group{background-color:var(--primary-color)}.modal-content,.page-link,.page-item.disabled .page-link,.dropdown-menu{background-color:var(--primary-color)}.modal-header,.modal-footer,.card-header,.card-footer,.table thead th,.table th,.table td,.page-link,.page-link:hover,.page-item.disabled .page-link,.dropdown-divider,.dropdown-menu,.list-group-item,.modal-content,hr{border-color:var(--border-color)}.table-bordered,.table-bordered thead th,.table-bordered thead td{border-color:var(--table-border-color)}.page-link:hover,.page-link:focus{background-color:var(--secondary-color)}.page-item.active .page-link{background-color:var(--brand-color);border-color:var(--brand-color)}.pagination .page-link{cursor:pointer}@media(min-width: 1200px){.container-xl{max-width:1320px}}@media(max-width: 767px){.container-xl{padding-right:0;padding-left:0}}.btn-block{display:block;width:100%}.btn-primary,.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-outline-primary:hover,.btn-outline-primary:active,.btn-outline-primary.active{color:#fff}.dropdown-item,.dropdown-item-text{color:var(--text-color)}.dropdown-item:not(:disabled){cursor:pointer}.dropdown-item:focus:not(:disabled),.dropdown-item:hover:not(:disabled),.dropdown-item.active:not(:disabled),.dropdown-item:active:not(:disabled){background-color:var(--active-color) !important;color:var(--text-color) !important}.dropdown-item--danger.dropdown-item--danger{color:#dc3545}.dropdown-item--danger.dropdown-item--danger:hover,.dropdown-item--danger.dropdown-item--danger:active,.dropdown-item--danger.dropdown-item--danger.active{color:#dc3545 !important}.badge-main{color:#fff;background-color:var(--brand-color)}.close,.close:hover,.table,.table-hover>tbody>tr:hover>*,.table-hover>tbody>tr>*{color:var(--text-color)}.btn-close{filter:var(--btn-close-filter)}.table-hover tbody tr:hover{background-color:var(--secondary-color)}.form-control,.form-control:focus{background-color:var(--primary-color);border-color:var(--input-border-color);color:var(--input-text-color)}.form-control.disabled,.form-control:disabled{background-color:var(--input-disabled-color);cursor:not-allowed}.card .form-control:not(:disabled),.card .form-control:not(:disabled):hover{background-color:var(--input-color)}.table-active,.table-active>th,.table-active>td{background-color:var(--table-highlight-color) !important}@media(max-width: 767px){.navbar-brand{margin:0 auto !important}}.indivisible{white-space:nowrap}.pointer{cursor:pointer}.text-ellipsis{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.progress-bar{background-color:#4696e5}@media(max-width: 575px){.btn-xs-block{width:100%;display:block}}@media(max-width: 991px){.btn-md-block{width:100%;display:block}}","/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$variable-prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n font-size: var(--#{$variable-prefix}root-font-size);\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`\n \n \n );\n }\n\n return this.props.children;\n }\n};\n\nexport default ErrorHandler;\n","import { AxiosInstance } from 'axios';\nimport { saveUrl } from '../../utils/helpers/files';\n\nexport class ImageDownloader {\n public constructor(private readonly axios: AxiosInstance, private readonly window: Window) {}\n\n public async saveImage(imgUrl: string, filename: string): Promise {\n const { data } = await this.axios.get(imgUrl, { responseType: 'blob' });\n const url = URL.createObjectURL(data);\n\n saveUrl(this.window, url, filename);\n }\n}\n","import Bottle from 'bottlejs';\nimport { useStateFlagTimeout } from '../helpers/hooks';\nimport LocalStorage from './LocalStorage';\nimport ColorGenerator from './ColorGenerator';\n\nconst provideServices = (bottle: Bottle) => {\n bottle.constant('localStorage', (global as any).localStorage);\n bottle.service('Storage', LocalStorage, 'localStorage');\n bottle.service('ColorGenerator', ColorGenerator, 'Storage');\n\n bottle.constant('setTimeout', global.setTimeout);\n bottle.constant('clearTimeout', global.clearTimeout);\n bottle.serviceFactory('useStateFlagTimeout', useStateFlagTimeout, 'setTimeout', 'clearTimeout');\n};\n\nexport default provideServices;\n","const PREFIX = 'shlink';\nconst buildPath = (path: string) => `${PREFIX}.${path}`;\n\nexport default class LocalStorage {\n public constructor(private readonly localStorage: Storage) {}\n\n public readonly get = (key: string): T | undefined => {\n const item = this.localStorage.getItem(buildPath(key));\n\n return item ? JSON.parse(item) as T : undefined;\n };\n\n public readonly set = (key: string, value: any) => this.localStorage.setItem(buildPath(key), JSON.stringify(value));\n}\n","import { isNil } from 'ramda';\nimport { rangeOf } from '../utils';\nimport LocalStorage from './LocalStorage';\n\nconst HEX_COLOR_LENGTH = 6;\nconst HEX_DIGITS = '0123456789ABCDEF';\nconst LIGHTNESS_BREAKPOINT = 128;\n\nconst { floor, random, sqrt, round } = Math;\nconst buildRandomColor = () =>\n `#${rangeOf(HEX_COLOR_LENGTH, () => HEX_DIGITS[floor(random() * HEX_DIGITS.length)]).join('')}`;\nconst normalizeKey = (key: string) => key.toLowerCase().trim();\nconst hexColorToRgbArray = (colorHex: string): number[] =>\n (colorHex.match(/../g) ?? []).map((hex) => parseInt(hex, 16) || 0);\n// HSP by Darel Rex Finley https://alienryderflex.com/hsp.html\nconst perceivedLightness = (r = 0, g = 0, b = 0) => round(sqrt(0.299 * r ** 2 + 0.587 * g ** 2 + 0.114 * b ** 2));\n\nexport default class ColorGenerator {\n private readonly colors: Record;\n private readonly lights: Record;\n\n public constructor(private readonly storage: LocalStorage) {\n this.colors = this.storage.get>('colors') ?? {};\n this.lights = {};\n }\n\n public readonly getColorForKey = (key: string) => {\n const normalizedKey = normalizeKey(key);\n const color = this.colors[normalizedKey];\n\n // If a color has not been set yet, generate a random one and save it\n if (!color) {\n return this.setColorForKey(normalizedKey, buildRandomColor());\n }\n\n return color;\n };\n\n public readonly setColorForKey = (key: string, color: string) => {\n const normalizedKey = normalizeKey(key);\n\n this.colors[normalizedKey] = color;\n this.storage.set('colors', this.colors);\n\n return color;\n };\n\n public readonly isColorLightForKey = (key: string): boolean => {\n const colorHex = this.getColorForKey(key).substring(1);\n\n if (isNil(this.lights[colorHex])) {\n const rgb = hexColorToRgbArray(colorHex);\n\n this.lights[colorHex] = perceivedLightness(...rgb) >= LIGHTNESS_BREAKPOINT;\n }\n\n return this.lights[colorHex];\n };\n}\n","import { omit } from 'ramda';\nimport { SemVer } from '../../utils/helpers/version';\n\nexport interface ServerData {\n name: string;\n url: string;\n apiKey: string;\n}\n\nexport interface ServerWithId extends ServerData {\n id: string;\n autoConnect?: boolean;\n}\n\nexport interface ReachableServer extends ServerWithId {\n version: SemVer;\n printableVersion: string;\n}\n\nexport interface NonReachableServer extends ServerWithId {\n serverNotReachable: true;\n}\n\nexport interface NotFoundServer {\n serverNotFound: true;\n}\n\nexport type RegularServer = ReachableServer | NonReachableServer;\n\nexport type SelectedServer = RegularServer | NotFoundServer | null;\n\nexport type ServersMap = Record;\n\nexport const hasServerData = (server: SelectedServer | ServerData): server is ServerData =>\n !!(server as ServerData)?.url && !!(server as ServerData)?.apiKey;\n\nexport const isServerWithId = (server: SelectedServer | ServerWithId): server is ServerWithId =>\n !!server?.hasOwnProperty('id');\n\nexport const isReachableServer = (server: SelectedServer): server is ReachableServer =>\n !!server?.hasOwnProperty('version');\n\nexport const isNotFoundServer = (server: SelectedServer): server is NotFoundServer =>\n !!server?.hasOwnProperty('serverNotFound');\n\nexport const getServerId = (server: SelectedServer) => isServerWithId(server) ? server.id : '';\n\nexport const serverWithIdToServerData = (server: ServerWithId): ServerData =>\n omit([ 'id', 'autoConnect' ], server);\n","import { pipe } from 'ramda';\nimport { ExternalLink } from 'react-external-link';\nimport { versionToPrintable, versionToSemVer } from '../utils/helpers/version';\nimport { isReachableServer } from '../servers/data';\nimport { ShlinkVersionsContainerProps } from './ShlinkVersionsContainer';\n\nconst SHLINK_WEB_CLIENT_VERSION = '%_VERSION_%';\nconst normalizeVersion = pipe(versionToSemVer(), versionToPrintable);\n\nexport interface ShlinkVersionsProps extends ShlinkVersionsContainerProps {\n clientVersion?: string;\n}\n\nconst VersionLink = ({ project, version }: { project: 'shlink' | 'shlink-web-client'; version: string }) => (\n \n {version}\n \n);\n\nconst ShlinkVersions = ({ selectedServer, clientVersion = SHLINK_WEB_CLIENT_VERSION }: ShlinkVersionsProps) => {\n const normalizedClientVersion = normalizeVersion(clientVersion);\n\n return (\n \n {isReachableServer(selectedServer) &&\n <>Server: - \n }\n Client: \n \n );\n};\n\nexport default ShlinkVersions;\n","import classNames from 'classnames';\nimport { isReachableServer, SelectedServer } from '../servers/data';\nimport ShlinkVersions from './ShlinkVersions';\nimport './ShlinkVersionsContainer.scss';\n\nexport interface ShlinkVersionsContainerProps {\n selectedServer: SelectedServer;\n}\n\nconst ShlinkVersionsContainer = ({ selectedServer }: ShlinkVersionsContainerProps) => {\n const classes = classNames('text-center', {\n 'shlink-versions-container--with-server': isReachableServer(selectedServer),\n });\n\n return (\n

\n \n
\n );\n};\n\nexport default ShlinkVersionsContainer;\n","import { faChevronDown as arrowIcon, faCogs as cogsIcon } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { FC, useEffect } from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport { Collapse, Nav, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink } from 'reactstrap';\nimport classNames from 'classnames';\nimport { useToggle } from '../utils/helpers/hooks';\nimport { ShlinkLogo } from './img/ShlinkLogo';\nimport './MainHeader.scss';\n\nconst MainHeader = (ServersDropdown: FC) => () => {\n const [ isOpen, toggleOpen, , close ] = useToggle();\n const location = useLocation();\n const { pathname } = location;\n\n useEffect(close, [ location ]);\n\n const settingsPath = '/settings';\n const toggleClass = classNames('main-header__toggle-icon', { 'main-header__toggle-icon--opened': isOpen });\n\n return (\n \n \n Shlink\n \n\n \n \n \n\n \n \n \n \n );\n};\n\nexport default MainHeader;\n","import { useEffect } from 'react';\nimport { isEmpty, values } from 'ramda';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { Card, Row } from 'reactstrap';\nimport { ExternalLink } from 'react-external-link';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faExternalLinkAlt, faPlus } from '@fortawesome/free-solid-svg-icons';\nimport ServersListGroup from '../servers/ServersListGroup';\nimport { ServersMap } from '../servers/data';\nimport { ShlinkLogo } from './img/ShlinkLogo';\nimport './Home.scss';\n\nexport interface HomeProps {\n servers: ServersMap;\n}\n\nconst Home = ({ servers }: HomeProps) => {\n const navigate = useNavigate();\n const serversList = values(servers);\n const hasServers = !isEmpty(serversList);\n\n useEffect(() => {\n // Try to redirect to the first server marked as auto-connect\n const autoConnectServer = serversList.find(({ autoConnect }) => autoConnect);\n\n autoConnectServer && navigate(`/server/${autoConnectServer.id}`);\n }, []);\n\n return (\n
\n \n \n
\n
\n
\n \n
\n
\n
\n
\n
\n

Welcome!

\n
\n \n {!hasServers && (\n
\n

This application will help you manage your Shlink servers.

\n

\n \n Add a server\n \n

\n

\n \n \n Learn more about Shlink \n \n \n

\n
\n )}\n
\n
\n
\n
\n
\n );\n};\n\nexport default Home;\n","import { FC, useEffect } from 'react';\nimport { Navigate, Route, Routes, useLocation } from 'react-router-dom';\nimport { faBars as burgerIcon } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport classNames from 'classnames';\nimport { withSelectedServer } from '../servers/helpers/withSelectedServer';\nimport { useSwipeable, useToggle } from '../utils/helpers/hooks';\nimport { supportsDomainRedirects, supportsNonOrphanVisits, supportsOrphanVisits } from '../utils/helpers/features';\nimport { isReachableServer } from '../servers/data';\nimport NotFound from './NotFound';\nimport { AsideMenuProps } from './AsideMenu';\nimport './MenuLayout.scss';\n\nconst MenuLayout = (\n TagsList: FC,\n ShortUrlsList: FC,\n AsideMenu: FC,\n CreateShortUrl: FC,\n ShortUrlVisits: FC,\n TagVisits: FC,\n OrphanVisits: FC,\n NonOrphanVisits: FC,\n ServerError: FC,\n Overview: FC,\n EditShortUrl: FC,\n ManageDomains: FC,\n) => withSelectedServer(({ selectedServer }) => {\n const location = useLocation();\n const [ sidebarVisible, toggleSidebar, showSidebar, hideSidebar ] = useToggle();\n\n useEffect(() => hideSidebar(), [ location ]);\n\n if (!isReachableServer(selectedServer)) {\n return ;\n }\n\n const addOrphanVisitsRoute = supportsOrphanVisits(selectedServer);\n const addNonOrphanVisitsRoute = supportsNonOrphanVisits(selectedServer);\n const addManageDomainsRoute = supportsDomainRedirects(selectedServer);\n const burgerClasses = classNames('menu-layout__burger-icon', { 'menu-layout__burger-icon--active': sidebarVisible });\n const swipeableProps = useSwipeable(showSidebar, hideSidebar);\n\n return (\n <>\n \n\n
\n
\n \n
hideSidebar()}>\n
\n \n } />\n } />\n } />\n } />\n } />\n } />\n } />\n {addOrphanVisitsRoute && } />}\n {addNonOrphanVisitsRoute && } />}\n } />\n {addManageDomainsRoute && } />}\n List short URLs}\n />\n \n
\n
\n
\n
\n \n );\n}, ServerError);\n\nexport default MenuLayout;\n","import {\n faList as listIcon,\n faLink as createIcon,\n faTags as tagsIcon,\n faPen as editIcon,\n faHome as overviewIcon,\n faGlobe as domainsIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { FC } from 'react';\nimport { NavLink, NavLinkProps, useLocation } from 'react-router-dom';\nimport classNames from 'classnames';\nimport { DeleteServerButtonProps } from '../servers/DeleteServerButton';\nimport { isServerWithId, SelectedServer } from '../servers/data';\nimport { supportsDomainRedirects } from '../utils/helpers/features';\nimport './AsideMenu.scss';\n\nexport interface AsideMenuProps {\n selectedServer: SelectedServer;\n className?: string;\n showOnMobile?: boolean;\n}\n\ninterface AsideMenuItemProps extends NavLinkProps {\n to: string;\n}\n\nconst AsideMenuItem: FC = ({ children, to, className, ...rest }) => (\n classNames('aside-menu__item', className, { 'aside-menu__item--selected': isActive })}\n to={to}\n {...rest}\n >\n {children}\n \n);\n\nconst AsideMenu = (DeleteServerButton: FC) => (\n { selectedServer, showOnMobile = false }: AsideMenuProps,\n) => {\n const hasId = isServerWithId(selectedServer);\n const serverId = hasId ? selectedServer.id : '';\n const { pathname } = useLocation();\n const addManageDomainsLink = supportsDomainRedirects(selectedServer);\n const asideClass = classNames('aside-menu', {\n 'aside-menu--hidden': !showOnMobile,\n });\n const buildPath = (suffix: string) => `/server/${serverId}${suffix}`;\n\n return (\n \n );\n};\n\nexport default AsideMenu;\n","import { isEmpty, isNil, pipe, range } from 'ramda';\nimport { SyntheticEvent } from 'react';\n\nexport const rangeOf = (size: number, mappingFn: (value: number) => T, startAt = 1): T[] =>\n range(startAt, size + 1).map(mappingFn);\n\nexport type Empty = null | undefined | '' | never[];\n\nexport const hasValue = (value: T | Empty): value is T => !isNil(value) && !isEmpty(value);\n\nexport const handleEventPreventingDefault = (handler: () => T) => pipe(\n (e: SyntheticEvent) => e.preventDefault(),\n handler,\n);\n\nexport type Nullable = {\n [P in keyof T]: T[P] | null\n};\n\ntype Optional = T | null | undefined;\n\nexport type OptionalString = Optional;\n\nexport type RecursivePartial = {\n [P in keyof T]?: RecursivePartial;\n};\n\nexport const nonEmptyValueOrNull = (value: T): T | null => isEmpty(value) ? null : value;\n\nexport const capitalize = (value: T): string => `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n","import { Card, CardBody, CardHeader, CardProps } from 'reactstrap';\nimport { ReactNode } from 'react';\n\ninterface SimpleCardProps extends Omit {\n title?: ReactNode;\n bodyClassName?: string;\n}\n\nexport const SimpleCard = ({ title, children, bodyClassName, ...rest }: SimpleCardProps) => (\n \n {title && {title}}\n {children}\n \n);\n","import { isReachableServer, SelectedServer } from '../../servers/data';\nimport { versionMatch, Versions } from './version';\n\nconst serverMatchesVersions = (versions: Versions) => (selectedServer: SelectedServer): boolean =>\n isReachableServer(selectedServer) && versionMatch(selectedServer.version, versions);\n\nexport const supportsQrCodeSizeInQuery = serverMatchesVersions({ minVersion: '2.5.0' });\n\nexport const supportsShortUrlTitle = serverMatchesVersions({ minVersion: '2.6.0' });\n\nexport const supportsOrphanVisits = supportsShortUrlTitle;\n\nexport const supportsQrCodeMargin = supportsShortUrlTitle;\n\nexport const supportsTagsInPatch = supportsShortUrlTitle;\n\nexport const supportsBotVisits = serverMatchesVersions({ minVersion: '2.7.0' });\n\nexport const supportsCrawlableVisits = supportsBotVisits;\n\nexport const supportsQrErrorCorrection = serverMatchesVersions({ minVersion: '2.8.0' });\n\nexport const supportsDomainRedirects = supportsQrErrorCorrection;\n\nexport const supportsForwardQuery = serverMatchesVersions({ minVersion: '2.9.0' });\n\nexport const supportsDefaultDomainRedirectsEdition = serverMatchesVersions({ minVersion: '2.10.0' });\n\nexport const supportsNonOrphanVisits = serverMatchesVersions({ minVersion: '3.0.0' });\n\nexport const supportsAllTagsFiltering = supportsNonOrphanVisits;\n","export const MAIN_COLOR = '#4696e5';\n\nexport const MAIN_COLOR_ALPHA = 'rgba(70, 150, 229, 0.4)';\n\nexport const HIGHLIGHTED_COLOR = '#f77f28';\n\nexport const HIGHLIGHTED_COLOR_ALPHA = 'rgba(247, 127, 40, 0.4)';\n\nexport const PRIMARY_LIGHT_COLOR = 'white';\n\nexport const PRIMARY_DARK_COLOR = '#161b22';\n\nexport type Theme = 'dark' | 'light';\n\nexport const changeThemeInMarkup = (theme: Theme) =>\n document.getElementsByTagName('html')?.[0]?.setAttribute('data-theme', theme);\n\nexport const isDarkThemeEnabled = (): boolean =>\n document.getElementsByTagName('html')?.[0]?.getAttribute('data-theme') === 'dark';\n","import qs from 'qs';\n\nexport const parseQuery = (search: string) => qs.parse(search, { ignoreQueryPrefix: true }) as unknown as T;\n\nexport const stringifyQuery = (query: any): string => qs.stringify(query, { arrayFormat: 'brackets' });\n","import { FC } from 'react';\nimport { Card, Row } from 'reactstrap';\nimport classNames from 'classnames';\nimport { faCircleNotch as preloader } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\ntype MessageType = 'default' | 'error';\n\nconst getClassForType = (type: MessageType) => {\n const map: Record = {\n error: 'border-danger',\n default: '',\n };\n\n return map[type];\n};\nconst getTextClassForType = (type: MessageType) => {\n const map: Record = {\n error: 'text-danger',\n default: 'text-muted',\n };\n\n return map[type];\n};\n\nexport interface MessageProps {\n className?: string;\n loading?: boolean;\n fullWidth?: boolean;\n type?: MessageType;\n}\n\nconst Message: FC = ({ className, children, loading = false, type = 'default', fullWidth = false }) => {\n const classes = classNames({\n 'col-md-12': fullWidth,\n 'col-md-10 offset-md-1': !fullWidth,\n });\n\n return (\n \n
\n \n

\n {loading && }\n {loading && {children ?? 'Loading...'}}\n {!loading && children}\n

\n
\n
\n
\n );\n};\n\nexport default Message;\n","import { useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSearch as searchIcon } from '@fortawesome/free-solid-svg-icons';\nimport classNames from 'classnames';\nimport './SearchField.scss';\n\nconst DEFAULT_SEARCH_INTERVAL = 500;\nlet timer: NodeJS.Timeout | null;\n\ninterface SearchFieldProps {\n onChange: (value: string) => void;\n className?: string;\n large?: boolean;\n noBorder?: boolean;\n initialValue?: string;\n}\n\nconst SearchField = ({ onChange, className, large = true, noBorder = false, initialValue = '' }: SearchFieldProps) => {\n const [ searchTerm, setSearchTerm ] = useState(initialValue);\n\n const resetTimer = () => {\n timer && clearTimeout(timer);\n timer = null;\n };\n const searchTermChanged = (newSearchTerm: string, timeout = DEFAULT_SEARCH_INTERVAL) => {\n setSearchTerm(newSearchTerm);\n\n resetTimer();\n\n timer = setTimeout(() => {\n onChange(newSearchTerm);\n resetTimer();\n }, timeout);\n };\n\n return (\n
\n searchTermChanged(e.target.value)}\n />\n \n
\n \n );\n};\n\nexport default SearchField;\n","export type OrderDir = 'ASC' | 'DESC' | undefined;\n\nexport interface Order {\n field?: Fields;\n dir?: OrderDir;\n}\n\nexport const determineOrderDir = (\n currentField: T,\n newField?: T,\n currentOrderDir?: OrderDir,\n): OrderDir => {\n if (currentField !== newField) {\n return 'ASC';\n }\n\n const newOrderMap: Record<'ASC' | 'DESC', OrderDir> = {\n ASC: 'DESC',\n DESC: undefined,\n };\n\n return currentOrderDir ? newOrderMap[currentOrderDir] : 'ASC';\n};\n\nexport const sortList = (list: List[], { field, dir }: Order>) => !field || !dir\n ? list\n : list.sort((a, b) => {\n const greaterThan = dir === 'ASC' ? 1 : -1;\n const smallerThan = dir === 'ASC' ? -1 : 1;\n\n return a[field] > b[field] ? greaterThan : smallerThan;\n });\n\nexport const orderToString = (order: Order): string | undefined =>\n order.dir ? `${order.field}-${order.dir}` : undefined;\n\nexport const stringToOrder = (order: string): Order => {\n const [ field, dir ] = order.split('-') as [ T | undefined, OrderDir | undefined ];\n\n return { field, dir };\n};\n","import { isEmpty, isNil, reject } from 'ramda';\nimport { AxiosInstance, AxiosResponse, Method } from 'axios';\nimport { ShortUrl, ShortUrlData } from '../../short-urls/data';\nimport { OptionalString } from '../../utils/utils';\nimport {\n ShlinkHealth,\n ShlinkMercureInfo,\n ShlinkShortUrlsResponse,\n ShlinkTags,\n ShlinkTagsResponse,\n ShlinkVisits,\n ShlinkVisitsParams,\n ShlinkShortUrlData,\n ShlinkDomainsResponse,\n ShlinkVisitsOverview,\n ShlinkEditDomainRedirects,\n ShlinkDomainRedirects,\n ShlinkShortUrlsListParams,\n ShlinkShortUrlsListNormalizedParams,\n} from '../types';\nimport { stringifyQuery } from '../../utils/helpers/query';\nimport { orderToString } from '../../utils/helpers/ordering';\n\nconst buildShlinkBaseUrl = (url: string) => url ? `${url}/rest/v2` : '';\nconst rejectNilProps = reject(isNil);\nconst normalizeOrderByInParams = (params: ShlinkShortUrlsListParams): ShlinkShortUrlsListNormalizedParams => {\n const { orderBy = {}, ...rest } = params;\n\n return { ...rest, orderBy: orderToString(orderBy) };\n};\n\nexport default class ShlinkApiClient {\n public constructor(\n private readonly axios: AxiosInstance,\n private readonly baseUrl: string,\n private readonly apiKey: string,\n ) {\n }\n\n public readonly listShortUrls = async (params: ShlinkShortUrlsListParams = {}): Promise =>\n this.performRequest<{ shortUrls: ShlinkShortUrlsResponse }>('/short-urls', 'GET', normalizeOrderByInParams(params))\n .then(({ data }) => data.shortUrls);\n\n public readonly createShortUrl = async (options: ShortUrlData): Promise => {\n const filteredOptions = reject((value) => isEmpty(value) || isNil(value), options as any);\n\n return this.performRequest('/short-urls', 'POST', {}, filteredOptions)\n .then((resp) => resp.data);\n };\n\n public readonly getShortUrlVisits = async (shortCode: string, query?: ShlinkVisitsParams): Promise =>\n this.performRequest<{ visits: ShlinkVisits }>(`/short-urls/${shortCode}/visits`, 'GET', query)\n .then(({ data }) => data.visits);\n\n public readonly getTagVisits = async (tag: string, query?: Omit): Promise =>\n this.performRequest<{ visits: ShlinkVisits }>(`/tags/${tag}/visits`, 'GET', query)\n .then(({ data }) => data.visits);\n\n public readonly getOrphanVisits = async (query?: Omit): Promise =>\n this.performRequest<{ visits: ShlinkVisits }>('/visits/orphan', 'GET', query)\n .then(({ data }) => data.visits);\n\n public readonly getNonOrphanVisits = async (query?: Omit): Promise =>\n this.performRequest<{ visits: ShlinkVisits }>('/visits/non-orphan', 'GET', query)\n .then(({ data }) => data.visits);\n\n public readonly getVisitsOverview = async (): Promise =>\n this.performRequest<{ visits: ShlinkVisitsOverview }>('/visits', 'GET')\n .then(({ data }) => data.visits);\n\n public readonly getShortUrl = async (shortCode: string, domain?: OptionalString): Promise =>\n this.performRequest(`/short-urls/${shortCode}`, 'GET', { domain })\n .then(({ data }) => data);\n\n public readonly deleteShortUrl = async (shortCode: string, domain?: OptionalString): Promise =>\n this.performRequest(`/short-urls/${shortCode}`, 'DELETE', { domain })\n .then(() => {});\n\n // eslint-disable-next-line valid-jsdoc\n /**\n * @deprecated. If using Shlink 2.6.0 or greater, use updateShortUrl instead\n */\n public readonly updateShortUrlTags = async (\n shortCode: string,\n domain: OptionalString,\n tags: string[],\n ): Promise =>\n this.performRequest<{ tags: string[] }>(`/short-urls/${shortCode}/tags`, 'PUT', { domain }, { tags })\n .then(({ data }) => data.tags);\n\n public readonly updateShortUrl = async (\n shortCode: string,\n domain: OptionalString,\n data: ShlinkShortUrlData,\n ): Promise =>\n this.performRequest(`/short-urls/${shortCode}`, 'PATCH', { domain }, data)\n .then(({ data }) => data);\n\n public readonly listTags = async (): Promise =>\n this.performRequest<{ tags: ShlinkTagsResponse }>('/tags', 'GET', { withStats: 'true' })\n .then((resp) => resp.data.tags)\n .then(({ data, stats }) => ({ tags: data, stats }));\n\n public readonly deleteTags = async (tags: string[]): Promise<{ tags: string[] }> =>\n this.performRequest('/tags', 'DELETE', { tags })\n .then(() => ({ tags }));\n\n public readonly editTag = async (oldName: string, newName: string): Promise<{ oldName: string; newName: string }> =>\n this.performRequest('/tags', 'PUT', {}, { oldName, newName })\n .then(() => ({ oldName, newName }));\n\n public readonly health = async (): Promise =>\n this.performRequest('/health', 'GET')\n .then((resp) => resp.data);\n\n public readonly mercureInfo = async (): Promise =>\n this.performRequest('/mercure-info', 'GET')\n .then((resp) => resp.data);\n\n public readonly listDomains = async (): Promise =>\n this.performRequest<{ domains: ShlinkDomainsResponse }>('/domains', 'GET').then(({ data }) => data.domains);\n\n public readonly editDomainRedirects = async (\n domainRedirects: ShlinkEditDomainRedirects,\n ): Promise =>\n this.performRequest('/domains/redirects', 'PATCH', {}, domainRedirects).then(({ data }) => data);\n\n private readonly performRequest = async (url: string, method: Method = 'GET', query = {}, body = {}): Promise> =>\n this.axios({\n method,\n url: `${buildShlinkBaseUrl(this.baseUrl)}${url}`,\n headers: { 'X-Api-Key': this.apiKey },\n params: rejectNilProps(query),\n data: body,\n paramsSerializer: stringifyQuery,\n });\n}\n","import { AxiosInstance } from 'axios';\nimport { prop } from 'ramda';\nimport { hasServerData, SelectedServer, ServerWithId } from '../../servers/data';\nimport { GetState } from '../../container/types';\nimport ShlinkApiClient from './ShlinkApiClient';\n\nconst apiClients: Record = {};\n\nconst isGetState = (getStateOrSelectedServer: GetState | ServerWithId): getStateOrSelectedServer is GetState =>\n typeof getStateOrSelectedServer === 'function';\nconst getSelectedServerFromState = (getState: GetState): SelectedServer => prop('selectedServer', getState());\n\nexport type ShlinkApiClientBuilder = (getStateOrSelectedServer: GetState | ServerWithId) => ShlinkApiClient;\n\nconst buildShlinkApiClient = (axios: AxiosInstance): ShlinkApiClientBuilder => (\n getStateOrSelectedServer: GetState | ServerWithId,\n) => {\n const server = isGetState(getStateOrSelectedServer)\n ? getSelectedServerFromState(getStateOrSelectedServer)\n : getStateOrSelectedServer;\n\n if (!hasServerData(server)) {\n throw new Error('There\\'s no selected server or it is not found');\n }\n\n const { url, apiKey } = server;\n const clientKey = `${url}_${apiKey}`;\n\n if (!apiClients[clientKey]) {\n apiClients[clientKey] = new ShlinkApiClient(axios, url, apiKey);\n }\n\n return apiClients[clientKey];\n};\n\nexport default buildShlinkApiClient;\n","import Bottle from 'bottlejs';\nimport buildShlinkApiClient from './ShlinkApiClientBuilder';\n\nconst provideServices = (bottle: Bottle) => {\n bottle.serviceFactory('buildShlinkApiClient', buildShlinkApiClient, 'axios');\n};\n\nexport default provideServices;\n","import { FC, MouseEventHandler } from 'react';\nimport classNames from 'classnames';\nimport ColorGenerator from '../../utils/services/ColorGenerator';\nimport './Tag.scss';\n\ninterface TagProps {\n colorGenerator: ColorGenerator;\n text: string;\n className?: string;\n clearable?: boolean;\n onClick?: MouseEventHandler;\n onClose?: MouseEventHandler;\n}\n\nconst Tag: FC = ({ text, children, clearable, className = '', colorGenerator, onClick, onClose }) => (\n \n {children ?? text}\n {clearable && ×}\n \n);\n\nexport default Tag;\n","import { FC } from 'react';\nimport { Dropdown, DropdownMenu, DropdownToggle } from 'reactstrap';\nimport { useToggle } from './helpers/hooks';\nimport './DropdownBtn.scss';\n\nexport interface DropdownBtnProps {\n text: string;\n disabled?: boolean;\n className?: string;\n dropdownClassName?: string;\n right?: boolean;\n minWidth?: number;\n}\n\nexport const DropdownBtn: FC = (\n { text, disabled = false, className = '', children, dropdownClassName, right = false, minWidth },\n) => {\n const [ isOpen, toggle ] = useToggle();\n const toggleClasses = `dropdown-btn__toggle btn-block ${className}`;\n const style = { minWidth: minWidth && `${minWidth}px` };\n\n return (\n \n {text}\n {children}\n \n );\n};\n","import { format, formatISO, isBefore, isEqual, isWithinInterval, parse, parseISO as stdParseISO } from 'date-fns';\nimport { OptionalString } from '../utils';\n\nexport type DateOrString = Date | string;\n\ntype NullableDate = DateOrString | null;\n\nexport const isDateObject = (date: DateOrString): date is Date => typeof date !== 'string';\n\nconst formatDateFromFormat = (date?: NullableDate, theFormat?: string): OptionalString => {\n if (!date || !isDateObject(date)) {\n return date;\n }\n\n return theFormat ? format(date, theFormat) : formatISO(date);\n};\n\nexport const formatDate = (format = 'yyyy-MM-dd') => (date?: NullableDate) => formatDateFromFormat(date, format);\n\nexport const formatIsoDate = (date?: NullableDate) => formatDateFromFormat(date, undefined);\n\nexport const formatInternational = formatDate();\n\nexport const parseDate = (date: string, format: string) => parse(date, format, new Date());\n\nexport const parseISO = (date: DateOrString): Date => isDateObject(date) ? date : stdParseISO(date);\n\nexport const isBetween = (date: DateOrString, start?: DateOrString, end?: DateOrString): boolean => {\n try {\n return isWithinInterval(parseISO(date), { start: parseISO(start ?? date), end: parseISO(end ?? date) });\n } catch (e) {\n return false;\n }\n};\n\nexport const isBeforeOrEqual = (date: Date | number, dateToCompare: Date | number) =>\n isEqual(date, dateToCompare) || isBefore(date, dateToCompare);\n","import { subDays, startOfDay, endOfDay } from 'date-fns';\nimport { cond, filter, isEmpty, T } from 'ramda';\nimport { DateOrString, formatInternational, isBeforeOrEqual, parseISO } from '../../helpers/date';\n\nexport interface DateRange {\n startDate?: Date | null;\n endDate?: Date | null;\n}\n\nexport type DateInterval = 'all' | 'today' | 'yesterday' | 'last7Days' | 'last30Days' | 'last90Days' | 'last180Days' | 'last365Days';\n\nexport const dateRangeIsEmpty = (dateRange?: DateRange): boolean => dateRange === undefined\n || isEmpty(filter(Boolean, dateRange as any));\n\nexport const rangeIsInterval = (range?: DateRange | DateInterval): range is DateInterval =>\n typeof range === 'string';\n\nconst INTERVAL_TO_STRING_MAP: Record = {\n today: 'Today',\n yesterday: 'Yesterday',\n last7Days: 'Last 7 days',\n last30Days: 'Last 30 days',\n last90Days: 'Last 90 days',\n last180Days: 'Last 180 days',\n last365Days: 'Last 365 days',\n all: undefined,\n};\n\nexport const DATE_INTERVALS = Object.keys(INTERVAL_TO_STRING_MAP).filter((value) => value !== 'all') as DateInterval[];\n\nconst dateRangeToString = (range?: DateRange): string | undefined => {\n if (!range || dateRangeIsEmpty(range)) {\n return undefined;\n }\n\n if (range.startDate && !range.endDate) {\n return `Since ${formatInternational(range.startDate)}`;\n }\n\n if (!range.startDate && range.endDate) {\n return `Until ${formatInternational(range.endDate)}`;\n }\n\n return `${formatInternational(range.startDate)} - ${formatInternational(range.endDate)}`;\n};\n\nexport const rangeOrIntervalToString = (range?: DateRange | DateInterval): string | undefined => {\n if (!range || range === 'all') {\n return undefined;\n }\n\n if (!rangeIsInterval(range)) {\n return dateRangeToString(range);\n }\n\n return INTERVAL_TO_STRING_MAP[range];\n};\n\nconst startOfDaysAgo = (daysAgo: number) => startOfDay(subDays(new Date(), daysAgo));\nconst endingToday = (startDate: Date): DateRange => ({ startDate, endDate: endOfDay(new Date()) });\n\nexport const intervalToDateRange = (dateInterval?: DateInterval): DateRange => {\n if (!dateInterval || dateInterval === 'all') {\n return {};\n }\n\n switch (dateInterval) {\n case 'today':\n return endingToday(startOfDay(new Date()));\n case 'yesterday':\n return { startDate: startOfDaysAgo(1), endDate: endOfDay(subDays(new Date(), 1)) };\n case 'last7Days':\n return endingToday(startOfDaysAgo(7));\n case 'last30Days':\n return endingToday(startOfDaysAgo(30));\n case 'last90Days':\n return endingToday(startOfDaysAgo(90));\n case 'last180Days':\n return endingToday(startOfDaysAgo(180));\n case 'last365Days':\n return endingToday(startOfDaysAgo(365));\n }\n\n return {};\n};\n\nexport const dateToMatchingInterval = (date: DateOrString): DateInterval => {\n const theDate: Date = parseISO(date);\n\n return cond([\n [ () => isBeforeOrEqual(startOfDay(new Date()), theDate), () => 'today' ],\n [ () => isBeforeOrEqual(startOfDaysAgo(1), theDate), () => 'yesterday' ],\n [ () => isBeforeOrEqual(startOfDaysAgo(7), theDate), () => 'last7Days' ],\n [ () => isBeforeOrEqual(startOfDaysAgo(30), theDate), () => 'last30Days' ],\n [ () => isBeforeOrEqual(startOfDaysAgo(90), theDate), () => 'last90Days' ],\n [ () => isBeforeOrEqual(startOfDaysAgo(180), theDate), () => 'last180Days' ],\n [ () => isBeforeOrEqual(startOfDaysAgo(365), theDate), () => 'last365Days' ],\n [ T, () => 'all' ],\n ])();\n};\n","import { useRef } from 'react';\nimport { isNil } from 'ramda';\nimport DatePicker, { ReactDatePickerProps } from 'react-datepicker';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCalendarAlt as calendarIcon } from '@fortawesome/free-regular-svg-icons';\nimport classNames from 'classnames';\nimport './DateInput.scss';\n\nexport type DateInputProps = ReactDatePickerProps;\n\nconst DateInput = (props: DateInputProps) => {\n const { className, isClearable, selected } = props;\n const showCalendarIcon = !isClearable || isNil(selected);\n const ref = useRef<{ input: HTMLInputElement }>();\n\n return (\n
\n \n {showCalendarIcon && (\n ref.current?.input.focus()}\n />\n )}\n
\n );\n};\n\nexport default DateInput;\n","import DateInput from '../DateInput';\nimport { DateRange } from './types';\n\ninterface DateRangeRowProps extends DateRange {\n onStartDateChange: (date: Date | null) => void;\n onEndDateChange: (date: Date | null) => void;\n disabled?: boolean;\n}\n\nconst DateRangeRow = (\n { startDate = null, endDate = null, disabled = false, onStartDateChange, onEndDateChange }: DateRangeRowProps,\n) => (\n
\n
\n \n
\n
\n \n
\n
\n);\n\nexport default DateRangeRow;\n","import { DropdownItem } from 'reactstrap';\nimport { FC } from 'react';\nimport { DATE_INTERVALS, DateInterval, rangeOrIntervalToString } from './types';\n\nexport interface DateIntervalDropdownProps {\n active?: DateInterval;\n allText: string;\n onChange: (interval: DateInterval) => void;\n}\n\nexport const DateIntervalDropdownItems: FC = ({ active, allText, onChange }) => (\n <>\n onChange('all')}>\n {allText}\n \n \n {DATE_INTERVALS.map(\n (interval) => (\n onChange(interval)}>\n {rangeOrIntervalToString(interval)}\n \n ),\n )}\n \n);\n","import { useState } from 'react';\nimport { DropdownItem } from 'reactstrap';\nimport { DropdownBtn } from '../DropdownBtn';\nimport { useEffectExceptFirstTime } from '../helpers/hooks';\nimport {\n DateInterval,\n DateRange,\n rangeOrIntervalToString,\n intervalToDateRange,\n rangeIsInterval,\n dateRangeIsEmpty,\n} from './types';\nimport DateRangeRow from './DateRangeRow';\nimport { DateIntervalDropdownItems } from './DateIntervalDropdownItems';\n\nexport interface DateRangeSelectorProps {\n initialDateRange?: DateInterval | DateRange;\n disabled?: boolean;\n onDatesChange: (dateRange: DateRange) => void;\n defaultText: string;\n updatable?: boolean;\n}\n\nexport const DateRangeSelector = (\n { onDatesChange, initialDateRange, defaultText, disabled, updatable = false }: DateRangeSelectorProps,\n) => {\n const initialIntervalIsRange = rangeIsInterval(initialDateRange);\n const [ activeInterval, setActiveInterval ] = useState(initialIntervalIsRange ? initialDateRange : undefined);\n const [ activeDateRange, setActiveDateRange ] = useState(initialIntervalIsRange ? undefined : initialDateRange);\n\n const updateDateRange = (dateRange: DateRange) => {\n setActiveInterval(dateRangeIsEmpty(dateRange) ? 'all' : undefined);\n setActiveDateRange(dateRange);\n onDatesChange(dateRange);\n };\n const updateInterval = (dateInterval: DateInterval) => {\n setActiveInterval(dateInterval);\n setActiveDateRange(undefined);\n onDatesChange(intervalToDateRange(dateInterval));\n };\n\n updatable && useEffectExceptFirstTime(() => {\n const isDateInterval = rangeIsInterval(initialDateRange);\n\n isDateInterval && updateInterval(initialDateRange);\n initialDateRange && !isDateInterval && updateDateRange(initialDateRange);\n }, [ initialDateRange ]);\n\n return (\n \n \n \n Custom:\n \n updateDateRange({ ...activeDateRange, startDate })}\n onEndDateChange={(endDate) => updateDateRange({ ...activeDateRange, endDate })}\n />\n \n \n );\n};\n","import { ChangeEvent, FC, useRef } from 'react';\nimport classNames from 'classnames';\nimport { v4 as uuid } from 'uuid';\nimport { identity } from 'ramda';\n\nexport interface BooleanControlProps {\n checked?: boolean;\n onChange?: (checked: boolean, e: ChangeEvent) => void;\n className?: string;\n inline?: boolean;\n}\n\ninterface BooleanControlWithTypeProps extends BooleanControlProps {\n type: 'switch' | 'checkbox';\n}\n\nconst BooleanControl: FC = (\n { checked = false, onChange = identity, className, children, type, inline = false },\n) => {\n const { current: id } = useRef(uuid());\n const onChecked = (e: ChangeEvent) => onChange(e.target.checked, e);\n const typeClasses = {\n 'form-switch': type === 'switch',\n 'form-checkbox': type === 'checkbox',\n };\n const style = inline ? { display: 'inline-block' } : {};\n\n return (\n \n \n \n \n );\n};\n\nexport default BooleanControl;\n","import { FC } from 'react';\nimport BooleanControl, { BooleanControlProps } from './BooleanControl';\n\nconst ToggleSwitch: FC = (props) => ;\n\nexport default ToggleSwitch;\n","import { FC, useRef } from 'react';\nimport { UncontrolledTooltip, UncontrolledTooltipProps } from 'reactstrap';\nimport { BooleanControlProps } from './BooleanControl';\nimport ToggleSwitch from './ToggleSwitch';\n\nexport type TooltipToggleSwitchProps = BooleanControlProps & { tooltip?: Omit };\n\nexport const TooltipToggleSwitch: FC = ({ children, tooltip = {}, ...rest }) => {\n const ref = useRef();\n\n return (\n <>\n {\n ref.current = el ?? undefined;\n }}\n >\n \n \n ref.current) as any} {...tooltip}>{children}\n \n );\n};\n","import { useParams, useLocation, useNavigate } from 'react-router-dom';\nimport { useMemo } from 'react';\nimport { isEmpty, pipe } from 'ramda';\nimport { parseQuery, stringifyQuery } from '../../utils/helpers/query';\nimport { ShortUrlsOrder, ShortUrlsOrderableFields } from '../data';\nimport { orderToString, stringToOrder } from '../../utils/helpers/ordering';\nimport { TagsFilteringMode } from '../../api/types';\n\ntype ToFirstPage = (extra: Partial) => void;\n\nexport interface ShortUrlListRouteParams {\n page: string;\n serverId: string;\n}\n\ninterface ShortUrlsQueryCommon {\n tags?: string;\n search?: string;\n startDate?: string;\n endDate?: string;\n tagsMode?: TagsFilteringMode;\n}\n\ninterface ShortUrlsQuery extends ShortUrlsQueryCommon {\n orderBy?: string;\n}\n\ninterface ShortUrlsFiltering extends ShortUrlsQueryCommon {\n orderBy?: ShortUrlsOrder;\n}\n\nexport const useShortUrlsQuery = (): [ShortUrlsFiltering, ToFirstPage] => {\n const navigate = useNavigate();\n const location = useLocation();\n const params = useParams<{ serverId: string }>();\n\n const query = useMemo(\n pipe(\n () => parseQuery(location.search),\n ({ orderBy, ...rest }: ShortUrlsQuery): ShortUrlsFiltering => !orderBy ? rest : {\n ...rest,\n orderBy: stringToOrder(orderBy),\n },\n ),\n [ location.search ],\n );\n const toFirstPageWithExtra = (extra: Partial) => {\n const { orderBy, ...mergedQuery } = { ...query, ...extra };\n const normalizedQuery: ShortUrlsQuery = { ...mergedQuery, orderBy: orderBy && orderToString(orderBy) };\n const evolvedQuery = stringifyQuery(normalizedQuery);\n const queryString = isEmpty(evolvedQuery) ? '' : `?${evolvedQuery}`;\n\n navigate(`/server/${params.serverId}/list-short-urls/1${queryString}`);\n };\n\n return [ query, toFirstPageWithExtra ];\n};\n","import { faTags as tagsIcon } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { isEmpty, pipe } from 'ramda';\nimport { parseISO } from 'date-fns';\nimport SearchField from '../utils/SearchField';\nimport Tag from '../tags/helpers/Tag';\nimport { DateRangeSelector } from '../utils/dates/DateRangeSelector';\nimport { formatIsoDate } from '../utils/helpers/date';\nimport ColorGenerator from '../utils/services/ColorGenerator';\nimport { DateRange } from '../utils/dates/types';\nimport { supportsAllTagsFiltering } from '../utils/helpers/features';\nimport { SelectedServer } from '../servers/data';\nimport { TooltipToggleSwitch } from '../utils/TooltipToggleSwitch';\nimport { useShortUrlsQuery } from './helpers/hooks';\nimport './ShortUrlsFilteringBar.scss';\n\ninterface ShortUrlsFilteringProps {\n selectedServer: SelectedServer;\n}\n\nconst dateOrNull = (date?: string) => date ? parseISO(date) : null;\n\nconst ShortUrlsFilteringBar = (colorGenerator: ColorGenerator) => ({ selectedServer }: ShortUrlsFilteringProps) => {\n const [{ search, tags, startDate, endDate, tagsMode = 'any' }, toFirstPage ] = useShortUrlsQuery();\n const selectedTags = tags?.split(',') ?? [];\n const setDates = pipe(\n ({ startDate, endDate }: DateRange) => ({\n startDate: formatIsoDate(startDate) ?? undefined,\n endDate: formatIsoDate(endDate) ?? undefined,\n }),\n toFirstPage,\n );\n const setSearch = pipe(\n (searchTerm: string) => isEmpty(searchTerm) ? undefined : searchTerm,\n (search) => toFirstPage({ search }),\n );\n const removeTag = pipe(\n (tag: string) => selectedTags.filter((selectedTag) => selectedTag !== tag),\n (tagsList) => tagsList.length === 0 ? undefined : tagsList.join(','),\n (tags) => toFirstPage({ tags }),\n );\n const canChangeTagsMode = supportsAllTagsFiltering(selectedServer);\n const toggleTagsMode = pipe(\n () => tagsMode === 'any' ? 'all' : 'any',\n (tagsMode) => toFirstPage({ tagsMode }),\n );\n\n return (\n
\n \n\n
\n
\n
\n \n
\n
\n
\n\n {selectedTags.length > 0 && (\n

\n {canChangeTagsMode && selectedTags.length > 1 && (\n
\n \n {tagsMode === 'all' ? 'Short URLs including all tags.' : 'Short URLs including any tag.'}\n \n
\n )}\n \n {selectedTags.map((tag) =>\n removeTag(tag)} />)}\n

\n )}\n
\n );\n};\n\nexport default ShortUrlsFilteringBar;\n","import { UncontrolledDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\nimport { toPairs } from 'ramda';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSortAmountUp as sortAscIcon, faSortAmountDown as sortDescIcon } from '@fortawesome/free-solid-svg-icons';\nimport classNames from 'classnames';\nimport { determineOrderDir, Order, OrderDir } from './helpers/ordering';\nimport './OrderingDropdown.scss';\n\nexport interface OrderingDropdownProps {\n items: Record;\n order: Order;\n onChange: (orderField?: T, orderDir?: OrderDir) => void;\n isButton?: boolean;\n right?: boolean;\n}\n\nexport function OrderingDropdown(\n { items, order, onChange, isButton = true, right = false }: OrderingDropdownProps,\n) {\n const handleItemClick = (fieldKey: T) => () => {\n const newOrderDir = determineOrderDir(fieldKey, order.field, order.dir);\n\n onChange(newOrderDir ? fieldKey : undefined, newOrderDir);\n };\n\n return (\n \n \n {!isButton && <>Order by}\n {isButton && !order.field && <>Order by...}\n {isButton && order.field && `Order by: \"${items[order.field]}\" - \"${order.dir ?? 'DESC'}\"`}\n \n \n {toPairs(items).map(([ fieldKey, fieldValue ]) => (\n \n {fieldValue}\n {order.field === fieldKey && (\n \n )}\n \n ))}\n \n onChange()}>\n Clear selection\n \n \n \n );\n}\n","import { FC, useEffect } from 'react';\nimport { pipe } from 'ramda';\nimport { useParams } from 'react-router-dom';\nimport { CreateVisit } from '../../visits/types';\nimport { MercureInfo } from '../reducers/mercureInfo';\nimport { bindToMercureTopic } from './index';\n\nexport interface MercureBoundProps {\n createNewVisits: (createdVisits: CreateVisit[]) => void;\n loadMercureInfo: () => void;\n mercureInfo: MercureInfo;\n}\n\nexport function boundToMercureHub(\n WrappedComponent: FC,\n getTopicsForProps: (props: T, routeParams: any) => string[],\n) {\n const pendingUpdates = new Set();\n\n return (props: MercureBoundProps & T) => {\n const { createNewVisits, loadMercureInfo, mercureInfo } = props;\n const { interval } = mercureInfo;\n const params = useParams();\n\n useEffect(() => {\n const onMessage = (visit: CreateVisit) => interval ? pendingUpdates.add(visit) : createNewVisits([ visit ]);\n const topics = getTopicsForProps(props, params);\n const closeEventSource = bindToMercureTopic(mercureInfo, topics, onMessage, loadMercureInfo);\n\n if (!interval) {\n return closeEventSource;\n }\n\n const timer = setInterval(() => {\n createNewVisits([ ...pendingUpdates ]);\n pendingUpdates.clear();\n }, interval * 1000 * 60);\n\n return pipe(() => clearInterval(timer), () => closeEventSource?.());\n }, [ mercureInfo ]);\n\n return ;\n };\n}\n","import { EventSourcePolyfill as EventSource } from 'event-source-polyfill';\nimport { MercureInfo } from '../reducers/mercureInfo';\n\nexport const bindToMercureTopic = (mercureInfo: MercureInfo, topics: string[], onMessage: (message: T) => void, onTokenExpired: () => void) => { // eslint-disable-line max-len\n const { mercureHubUrl, token, loading, error } = mercureInfo;\n\n if (loading || error || !mercureHubUrl) {\n return undefined;\n }\n\n const onEventSourceMessage = ({ data }: { data: string }) => onMessage(JSON.parse(data) as T);\n const onEventSourceError = ({ status }: { status: number }) => status === 401 && onTokenExpired();\n\n const subscriptions = topics.map((topic) => {\n const hubUrl = new URL(mercureHubUrl);\n\n hubUrl.searchParams.append('topic', topic);\n const es = new EventSource(hubUrl, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n es.onmessage = onEventSourceMessage;\n es.onerror = onEventSourceError;\n\n return es;\n });\n\n return () => subscriptions.forEach((es) => es.close());\n};\n","export class Topics {\n public static readonly visits = 'https://shlink.io/new-visit';\n\n public static readonly orphanVisits = 'https://shlink.io/new-orphan-visit';\n\n public static readonly shortUrlVisits = (shortCode: string) => `https://shlink.io/new-visit/${shortCode}`;\n}\n","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCaretDown as caretDownIcon, faCaretUp as caretUpIcon } from '@fortawesome/free-solid-svg-icons';\nimport { Order } from '../helpers/ordering';\n\ninterface TableOrderIconProps {\n currentOrder: Order;\n field: T;\n className?: string;\n}\n\nexport function TableOrderIcon(\n { currentOrder, field, className = 'ms-1' }: TableOrderIconProps,\n) {\n if (!currentOrder.dir || currentOrder.field !== field) {\n return null;\n }\n\n return ;\n}\n","import { isEmpty, propEq, values } from 'ramda';\nimport { useState, useEffect, useMemo, FC, useRef } from 'react';\nimport { Button, Progress, Row } from 'reactstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCalendarAlt, faMapMarkedAlt, faList, faChartPie, faFileDownload } from '@fortawesome/free-solid-svg-icons';\nimport { IconDefinition } from '@fortawesome/fontawesome-common-types';\nimport { Route, Routes, Navigate } from 'react-router-dom';\nimport classNames from 'classnames';\nimport { DateRangeSelector } from '../utils/dates/DateRangeSelector';\nimport Message from '../utils/Message';\nimport { DateInterval, DateRange, intervalToDateRange } from '../utils/dates/types';\nimport { Result } from '../utils/Result';\nimport { ShlinkApiError } from '../api/ShlinkApiError';\nimport { Settings } from '../settings/reducers/settings';\nimport { SelectedServer } from '../servers/data';\nimport { supportsBotVisits } from '../utils/helpers/features';\nimport { prettify } from '../utils/helpers/numbers';\nimport { NavPillItem, NavPills } from '../utils/NavPills';\nimport LineChartCard from './charts/LineChartCard';\nimport VisitsTable from './VisitsTable';\nimport { NormalizedOrphanVisit, NormalizedVisit, VisitsFilter, VisitsInfo, VisitsParams } from './types';\nimport OpenMapModalBtn from './helpers/OpenMapModalBtn';\nimport { normalizeVisits, processStatsFromVisits } from './services/VisitsParser';\nimport { VisitsFilterDropdown } from './helpers/VisitsFilterDropdown';\nimport { HighlightableProps, highlightedVisitsToStats } from './types/helpers';\nimport { DoughnutChartCard } from './charts/DoughnutChartCard';\nimport { SortableBarChartCard } from './charts/SortableBarChartCard';\n\nexport interface VisitsStatsProps {\n getVisits: (params: VisitsParams, doIntervalFallback?: boolean) => void;\n visitsInfo: VisitsInfo;\n settings: Settings;\n selectedServer: SelectedServer;\n cancelGetVisits: () => void;\n domain?: string;\n exportCsv: (visits: NormalizedVisit[]) => void;\n isOrphanVisits?: boolean;\n}\n\ninterface VisitsNavLinkProps {\n title: string;\n subPath: string;\n icon: IconDefinition;\n}\n\ntype Section = 'byTime' | 'byContext' | 'byLocation' | 'list';\n\nconst sections: Record = {\n byTime: { title: 'By time', subPath: 'by-time', icon: faCalendarAlt },\n byContext: { title: 'By context', subPath: 'by-context', icon: faChartPie },\n byLocation: { title: 'By location', subPath: 'by-location', icon: faMapMarkedAlt },\n list: { title: 'List', subPath: 'list', icon: faList },\n};\n\nlet selectedBar: string | undefined;\n\nconst VisitsStats: FC = ({\n children,\n visitsInfo,\n getVisits,\n cancelGetVisits,\n domain,\n settings,\n exportCsv,\n selectedServer,\n isOrphanVisits = false,\n}) => {\n const { visits, loading, loadingLarge, error, errorData, progress, fallbackInterval } = visitsInfo;\n const [ initialInterval, setInitialInterval ] = useState(\n fallbackInterval ?? settings.visits?.defaultInterval ?? 'last30Days',\n );\n const [ dateRange, setDateRange ] = useState(intervalToDateRange(initialInterval));\n const [ highlightedVisits, setHighlightedVisits ] = useState([]);\n const [ highlightedLabel, setHighlightedLabel ] = useState();\n const [ visitsFilter, setVisitsFilter ] = useState({});\n const botsSupported = supportsBotVisits(selectedServer);\n const isFirstLoad = useRef(true);\n\n const buildSectionUrl = (subPath?: string) => {\n const query = domain ? `?domain=${domain}` : '';\n\n return !subPath ? `${query}` : `${subPath}${query}`;\n };\n const normalizedVisits = useMemo(() => normalizeVisits(visits), [ visits ]);\n const { os, browsers, referrers, countries, cities, citiesForMap, visitedUrls } = useMemo(\n () => processStatsFromVisits(normalizedVisits),\n [ normalizedVisits ],\n );\n const mapLocations = values(citiesForMap);\n\n const setSelectedVisits = (selectedVisits: NormalizedVisit[]) => {\n selectedBar = undefined;\n setHighlightedVisits(selectedVisits);\n };\n const highlightVisitsForProp = (prop: HighlightableProps) => (value: string) => {\n const newSelectedBar = `${prop}_${value}`;\n\n if (selectedBar === newSelectedBar) {\n setHighlightedVisits([]);\n setHighlightedLabel(undefined);\n selectedBar = undefined;\n } else {\n setHighlightedVisits((normalizedVisits as NormalizedOrphanVisit[]).filter(propEq(prop, value)));\n setHighlightedLabel(value);\n selectedBar = newSelectedBar;\n }\n };\n\n useEffect(() => cancelGetVisits, []);\n useEffect(() => {\n getVisits({ dateRange, filter: visitsFilter }, isFirstLoad.current);\n isFirstLoad.current = false;\n }, [ dateRange, visitsFilter ]);\n useEffect(() => {\n fallbackInterval && setInitialInterval(fallbackInterval);\n }, [ fallbackInterval ]);\n\n const renderVisitsContent = () => {\n if (loadingLarge) {\n return (\n \n This is going to take a while... :S\n \n \n );\n }\n\n if (loading) {\n return ;\n }\n\n if (error) {\n return (\n \n \n \n );\n }\n\n if (isEmpty(visits)) {\n return There are no visits matching current filter :(;\n }\n\n return (\n <>\n \n {Object.values(sections).map(({ title, icon, subPath }, index) => (\n \n \n {title}\n \n ))}\n \n \n \n \n \n \n )}\n />\n\n \n
\n \n
\n
\n \n
\n
\n \n
\n {isOrphanVisits && (\n
\n \n
\n )}\n \n )}\n />\n\n \n
\n \n
\n
\n \n mapLocations.length > 0 &&\n \n }\n sortingItems={{\n name: 'City name',\n amount: 'Visits amount',\n }}\n onClick={highlightVisitsForProp('city')}\n />\n
\n \n )}\n />\n\n \n \n \n )}\n />\n\n } />\n
\n
\n \n );\n };\n\n return (\n <>\n {children}\n\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n {visits.length > 0 && (\n
\n
\n setSelectedVisits([])}\n >\n Clear selection {highlightedVisits.length > 0 && <>({prettify(highlightedVisits.length)})}\n \n exportCsv(normalizedVisits)}\n >\n Export ({prettify(normalizedVisits.length)})\n \n
\n
\n )}\n
\n
\n\n
\n {renderVisitsContent()}\n
\n \n );\n};\n\nexport default VisitsStats;\n","import { Action } from 'redux';\n\ntype ActionHandler = (currentState: State, action: AT) => State;\ntype ActionHandlerMap = Record>;\n\nexport const buildReducer = (map: ActionHandlerMap, initialState: State) => (\n state: State | undefined,\n action: AT,\n): State => {\n const { type } = action;\n const actionHandler = map[type];\n const currentState = state ?? initialState;\n\n return actionHandler ? actionHandler(currentState, action) : currentState;\n};\n\nexport const buildActionCreator = (type: T) => (): Action => ({ type });\n","import { Action } from 'redux';\nimport { dissoc, mergeDeepRight } from 'ramda';\nimport { buildReducer } from '../../utils/helpers/redux';\nimport { RecursivePartial } from '../../utils/utils';\nimport { Theme } from '../../utils/theme';\nimport { DateInterval } from '../../utils/dates/types';\nimport { TagsOrder } from '../../tags/data/TagsListChildrenProps';\nimport { ShortUrlsOrder } from '../../short-urls/data';\n\nexport const SET_SETTINGS = 'shlink/realTimeUpdates/SET_SETTINGS';\n\nexport const DEFAULT_SHORT_URLS_ORDERING: ShortUrlsOrder = {\n field: 'dateCreated',\n dir: 'DESC',\n};\n\n/**\n * Important! When adding new props in the main Settings interface or any of the nested props, they have to be set as\n * optional, as old instances of the app will load partial objects from local storage until it is saved again.\n */\n\nexport interface RealTimeUpdatesSettings {\n enabled: boolean;\n interval?: number;\n}\n\nexport type TagFilteringMode = 'startsWith' | 'includes';\n\nexport interface ShortUrlCreationSettings {\n validateUrls: boolean;\n tagFilteringMode?: TagFilteringMode;\n forwardQuery?: boolean;\n}\n\nexport type TagsMode = 'cards' | 'list';\n\nexport interface UiSettings {\n theme: Theme;\n}\n\nexport interface VisitsSettings {\n defaultInterval: DateInterval;\n}\n\nexport interface TagsSettings {\n defaultOrdering?: TagsOrder;\n defaultMode?: TagsMode;\n}\n\nexport interface ShortUrlsListSettings {\n defaultOrdering?: ShortUrlsOrder;\n}\n\nexport interface Settings {\n realTimeUpdates: RealTimeUpdatesSettings;\n shortUrlCreation?: ShortUrlCreationSettings;\n shortUrlsList?: ShortUrlsListSettings;\n ui?: UiSettings;\n visits?: VisitsSettings;\n tags?: TagsSettings;\n}\n\nconst initialState: Settings = {\n realTimeUpdates: {\n enabled: true,\n },\n shortUrlCreation: {\n validateUrls: false,\n },\n ui: {\n theme: 'light',\n },\n visits: {\n defaultInterval: 'last30Days',\n },\n shortUrlsList: {\n defaultOrdering: DEFAULT_SHORT_URLS_ORDERING,\n },\n};\n\ntype SettingsAction = Action & Settings;\n\ntype PartialSettingsAction = Action & RecursivePartial;\n\nexport default buildReducer({\n [SET_SETTINGS]: (state, action) => mergeDeepRight(state, dissoc('type', action)),\n}, initialState);\n\nexport const toggleRealTimeUpdates = (enabled: boolean): PartialSettingsAction => ({\n type: SET_SETTINGS,\n realTimeUpdates: { enabled },\n});\n\nexport const setRealTimeUpdatesInterval = (interval: number): PartialSettingsAction => ({\n type: SET_SETTINGS,\n realTimeUpdates: { interval },\n});\n\nexport const setShortUrlCreationSettings = (settings: ShortUrlCreationSettings): PartialSettingsAction => ({\n type: SET_SETTINGS,\n shortUrlCreation: settings,\n});\n\nexport const setShortUrlsListSettings = (settings: ShortUrlsListSettings): PartialSettingsAction => ({\n type: SET_SETTINGS,\n shortUrlsList: settings,\n});\n\nexport const setUiSettings = (settings: UiSettings): PartialSettingsAction => ({\n type: SET_SETTINGS,\n ui: settings,\n});\n\nexport const setVisitsSettings = (settings: VisitsSettings): PartialSettingsAction => ({\n type: SET_SETTINGS,\n visits: settings,\n});\n\nexport const setTagsSettings = (settings: TagsSettings): PartialSettingsAction => ({\n type: SET_SETTINGS,\n tags: settings,\n});\n","const TEN_ROUNDING_NUMBER = 10;\nconst { ceil } = Math;\nconst formatter = new Intl.NumberFormat('en-US');\n\nexport const prettify = (number: number | string) => formatter.format(Number(number));\n\nexport const roundTen = (number: number) => ceil(number / TEN_ROUNDING_NUMBER) * TEN_ROUNDING_NUMBER;\n","import { max, min, range } from 'ramda';\nimport { prettify } from './numbers';\n\nconst DELTA = 2;\n\nexport const ELLIPSIS = '...';\n\ntype Ellipsis = typeof ELLIPSIS;\n\nexport type NumberOrEllipsis = number | Ellipsis;\n\nexport const progressivePagination = (currentPage: number, pageCount: number): NumberOrEllipsis[] => {\n const pages: NumberOrEllipsis[] = range(\n max(DELTA, currentPage - DELTA),\n min(pageCount - 1, currentPage + DELTA) + 1,\n );\n\n if (currentPage - DELTA > DELTA) {\n pages.unshift(ELLIPSIS);\n }\n if (currentPage + DELTA < pageCount - 1) {\n pages.push(ELLIPSIS);\n }\n\n pages.unshift(1);\n pages.push(pageCount);\n\n return pages;\n};\n\nexport const pageIsEllipsis = (pageNumber: NumberOrEllipsis): pageNumber is Ellipsis => pageNumber === ELLIPSIS;\n\nexport const prettifyPageNumber = (pageNumber: NumberOrEllipsis): string =>\n pageIsEllipsis(pageNumber) ? pageNumber : prettify(pageNumber);\n\nexport const keyForPage = (pageNumber: NumberOrEllipsis, index: number) => !pageIsEllipsis(pageNumber) ? `${pageNumber}` : `${pageNumber}_${index}`;\n","import { Link } from 'react-router-dom';\nimport { Pagination, PaginationItem, PaginationLink } from 'reactstrap';\nimport {\n pageIsEllipsis,\n keyForPage,\n progressivePagination,\n prettifyPageNumber,\n NumberOrEllipsis,\n} from '../utils/helpers/pagination';\nimport { ShlinkPaginator } from '../api/types';\n\ninterface PaginatorProps {\n paginator?: ShlinkPaginator;\n serverId: string;\n currentQueryString?: string;\n}\n\nconst Paginator = ({ paginator, serverId, currentQueryString = '' }: PaginatorProps) => {\n const { currentPage = 0, pagesCount = 0 } = paginator ?? {};\n const urlForPage = (pageNumber: NumberOrEllipsis) =>\n `/server/${serverId}/list-short-urls/${pageNumber}${currentQueryString}`;\n\n if (pagesCount <= 1) {\n return null;\n }\n\n const renderPages = () =>\n progressivePagination(currentPage, pagesCount).map((pageNumber, index) => (\n \n \n {prettifyPageNumber(pageNumber)}\n \n \n ));\n\n return (\n \n \n \n \n {renderPages()}\n = pagesCount}>\n \n \n \n );\n};\n\nexport default Paginator;\n","import { Nullable, OptionalString } from '../../utils/utils';\nimport { Order } from '../../utils/helpers/ordering';\n\nexport interface EditShortUrlData {\n longUrl?: string;\n tags?: string[];\n title?: string | null;\n validSince?: Date | string | null;\n validUntil?: Date | string | null;\n maxVisits?: number | null;\n validateUrl?: boolean;\n crawlable?: boolean;\n forwardQuery?: boolean;\n}\n\nexport interface ShortUrlData extends EditShortUrlData {\n longUrl: string;\n customSlug?: string;\n shortCodeLength?: number;\n domain?: string;\n findIfExists?: boolean;\n}\n\nexport interface ShortUrl {\n shortCode: string;\n shortUrl: string;\n longUrl: string;\n dateCreated: string;\n visitsCount: number;\n meta: Required>;\n tags: string[];\n domain: string | null;\n title?: string | null;\n crawlable?: boolean;\n forwardQuery?: boolean;\n}\n\nexport interface ShortUrlMeta {\n validSince?: string;\n validUntil?: string;\n maxVisits?: number;\n}\n\nexport interface ShortUrlModalProps {\n shortUrl: ShortUrl;\n isOpen: boolean;\n toggle: () => void;\n}\n\nexport interface ShortUrlIdentifier {\n shortCode: string;\n domain: OptionalString;\n}\n\nexport const SHORT_URLS_ORDERABLE_FIELDS = {\n dateCreated: 'Created at',\n shortCode: 'Short URL',\n longUrl: 'Long URL',\n title: 'Title',\n visits: 'Visits',\n};\n\nexport type ShortUrlsOrderableFields = keyof typeof SHORT_URLS_ORDERABLE_FIELDS;\n\nexport type ShortUrlsOrder = Order;\n","import { pipe } from 'ramda';\nimport { FC, useEffect, useMemo, useState } from 'react';\nimport { Card } from 'reactstrap';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { OrderingDropdown } from '../utils/OrderingDropdown';\nimport { determineOrderDir, OrderDir } from '../utils/helpers/ordering';\nimport { getServerId, SelectedServer } from '../servers/data';\nimport { boundToMercureHub } from '../mercure/helpers/boundToMercureHub';\nimport { Topics } from '../mercure/helpers/Topics';\nimport { TableOrderIcon } from '../utils/table/TableOrderIcon';\nimport { ShlinkShortUrlsListParams } from '../api/types';\nimport { DEFAULT_SHORT_URLS_ORDERING, Settings } from '../settings/reducers/settings';\nimport { ShortUrlsList as ShortUrlsListState } from './reducers/shortUrlsList';\nimport { ShortUrlsTableProps } from './ShortUrlsTable';\nimport Paginator from './Paginator';\nimport { useShortUrlsQuery } from './helpers/hooks';\nimport { ShortUrlsOrderableFields, SHORT_URLS_ORDERABLE_FIELDS } from './data';\n\ninterface ShortUrlsListProps {\n selectedServer: SelectedServer;\n shortUrlsList: ShortUrlsListState;\n listShortUrls: (params: ShlinkShortUrlsListParams) => void;\n settings: Settings;\n}\n\nconst ShortUrlsList = (ShortUrlsTable: FC, ShortUrlsFilteringBar: FC) => boundToMercureHub(({\n listShortUrls,\n shortUrlsList,\n selectedServer,\n settings,\n}: ShortUrlsListProps) => {\n const serverId = getServerId(selectedServer);\n const { page } = useParams();\n const location = useLocation();\n const [{ tags, search, startDate, endDate, orderBy, tagsMode }, toFirstPage ] = useShortUrlsQuery();\n const [ actualOrderBy, setActualOrderBy ] = useState(\n // This separated state handling is needed to be able to fall back to settings value, but only once when loaded\n orderBy ?? settings.shortUrlsList?.defaultOrdering ?? DEFAULT_SHORT_URLS_ORDERING,\n );\n const selectedTags = useMemo(() => tags?.split(',') ?? [], [ tags ]);\n const { pagination } = shortUrlsList?.shortUrls ?? {};\n const handleOrderBy = (field?: ShortUrlsOrderableFields, dir?: OrderDir) => {\n toFirstPage({ orderBy: { field, dir } });\n setActualOrderBy({ field, dir });\n };\n const orderByColumn = (field: ShortUrlsOrderableFields) => () =>\n handleOrderBy(field, determineOrderDir(field, actualOrderBy.field, actualOrderBy.dir));\n const renderOrderIcon = (field: ShortUrlsOrderableFields) =>\n ;\n const addTag = pipe(\n (newTag: string) => [ ...new Set([ ...selectedTags, newTag ]) ].join(','),\n (tags) => toFirstPage({ tags }),\n );\n\n useEffect(() => {\n listShortUrls({\n page,\n searchTerm: search,\n tags: selectedTags,\n startDate,\n endDate,\n orderBy: actualOrderBy,\n tagsMode,\n });\n }, [ page, search, selectedTags, startDate, endDate, actualOrderBy, tagsMode ]);\n\n return (\n <>\n
\n
\n \n
\n \n \n \n \n \n );\n}, () => [ Topics.visits ]);\n\nexport default ShortUrlsList;\n","import { FC } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCopy as copyIcon } from '@fortawesome/free-regular-svg-icons';\nimport CopyToClipboard from 'react-copy-to-clipboard';\nimport './CopyToClipboardIcon.scss';\n\ninterface CopyToClipboardIconProps {\n text: string;\n onCopy?: (text: string, result: boolean) => void;\n}\n\nexport const CopyToClipboardIcon: FC = ({ text, onCopy }) => (\n \n \n \n);\n","import { parseISO, format as formatDate, getUnixTime, formatDistance } from 'date-fns';\nimport { isDateObject } from './helpers/date';\n\nexport interface DateProps {\n date: Date | string;\n format?: string;\n relative?: boolean;\n}\n\nexport const Time = ({ date, format = 'yyyy-MM-dd HH:mm', relative = false }: DateProps) => {\n const dateObject = isDateObject(date) ? date : parseISO(date);\n\n return (\n \n );\n};\n","import { FC } from 'react';\nimport { Link } from 'react-router-dom';\nimport { isServerWithId, SelectedServer, ServerWithId } from '../../servers/data';\nimport { ShortUrl } from '../data';\n\nexport type LinkSuffix = 'visits' | 'edit';\n\nexport interface ShortUrlDetailLinkProps {\n shortUrl?: ShortUrl | null;\n selectedServer?: SelectedServer;\n suffix: LinkSuffix;\n}\n\nconst buildUrl = ({ id }: ServerWithId, { shortCode, domain }: ShortUrl, suffix: LinkSuffix) => {\n const query = domain ? `?domain=${domain}` : '';\n\n return `/server/${id}/short-code/${shortCode}/${suffix}${query}`;\n};\n\nconst ShortUrlDetailLink: FC> = (\n { selectedServer, shortUrl, suffix, children, ...rest },\n) => {\n if (!selectedServer || !isServerWithId(selectedServer) || !shortUrl) {\n return {children};\n }\n\n return {children};\n};\n\nexport default ShortUrlDetailLink;\n","import { useRef } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faInfoCircle as infoIcon } from '@fortawesome/free-solid-svg-icons';\nimport { UncontrolledTooltip } from 'reactstrap';\nimport classNames from 'classnames';\nimport { prettify } from '../../utils/helpers/numbers';\nimport { ShortUrl } from '../data';\nimport { SelectedServer } from '../../servers/data';\nimport ShortUrlDetailLink from './ShortUrlDetailLink';\nimport './ShortUrlVisitsCount.scss';\n\ninterface ShortUrlVisitsCountProps {\n shortUrl?: ShortUrl | null;\n selectedServer?: SelectedServer;\n visitsCount: number;\n active?: boolean;\n}\n\nconst ShortUrlVisitsCount = ({ visitsCount, shortUrl, selectedServer, active = false }: ShortUrlVisitsCountProps) => {\n const maxVisits = shortUrl?.meta?.maxVisits;\n const visitsLink = (\n \n \n {prettify(visitsCount)}\n \n \n );\n\n if (!maxVisits) {\n return visitsLink;\n }\n\n const prettifiedMaxVisits = prettify(maxVisits);\n const tooltipRef = useRef();\n\n return (\n <>\n \n {visitsLink}\n {\n tooltipRef.current = el;\n }}\n >\n {' '}/ {prettifiedMaxVisits}{' '}\n \n \n \n \n \n tooltipRef.current) as any} placement=\"bottom\">\n This short URL will not accept more than {prettifiedMaxVisits} visits.\n \n \n );\n};\n\nexport default ShortUrlVisitsCount;\n","import { FC, useEffect, useRef } from 'react';\nimport { isEmpty } from 'ramda';\nimport { ExternalLink } from 'react-external-link';\nimport ColorGenerator from '../../utils/services/ColorGenerator';\nimport { StateFlagTimeout } from '../../utils/helpers/hooks';\nimport Tag from '../../tags/helpers/Tag';\nimport { SelectedServer } from '../../servers/data';\nimport { CopyToClipboardIcon } from '../../utils/CopyToClipboardIcon';\nimport { ShortUrl } from '../data';\nimport { Time } from '../../utils/Time';\nimport ShortUrlVisitsCount from './ShortUrlVisitsCount';\nimport { ShortUrlsRowMenuProps } from './ShortUrlsRowMenu';\nimport './ShortUrlsRow.scss';\n\nexport interface ShortUrlsRowProps {\n onTagClick?: (tag: string) => void;\n selectedServer: SelectedServer;\n shortUrl: ShortUrl;\n}\n\nconst ShortUrlsRow = (\n ShortUrlsRowMenu: FC,\n colorGenerator: ColorGenerator,\n useStateFlagTimeout: StateFlagTimeout,\n) => ({ shortUrl, selectedServer, onTagClick }: ShortUrlsRowProps) => {\n const [ copiedToClipboard, setCopiedToClipboard ] = useStateFlagTimeout();\n const [ active, setActive ] = useStateFlagTimeout(false, 500);\n const isFirstRun = useRef(true);\n\n const renderTags = (tags: string[]) => {\n if (isEmpty(tags)) {\n return No tags;\n }\n\n return tags.map((tag) => (\n onTagClick?.(tag)}\n />\n ));\n };\n\n useEffect(() => {\n if (isFirstRun.current) {\n isFirstRun.current = false;\n } else {\n setActive();\n }\n }, [ shortUrl.visitsCount ]);\n\n return (\n \n \n
} onSubmit={setServerData}>\n {!hasServers &&\n }\n {hasServers && }\n \n \n\n {serversImported && }\n {errorImporting && }\n\n \n \n );\n};\n\nexport default CreateServer;\n","import { isEmpty, values } from 'ramda';\nimport { DropdownItem, DropdownMenu, DropdownToggle, UncontrolledDropdown } from 'reactstrap';\nimport { Link } from 'react-router-dom';\nimport { faPlus as plusIcon, faServer as serverIcon } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { getServerId, SelectedServer, ServersMap } from './data';\n\nexport interface ServersDropdownProps {\n servers: ServersMap;\n selectedServer: SelectedServer;\n}\n\nconst ServersDropdown = ({ servers, selectedServer }: ServersDropdownProps) => {\n const serversList = values(servers);\n\n const renderServers = () => {\n if (isEmpty(serversList)) {\n return (\n \n Add a server\n \n );\n }\n\n return (\n <>\n {serversList.map(({ name, id }) => (\n \n {name}\n \n ))}\n \n \n Manage servers\n \n \n );\n };\n\n return (\n \n \n Servers\n \n {renderServers()}\n \n );\n};\n\nexport default ServersDropdown;\n","import { FC } from 'react';\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';\nimport { useNavigate } from 'react-router-dom';\nimport { ServerWithId } from './data';\n\nexport interface DeleteServerModalProps {\n server: ServerWithId;\n toggle: () => void;\n isOpen: boolean;\n redirectHome?: boolean;\n}\n\ninterface DeleteServerModalConnectProps extends DeleteServerModalProps {\n deleteServer: (server: ServerWithId) => void;\n}\n\nconst DeleteServerModal: FC = (\n { server, toggle, isOpen, deleteServer, redirectHome = true },\n) => {\n const navigate = useNavigate();\n const closeModal = () => {\n deleteServer(server);\n toggle();\n redirectHome && navigate('/');\n };\n\n return (\n \n Remove server\n \n

Are you sure you want to remove {server ? server.name : ''}?

\n

\n \n No data will be deleted, only the access to this server will be removed from this device.\n You can create it again at any moment.\n \n

\n
\n \n \n \n \n
\n );\n};\n\nexport default DeleteServerModal;\n","import { FC } from 'react';\nimport { faMinusCircle as deleteIcon } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { useToggle } from '../utils/helpers/hooks';\nimport { DeleteServerModalProps } from './DeleteServerModal';\nimport { ServerWithId } from './data';\n\nexport interface DeleteServerButtonProps {\n server: ServerWithId;\n className?: string;\n textClassName?: string;\n}\n\nconst DeleteServerButton = (DeleteServerModal: FC): FC => (\n { server, className, children, textClassName },\n) => {\n const [ isModalOpen, , showModal, hideModal ] = useToggle();\n\n return (\n <>\n \n {!children && }\n {children ?? 'Remove this server'}\n \n\n \n \n );\n};\n\nexport default DeleteServerButton;\n","import { FC } from 'react';\nimport { Button } from 'reactstrap';\nimport { NoMenuLayout } from '../common/NoMenuLayout';\nimport { useGoBack } from '../utils/helpers/hooks';\nimport { ServerForm } from './helpers/ServerForm';\nimport { withSelectedServer } from './helpers/withSelectedServer';\nimport { isServerWithId, ServerData } from './data';\n\ninterface EditServerProps {\n editServer: (serverId: string, serverData: ServerData) => void;\n}\n\nexport const EditServer = (ServerError: FC) => withSelectedServer(({ editServer, selectedServer }) => {\n const goBack = useGoBack();\n\n if (!isServerWithId(selectedServer)) {\n return null;\n }\n\n const handleSubmit = (serverData: ServerData) => {\n editServer(selectedServer.id, serverData);\n goBack();\n };\n\n return (\n \n Edit "{selectedServer.name}"}\n initialValues={selectedServer}\n onSubmit={handleSubmit}\n >\n \n \n \n \n );\n}, ServerError);\n","import { useRef, RefObject, ChangeEvent, MutableRefObject, FC, useState, useEffect } from 'react';\nimport { Button, UncontrolledTooltip } from 'reactstrap';\nimport { complement, pipe } from 'ramda';\nimport { faFileUpload as importIcon } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { useToggle } from '../../utils/helpers/hooks';\nimport { ServersImporter } from '../services/ServersImporter';\nimport { ServerData, ServersMap } from '../data';\nimport { DuplicatedServersModal } from './DuplicatedServersModal';\nimport './ImportServersBtn.scss';\n\ntype Ref = RefObject | MutableRefObject;\n\nexport interface ImportServersBtnProps {\n onImport?: () => void;\n onImportError?: (error: Error) => void;\n tooltipPlacement?: 'top' | 'bottom';\n className?: string;\n}\n\ninterface ImportServersBtnConnectProps extends ImportServersBtnProps {\n createServers: (servers: ServerData[]) => void;\n servers: ServersMap;\n fileRef: Ref;\n}\n\nconst serversFiltering = (servers: ServerData[]) =>\n ({ url, apiKey }: ServerData) => servers.some((server) => server.url === url && server.apiKey === apiKey);\n\nconst ImportServersBtn = ({ importServersFromFile }: ServersImporter): FC => ({\n createServers,\n servers,\n fileRef,\n children,\n onImport = () => {},\n onImportError = () => {},\n tooltipPlacement = 'bottom',\n className = '',\n}) => {\n const ref = fileRef ?? useRef();\n const [ serversToCreate, setServersToCreate ] = useState();\n const [ duplicatedServers, setDuplicatedServers ] = useState([]);\n const [ isModalOpen,, showModal, hideModal ] = useToggle();\n const create = pipe(createServers, onImport);\n const createAllServers = pipe(() => create(serversToCreate ?? []), hideModal);\n const createNonDuplicatedServers = pipe(\n () => create((serversToCreate ?? []).filter(complement(serversFiltering(duplicatedServers)))),\n hideModal,\n );\n const onFile = async ({ target }: ChangeEvent) =>\n importServersFromFile(target.files?.[0])\n .then(setServersToCreate)\n .then(() => {\n // Reset input after processing file\n (target as { value: string | null }).value = null;\n })\n .catch(onImportError);\n\n useEffect(() => {\n if (!serversToCreate) {\n return;\n }\n\n const existingServers = Object.values(servers);\n const duplicatedServers = serversToCreate.filter(serversFiltering(existingServers));\n const hasDuplicatedServers = !!duplicatedServers.length;\n\n !hasDuplicatedServers ? create(serversToCreate) : setDuplicatedServers(duplicatedServers);\n hasDuplicatedServers && showModal();\n }, [ serversToCreate ]);\n\n return (\n <>\n \n \n You can create servers by importing a CSV file with columns name, apiKey and url.\n \n\n \n\n \n \n );\n};\n\nexport default ImportServersBtn;\n","import { identity, memoizeWith, pipe } from 'ramda';\nimport { Action, Dispatch } from 'redux';\nimport { versionToPrintable, versionToSemVer as toSemVer } from '../../utils/helpers/version';\nimport { SelectedServer } from '../data';\nimport { GetState } from '../../container/types';\nimport { ShlinkHealth } from '../../api/types';\nimport { buildActionCreator, buildReducer } from '../../utils/helpers/redux';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\n\n/* eslint-disable padding-line-between-statements */\nexport const SELECT_SERVER = 'shlink/selectedServer/SELECT_SERVER';\nexport const RESET_SELECTED_SERVER = 'shlink/selectedServer/RESET_SELECTED_SERVER';\n\nexport const MIN_FALLBACK_VERSION = '1.0.0';\nexport const MAX_FALLBACK_VERSION = '999.999.999';\nexport const LATEST_VERSION_CONSTRAINT = 'latest';\n/* eslint-enable padding-line-between-statements */\n\nexport interface SelectServerAction extends Action {\n selectedServer: SelectedServer;\n}\n\nconst versionToSemVer = pipe(\n (version: string) => version === LATEST_VERSION_CONSTRAINT ? MAX_FALLBACK_VERSION : version,\n toSemVer(MIN_FALLBACK_VERSION),\n);\n\nconst getServerVersion = memoizeWith(\n identity,\n async (_serverId: string, health: () => Promise) => health().then(({ version }) => ({\n version: versionToSemVer(version),\n printableVersion: versionToPrintable(version),\n })),\n);\n\nconst initialState: SelectedServer = null;\n\nexport default buildReducer({\n [RESET_SELECTED_SERVER]: () => initialState,\n [SELECT_SERVER]: (_, { selectedServer }) => selectedServer,\n}, initialState);\n\nexport const resetSelectedServer = buildActionCreator(RESET_SELECTED_SERVER);\n\nexport const selectServer = (\n buildShlinkApiClient: ShlinkApiClientBuilder,\n loadMercureInfo: () => Action,\n) => (\n serverId: string,\n) => async (\n dispatch: Dispatch,\n getState: GetState,\n) => {\n dispatch(resetSelectedServer());\n\n const { servers } = getState();\n const selectedServer = servers[serverId];\n\n if (!selectedServer) {\n dispatch({\n type: SELECT_SERVER,\n selectedServer: { serverNotFound: true },\n });\n\n return;\n }\n\n try {\n const { health } = buildShlinkApiClient(selectedServer);\n const { version, printableVersion } = await getServerVersion(serverId, health);\n\n dispatch({\n type: SELECT_SERVER,\n selectedServer: {\n ...selectedServer,\n version,\n printableVersion,\n },\n });\n dispatch(loadMercureInfo());\n } catch (e) {\n dispatch({\n type: SELECT_SERVER,\n selectedServer: { ...selectedServer, serverNotReachable: true },\n });\n }\n};\n","import { assoc, dissoc, fromPairs, map, pipe, reduce, toPairs } from 'ramda';\nimport { v4 as uuid } from 'uuid';\nimport { Action } from 'redux';\nimport { ServerData, ServersMap, ServerWithId } from '../data';\nimport { buildReducer } from '../../utils/helpers/redux';\n\n/* eslint-disable padding-line-between-statements */\nexport const EDIT_SERVER = 'shlink/servers/EDIT_SERVER';\nexport const DELETE_SERVER = 'shlink/servers/DELETE_SERVER';\nexport const CREATE_SERVERS = 'shlink/servers/CREATE_SERVERS';\nexport const SET_AUTO_CONNECT = 'shlink/servers/SET_AUTO_CONNECT';\n/* eslint-enable padding-line-between-statements */\n\nexport interface CreateServersAction extends Action {\n newServers: ServersMap;\n}\n\ninterface DeleteServerAction extends Action {\n serverId: string;\n}\n\ninterface SetAutoConnectAction extends Action {\n serverId: string;\n autoConnect: boolean;\n}\n\nconst initialState: ServersMap = {};\n\nconst serverWithId = (server: ServerWithId | ServerData): ServerWithId => {\n if ((server as ServerWithId).id) {\n return server as ServerWithId;\n }\n\n return assoc('id', uuid(), server);\n};\n\nexport default buildReducer({\n [CREATE_SERVERS]: (state, { newServers }) => ({ ...state, ...newServers }),\n [DELETE_SERVER]: (state, { serverId }) => dissoc(serverId, state),\n [EDIT_SERVER]: (state, { serverId, serverData }: any) => !state[serverId]\n ? state\n : assoc(serverId, { ...state[serverId], ...serverData }, state),\n [SET_AUTO_CONNECT]: (state, { serverId, autoConnect }) => {\n if (!state[serverId]) {\n return state;\n }\n\n if (!autoConnect) {\n return assoc(serverId, { ...state[serverId], autoConnect }, state);\n }\n\n return fromPairs(\n toPairs(state).map(([ evaluatedServerId, server ]) => [\n evaluatedServerId,\n { ...server, autoConnect: evaluatedServerId === serverId },\n ]),\n );\n },\n}, initialState);\n\nconst serversListToMap = reduce((acc, server) => assoc(server.id, server, acc), {});\n\nexport const createServers = pipe(\n map(serverWithId),\n serversListToMap,\n (newServers: ServersMap) => ({ type: CREATE_SERVERS, newServers }),\n);\n\nexport const createServer = (server: ServerWithId) => createServers([ server ]);\n\nexport const editServer = (serverId: string, serverData: Partial) => ({\n type: EDIT_SERVER,\n serverId,\n serverData,\n});\n\nexport const deleteServer = ({ id }: ServerWithId): DeleteServerAction => ({ type: DELETE_SERVER, serverId: id });\n\nexport const setAutoConnect = ({ id }: ServerWithId, autoConnect: boolean): SetAutoConnectAction => ({\n type: SET_AUTO_CONNECT,\n serverId: id,\n autoConnect,\n});\n","import { pipe, prop } from 'ramda';\nimport { AxiosInstance } from 'axios';\nimport { Dispatch } from 'redux';\nimport { homepage } from '../../../package.json';\nimport { hasServerData, ServerData } from '../data';\nimport { createServers } from './servers';\n\nconst responseToServersList = pipe(\n prop('data'),\n (data: any): ServerData[] => Array.isArray(data) ? data.filter(hasServerData) : [],\n);\n\nexport const fetchServers = ({ get }: AxiosInstance) => () => async (dispatch: Dispatch) => {\n const resp = await get(`${homepage}/servers.json`);\n const remoteList = responseToServersList(resp);\n\n dispatch(createServers(remoteList));\n};\n","import { FC } from 'react';\nimport { versionMatch, Versions } from '../../utils/helpers/version';\nimport { isReachableServer, SelectedServer } from '../data';\n\ninterface ForServerVersionProps extends Versions {\n selectedServer: SelectedServer;\n}\n\nconst ForServerVersion: FC = ({ minVersion, maxVersion, selectedServer, children }) => {\n if (!isReachableServer(selectedServer)) {\n return null;\n }\n\n const { version } = selectedServer;\n const matchesVersion = versionMatch(version, { maxVersion, minVersion });\n\n if (!matchesVersion) {\n return null;\n }\n\n return <>{children};\n};\n\nexport default ForServerVersion;\n","import { FC } from 'react';\nimport { Link } from 'react-router-dom';\nimport Message from '../../utils/Message';\nimport ServersListGroup from '../ServersListGroup';\nimport { DeleteServerButtonProps } from '../DeleteServerButton';\nimport { isServerWithId, SelectedServer, ServersMap } from '../data';\nimport { NoMenuLayout } from '../../common/NoMenuLayout';\nimport './ServerError.scss';\n\ninterface ServerErrorProps {\n servers: ServersMap;\n selectedServer: SelectedServer;\n}\n\nexport const ServerError = (DeleteServerButton: FC): FC => (\n { servers, selectedServer },\n) => (\n \n
\n \n {!isServerWithId(selectedServer) && 'Could not find this Shlink server.'}\n {isServerWithId(selectedServer) && (\n <>\n

Oops! Could not connect to this Shlink server.

\n Make sure you have internet connection, and the server is properly configured and on-line.\n \n )}\n
\n\n \n These are the Shlink servers currently configured. Choose one of\n them or add a new one.\n \n\n {isServerWithId(selectedServer) && (\n
\n
\n Alternatively, if you think you may have miss-configured this server, you\n can remove it or \n edit it.\n
\n
\n )}\n
\n
\n);\n","import { FC } from 'react';\nimport { Card, CardText, CardTitle } from 'reactstrap';\nimport { Link } from 'react-router-dom';\nimport { faArrowAltCircleRight as linkIcon } from '@fortawesome/free-regular-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport './HighlightCard.scss';\n\nexport interface HighlightCardProps {\n title: string;\n link?: string | false;\n}\n\nconst buildExtraProps = (link?: string | false) => !link ? {} : { tag: Link, to: link };\n\nexport const HighlightCard: FC = ({ children, title, link }) => (\n \n {link && }\n {title}\n {children}\n \n);\n","import { FC, useEffect } from 'react';\nimport { Card, CardBody, CardHeader, Row } from 'reactstrap';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { ITEMS_IN_OVERVIEW_PAGE, ShortUrlsList as ShortUrlsListState } from '../short-urls/reducers/shortUrlsList';\nimport { prettify } from '../utils/helpers/numbers';\nimport { TagsList } from '../tags/reducers/tagsList';\nimport { ShortUrlsTableProps } from '../short-urls/ShortUrlsTable';\nimport { boundToMercureHub } from '../mercure/helpers/boundToMercureHub';\nimport { CreateShortUrlProps } from '../short-urls/CreateShortUrl';\nimport { VisitsOverview } from '../visits/reducers/visitsOverview';\nimport { Versions } from '../utils/helpers/version';\nimport { Topics } from '../mercure/helpers/Topics';\nimport { ShlinkShortUrlsListParams } from '../api/types';\nimport { supportsNonOrphanVisits, supportsOrphanVisits } from '../utils/helpers/features';\nimport { getServerId, SelectedServer } from './data';\nimport { HighlightCard } from './helpers/HighlightCard';\n\ninterface OverviewConnectProps {\n shortUrlsList: ShortUrlsListState;\n listShortUrls: (params: ShlinkShortUrlsListParams) => void;\n listTags: Function;\n tagsList: TagsList;\n selectedServer: SelectedServer;\n visitsOverview: VisitsOverview;\n loadVisitsOverview: Function;\n}\n\nexport const Overview = (\n ShortUrlsTable: FC,\n CreateShortUrl: FC,\n ForServerVersion: FC,\n) => boundToMercureHub(({\n shortUrlsList,\n listShortUrls,\n listTags,\n tagsList,\n selectedServer,\n loadVisitsOverview,\n visitsOverview,\n}: OverviewConnectProps) => {\n const { loading, shortUrls } = shortUrlsList;\n const { loading: loadingTags } = tagsList;\n const { loading: loadingVisits, visitsCount, orphanVisitsCount } = visitsOverview;\n const serverId = getServerId(selectedServer);\n const linkToOrphanVisits = supportsOrphanVisits(selectedServer);\n const linkToNonOrphanVisits = supportsNonOrphanVisits(selectedServer);\n const navigate = useNavigate();\n\n useEffect(() => {\n listShortUrls({ itemsPerPage: ITEMS_IN_OVERVIEW_PAGE, orderBy: { field: 'dateCreated', dir: 'DESC' } });\n listTags();\n loadVisitsOverview();\n }, []);\n\n return (\n <>\n \n
\n \n {loadingVisits ? 'Loading...' : prettify(visitsCount)}\n \n
\n
\n \n \n {loadingVisits ? 'Loading...' : prettify(orphanVisitsCount ?? 0)}\n \n \n Shlink 2.6 is needed\n \n \n
\n
\n \n {loading ? 'Loading...' : prettify(shortUrls?.pagination.totalItems ?? 0)}\n \n
\n
\n \n {loadingTags ? 'Loading...' : prettify(tagsList.tags.length)}\n \n
\n
\n\n \n \n Create a short URL\n
Create a short URL
\n Advanced options »\n
\n \n \n \n
\n \n \n Recently created URLs\n
Recently created URLs
\n See all »\n
\n \n navigate(`/server/${serverId}/list-short-urls/1?tags=${encodeURIComponent(tag)}`)}\n />\n \n
\n \n );\n}, () => [ Topics.visits, Topics.orphanVisits ]);\n","import { FC, useEffect, useState } from 'react';\nimport { Button, Row } from 'reactstrap';\nimport { faFileDownload as exportIcon, faPlus as plusIcon } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Link } from 'react-router-dom';\nimport { NoMenuLayout } from '../common/NoMenuLayout';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport SearchField from '../utils/SearchField';\nimport { Result } from '../utils/Result';\nimport { StateFlagTimeout } from '../utils/helpers/hooks';\nimport { ImportServersBtnProps } from './helpers/ImportServersBtn';\nimport { ServersMap } from './data';\nimport { ManageServersRowProps } from './ManageServersRow';\nimport ServersExporter from './services/ServersExporter';\n\ninterface ManageServersProps {\n servers: ServersMap;\n}\n\nconst SHOW_IMPORT_MSG_TIME = 4000;\n\nexport const ManageServers = (\n serversExporter: ServersExporter,\n ImportServersBtn: FC,\n useStateFlagTimeout: StateFlagTimeout,\n ManageServersRow: FC,\n): FC => ({ servers }) => {\n const allServers = Object.values(servers);\n const [ serversList, setServersList ] = useState(allServers);\n const filterServers = (searchTerm: string) => setServersList(\n allServers.filter(({ name, url }) => `${name} ${url}`.match(searchTerm)),\n );\n const hasAutoConnect = serversList.some(({ autoConnect }) => !!autoConnect);\n const [ errorImporting, setErrorImporting ] = useStateFlagTimeout(false, SHOW_IMPORT_MSG_TIME);\n\n useEffect(() => {\n setServersList(Object.values(servers));\n }, [ servers ]);\n\n return (\n \n \n\n \n
\n Import servers\n {allServers.length > 0 && (\n \n )}\n
\n
\n \n
\n
\n\n \n \n \n \n {hasAutoConnect && \n \n \n \n \n {!serversList.length && }\n {serversList.map((server) =>\n )\n }\n \n
}\n NameBase URL\n
No servers found.
\n
\n\n {errorImporting && (\n
\n The servers could not be imported. Make sure the format is correct.\n
\n )}\n
\n );\n};\n","import { FC } from 'react';\nimport { UncontrolledTooltip } from 'reactstrap';\nimport { Link } from 'react-router-dom';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCheck as checkIcon } from '@fortawesome/free-solid-svg-icons';\nimport { ServerWithId } from './data';\nimport { ManageServersRowDropdownProps } from './ManageServersRowDropdown';\n\nexport interface ManageServersRowProps {\n server: ServerWithId;\n hasAutoConnect: boolean;\n}\n\nexport const ManageServersRow = (\n ManageServersRowDropdown: FC,\n): FC => ({ server, hasAutoConnect }) => (\n \n {hasAutoConnect && (\n \n {server.autoConnect && (\n <>\n \n \n Auto-connect to this server\n \n \n )}\n \n )}\n \n {server.name}\n \n {server.url}\n \n \n \n \n);\n","import { FC } from 'react';\nimport { DropdownItem } from 'reactstrap';\nimport { Link } from 'react-router-dom';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faBan as toggleOffIcon,\n faEdit as editIcon,\n faMinusCircle as deleteIcon,\n faPlug as connectIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { faCircle as toggleOnIcon } from '@fortawesome/free-regular-svg-icons';\nimport { DropdownBtnMenu } from '../utils/DropdownBtnMenu';\nimport { useToggle } from '../utils/helpers/hooks';\nimport { DeleteServerModalProps } from './DeleteServerModal';\nimport { ServerWithId } from './data';\n\nexport interface ManageServersRowDropdownProps {\n server: ServerWithId;\n}\n\ninterface ManageServersRowDropdownConnectProps extends ManageServersRowDropdownProps {\n setAutoConnect: (server: ServerWithId, autoConnect: boolean) => void;\n}\n\nexport const ManageServersRowDropdown = (\n DeleteServerModal: FC,\n): FC => ({ server, setAutoConnect }) => {\n const [ isMenuOpen, toggleMenu ] = useToggle();\n const [ isModalOpen,, showModal, hideModal ] = useToggle();\n const serverUrl = `/server/${server.id}`;\n const { autoConnect: isAutoConnect } = server;\n const autoConnectIcon = isAutoConnect ? toggleOffIcon : toggleOnIcon;\n\n return (\n \n \n Connect\n \n \n Edit server\n \n setAutoConnect(server, !server.autoConnect)}>\n {isAutoConnect ? 'Do not a' : 'A'}uto-connect\n \n \n \n Remove server\n \n\n \n \n );\n};\n","import { CsvJson } from 'csvjson';\nimport { ServerData } from '../data';\n\nconst validateServer = (server: any): server is ServerData =>\n typeof server.url === 'string' && typeof server.apiKey === 'string' && typeof server.name === 'string';\n\nconst validateServers = (servers: any): servers is ServerData[] =>\n Array.isArray(servers) && servers.every(validateServer);\n\nexport class ServersImporter {\n public constructor(private readonly csvJson: CsvJson, private readonly fileReaderFactory: () => FileReader) {}\n\n public readonly importServersFromFile = async (file?: File | null): Promise => {\n if (!file) {\n throw new Error('No file provided');\n }\n\n const reader = this.fileReaderFactory();\n\n return new Promise((resolve, reject) => {\n reader.addEventListener('loadend', (e: ProgressEvent) => {\n try {\n // TODO Read as stream, otherwise, if the file is too big, this will block the browser tab\n const content = e.target?.result?.toString() ?? '';\n const servers = this.csvJson.toObject(content);\n\n if (!validateServers(servers)) {\n throw new Error('Provided file does not have the right format.');\n }\n\n resolve(servers);\n } catch (e) {\n reject(e);\n }\n });\n reader.readAsText(file);\n });\n };\n}\n","import { values } from 'ramda';\nimport { CsvJson } from 'csvjson';\nimport LocalStorage from '../../utils/services/LocalStorage';\nimport { ServersMap, serverWithIdToServerData } from '../data';\nimport { saveCsv } from '../../utils/helpers/files';\n\nconst SERVERS_FILENAME = 'shlink-servers.csv';\n\nexport default class ServersExporter {\n public constructor(\n private readonly storage: LocalStorage,\n private readonly window: Window,\n private readonly csvjson: CsvJson,\n ) {}\n\n public readonly exportServers = async () => {\n const servers = values(this.storage.get('servers') ?? {}).map(serverWithIdToServerData);\n\n try {\n const csv = this.csvjson.toCSV(servers, { headers: 'key' });\n\n saveCsv(this.window, csv, SERVERS_FILENAME);\n } catch (e) {\n // FIXME Handle error\n console.error(e); // eslint-disable-line no-console\n }\n };\n}\n","import csvjson from 'csvjson';\nimport Bottle from 'bottlejs';\nimport CreateServer from '../CreateServer';\nimport ServersDropdown from '../ServersDropdown';\nimport DeleteServerModal from '../DeleteServerModal';\nimport DeleteServerButton from '../DeleteServerButton';\nimport { EditServer } from '../EditServer';\nimport ImportServersBtn from '../helpers/ImportServersBtn';\nimport { resetSelectedServer, selectServer } from '../reducers/selectedServer';\nimport { createServer, createServers, deleteServer, editServer, setAutoConnect } from '../reducers/servers';\nimport { fetchServers } from '../reducers/remoteServers';\nimport ForServerVersion from '../helpers/ForServerVersion';\nimport { ServerError } from '../helpers/ServerError';\nimport { ConnectDecorator } from '../../container/types';\nimport { withoutSelectedServer } from '../helpers/withoutSelectedServer';\nimport { Overview } from '../Overview';\nimport { ManageServers } from '../ManageServers';\nimport { ManageServersRow } from '../ManageServersRow';\nimport { ManageServersRowDropdown } from '../ManageServersRowDropdown';\nimport { ServersImporter } from './ServersImporter';\nimport ServersExporter from './ServersExporter';\n\nconst provideServices = (bottle: Bottle, connect: ConnectDecorator) => {\n // Components\n bottle.serviceFactory(\n 'ManageServers',\n ManageServers,\n 'ServersExporter',\n 'ImportServersBtn',\n 'useStateFlagTimeout',\n 'ManageServersRow',\n );\n bottle.decorator('ManageServers', connect([ 'servers' ]));\n\n bottle.serviceFactory('ManageServersRow', ManageServersRow, 'ManageServersRowDropdown');\n\n bottle.serviceFactory('ManageServersRowDropdown', ManageServersRowDropdown, 'DeleteServerModal');\n bottle.decorator('ManageServersRowDropdown', connect(null, [ 'setAutoConnect' ]));\n\n bottle.serviceFactory('CreateServer', CreateServer, 'ImportServersBtn', 'useStateFlagTimeout');\n bottle.decorator('CreateServer', withoutSelectedServer);\n bottle.decorator('CreateServer', connect([ 'selectedServer', 'servers' ], [ 'createServer', 'resetSelectedServer' ]));\n\n bottle.serviceFactory('EditServer', EditServer, 'ServerError');\n bottle.decorator('EditServer', connect([ 'selectedServer' ], [ 'editServer', 'selectServer' ]));\n\n bottle.serviceFactory('ServersDropdown', () => ServersDropdown);\n bottle.decorator('ServersDropdown', connect([ 'servers', 'selectedServer' ]));\n\n bottle.serviceFactory('DeleteServerModal', () => DeleteServerModal);\n bottle.decorator('DeleteServerModal', connect(null, [ 'deleteServer' ]));\n\n bottle.serviceFactory('DeleteServerButton', DeleteServerButton, 'DeleteServerModal');\n\n bottle.serviceFactory('ImportServersBtn', ImportServersBtn, 'ServersImporter');\n bottle.decorator('ImportServersBtn', connect([ 'servers' ], [ 'createServers' ]));\n\n bottle.serviceFactory('ForServerVersion', () => ForServerVersion);\n bottle.decorator('ForServerVersion', connect([ 'selectedServer' ]));\n\n bottle.serviceFactory('ServerError', ServerError, 'DeleteServerButton');\n bottle.decorator('ServerError', connect([ 'servers', 'selectedServer' ]));\n\n bottle.serviceFactory('Overview', Overview, 'ShortUrlsTable', 'CreateShortUrl', 'ForServerVersion');\n bottle.decorator('Overview', connect(\n [ 'shortUrlsList', 'tagsList', 'selectedServer', 'mercureInfo', 'visitsOverview' ],\n [ 'listShortUrls', 'listTags', 'createNewVisits', 'loadMercureInfo', 'loadVisitsOverview' ],\n ));\n\n // Services\n bottle.constant('csvjson', csvjson);\n bottle.constant('fileReaderFactory', () => new FileReader());\n bottle.service('ServersImporter', ServersImporter, 'csvjson', 'fileReaderFactory');\n bottle.service('ServersExporter', ServersExporter, 'Storage', 'window', 'csvjson');\n\n // Actions\n bottle.serviceFactory('selectServer', selectServer, 'buildShlinkApiClient', 'loadMercureInfo');\n bottle.serviceFactory('createServer', () => createServer);\n bottle.serviceFactory('createServers', () => createServers);\n bottle.serviceFactory('deleteServer', () => deleteServer);\n bottle.serviceFactory('editServer', () => editServer);\n bottle.serviceFactory('setAutoConnect', () => setAutoConnect);\n bottle.serviceFactory('fetchServers', fetchServers, 'axios');\n\n bottle.serviceFactory('resetSelectedServer', () => resetSelectedServer);\n};\n\nexport default provideServices;\n","import { FC } from 'react';\nimport { Modal, ModalBody } from 'reactstrap';\nimport { MapContainer, TileLayer, Marker, Popup, MapContainerProps } from 'react-leaflet';\nimport { prop } from 'ramda';\nimport { CityStats } from '../types';\nimport './MapModal.scss';\n\ninterface MapModalProps {\n toggle: () => void;\n isOpen: boolean;\n title: string;\n locations?: CityStats[];\n}\n\nconst OpenStreetMapTile: FC = () => (\n \n);\n\nconst calculateMapProps = (locations: CityStats[]): MapContainerProps => {\n if (locations.length === 0) {\n return {};\n }\n\n if (locations.length > 1) {\n return { bounds: locations.map(prop('latLong')) };\n }\n\n // When there's only one location, an error is thrown if trying to calculate the bounds.\n // When that happens, we use zoom and center as a workaround\n const [{ latLong: center }] = locations;\n\n return { zoom: 10, center };\n};\n\nconst MapModal = ({ toggle, isOpen, title, locations = [] }: MapModalProps) => (\n \n \n

\n {title}\n

\n \n \n {locations.map(({ cityName, latLong, count }, index) => (\n \n {count} visit{count > 1 ? 's' : ''} from {cityName}\n \n ))}\n \n
\n
\n);\n\nexport default MapModal;\n","import { Button, Card } from 'reactstrap';\nimport { FC, ReactNode } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons';\nimport ShortUrlVisitsCount from '../short-urls/helpers/ShortUrlVisitsCount';\nimport { ShortUrl } from '../short-urls/data';\nimport { Visit } from './types';\n\ninterface VisitsHeaderProps {\n visits: Visit[];\n goBack: () => void;\n title: ReactNode;\n shortUrl?: ShortUrl;\n}\n\nconst VisitsHeader: FC = ({ visits, goBack, shortUrl, children, title }) => (\n
\n \n

\n \n \n {title}\n \n \n Visits:{' '}\n \n \n

\n

\n {title}\n

\n\n {children &&
{children}
}\n
\n
\n);\n\nexport default VisitsHeader;\n","import { UncontrolledTooltip } from 'reactstrap';\nimport { ExternalLink } from 'react-external-link';\nimport { ShortUrlDetail } from '../short-urls/reducers/shortUrlDetail';\nimport { Time } from '../utils/Time';\nimport { ShortUrlVisits } from './reducers/shortUrlVisits';\nimport VisitsHeader from './VisitsHeader';\nimport './ShortUrlVisitsHeader.scss';\n\ninterface ShortUrlVisitsHeaderProps {\n shortUrlDetail: ShortUrlDetail;\n shortUrlVisits: ShortUrlVisits;\n goBack: () => void;\n}\n\nconst ShortUrlVisitsHeader = ({ shortUrlDetail, shortUrlVisits, goBack }: ShortUrlVisitsHeaderProps) => {\n const { shortUrl, loading } = shortUrlDetail;\n const { visits } = shortUrlVisits;\n const shortLink = shortUrl?.shortUrl ?? '';\n const longLink = shortUrl?.longUrl ?? '';\n const title = shortUrl?.title;\n\n const renderDate = () => !shortUrl ? Loading... : (\n \n \n \n \n \n \n );\n const visitsStatsTitle = <>Visits for ;\n\n return (\n \n
\n
Created: {renderDate()}
\n
\n {`${title ? 'Title' : 'Long URL'}: `}\n {loading && Loading...}\n {!loading && {title ?? longLink}}\n
\n
\n );\n};\n\nexport default ShortUrlVisitsHeader;\n","import { FC, Children, isValidElement } from 'react';\nimport { Card, Nav, NavLink } from 'reactstrap';\nimport { NavLink as RouterNavLink } from 'react-router-dom';\nimport './NavPills.scss';\n\ninterface NavPillsProps {\n fill?: boolean;\n className?: string;\n}\n\ninterface NavPillProps {\n to: string;\n replace?: boolean;\n}\n\nexport const NavPillItem: FC = ({ children, ...rest }) => (\n \n {children}\n \n);\n\nexport const NavPills: FC = ({ children, fill = false, className = '' }) => (\n \n \n \n);\n","import bowser from 'bowser';\nimport { zipObj } from 'ramda';\nimport { Empty, hasValue } from '../utils';\nimport { Stats, UserAgent } from '../../visits/types';\n\nconst DEFAULT = 'Others';\nconst BROWSERS_WHITELIST = [\n 'Android Browser',\n 'Chrome',\n 'Chromium',\n 'Firefox',\n 'Internet Explorer',\n 'Microsoft Edge',\n 'Opera',\n 'Safari',\n 'Samsung Internet for Android',\n 'Vivaldi',\n 'WeChat',\n];\n\nexport const parseUserAgent = (userAgent: string | Empty): UserAgent => {\n if (!hasValue(userAgent)) {\n return { browser: DEFAULT, os: DEFAULT };\n }\n\n const { browser: { name: browser }, os: { name: os } } = bowser.parse(userAgent);\n\n return { os: os ?? DEFAULT, browser: browser && BROWSERS_WHITELIST.includes(browser) ? browser : DEFAULT };\n};\n\nexport const extractDomain = (url: string | Empty): string => {\n if (!hasValue(url)) {\n return 'Direct';\n }\n\n return url.split('/')[url.includes('://') ? 2 : 0]?.split(':')[0] ?? '';\n};\n\nexport const fillTheGaps = (stats: Stats, labels: string[]): number[] =>\n Object.values({ ...zipObj(labels, labels.map(() => 0)), ...stats });\n","import { ActiveElement, ChartEvent, ChartType, TooltipItem } from 'chart.js';\nimport { prettify } from './numbers';\n\nexport const pointerOnHover = ({ native }: ChartEvent, [ firstElement ]: ActiveElement[]) => {\n if (!native?.target) {\n return;\n }\n\n const canvas = native.target as HTMLCanvasElement;\n\n canvas.style.cursor = firstElement ? 'pointer' : 'default';\n};\n\nexport const renderChartLabel = ({ dataset, formattedValue }: TooltipItem) =>\n `${dataset.label}: ${prettify(formattedValue)}`;\n\nexport const renderPieChartLabel = ({ label, formattedValue }: TooltipItem) =>\n `${label}: ${prettify(formattedValue)}`;\n","import { useState, useMemo } from 'react';\nimport {\n Card,\n CardHeader,\n CardBody,\n UncontrolledDropdown,\n DropdownToggle,\n DropdownMenu,\n DropdownItem,\n} from 'reactstrap';\nimport { Line } from 'react-chartjs-2';\nimport { always, cond, countBy, reverse } from 'ramda';\nimport {\n add,\n differenceInDays,\n differenceInHours,\n differenceInMonths,\n differenceInWeeks,\n parseISO,\n format,\n startOfISOWeek,\n endOfISOWeek,\n} from 'date-fns';\nimport { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { NormalizedVisit, Stats } from '../types';\nimport { fillTheGaps } from '../../utils/helpers/visits';\nimport { useToggle } from '../../utils/helpers/hooks';\nimport { rangeOf } from '../../utils/utils';\nimport ToggleSwitch from '../../utils/ToggleSwitch';\nimport { prettify } from '../../utils/helpers/numbers';\nimport { pointerOnHover, renderChartLabel } from '../../utils/helpers/charts';\nimport { HIGHLIGHTED_COLOR, MAIN_COLOR } from '../../utils/theme';\nimport './LineChartCard.scss';\n\ninterface LineChartCardProps {\n title: string;\n highlightedLabel?: string;\n visits: NormalizedVisit[];\n highlightedVisits: NormalizedVisit[];\n setSelectedVisits?: (visits: NormalizedVisit[]) => void;\n}\n\ntype Step = 'monthly' | 'weekly' | 'daily' | 'hourly';\n\nconst STEPS_MAP: Record = {\n monthly: 'Month',\n weekly: 'Week',\n daily: 'Day',\n hourly: 'Hour',\n};\n\nconst STEP_TO_DURATION_MAP: Record Duration> = {\n hourly: (hours: number) => ({ hours }),\n daily: (days: number) => ({ days }),\n weekly: (weeks: number) => ({ weeks }),\n monthly: (months: number) => ({ months }),\n};\n\nconst STEP_TO_DIFF_FUNC_MAP: Record number> = {\n hourly: differenceInHours,\n daily: differenceInDays,\n weekly: differenceInWeeks,\n monthly: differenceInMonths,\n};\n\nconst STEP_TO_DATE_FORMAT: Record string> = {\n hourly: (date) => format(date, 'yyyy-MM-dd HH:00'),\n daily: (date) => format(date, 'yyyy-MM-dd'),\n weekly(date) {\n const firstWeekDay = format(startOfISOWeek(date), 'yyyy-MM-dd');\n const lastWeekDay = format(endOfISOWeek(date), 'yyyy-MM-dd');\n\n return `${firstWeekDay} - ${lastWeekDay}`;\n },\n monthly: (date) => format(date, 'yyyy-MM'),\n};\n\nconst determineInitialStep = (oldestVisitDate: string): Step => {\n const now = new Date();\n const oldestDate = parseISO(oldestVisitDate);\n const matcher = cond([\n [ () => differenceInDays(now, oldestDate) <= 2, always('hourly') ], // Less than 2 days\n [ () => differenceInMonths(now, oldestDate) <= 1, always('daily') ], // Between 2 days and 1 month\n [ () => differenceInMonths(now, oldestDate) <= 6, always('weekly') ], // Between 1 and 6 months\n ]);\n\n return matcher() ?? 'monthly';\n};\n\nconst groupVisitsByStep = (step: Step, visits: NormalizedVisit[]): Stats => countBy(\n (visit) => STEP_TO_DATE_FORMAT[step](parseISO(visit.date)),\n visits,\n);\n\nconst visitsToDatasetGroups = (step: Step, visits: NormalizedVisit[]) =>\n visits.reduce>(\n (acc, visit) => {\n const key = STEP_TO_DATE_FORMAT[step](parseISO(visit.date));\n\n acc[key] = acc[key] ?? [];\n acc[key].push(visit);\n\n return acc;\n },\n {},\n );\n\nconst generateLabels = (step: Step, visits: NormalizedVisit[]): string[] => {\n const diffFunc = STEP_TO_DIFF_FUNC_MAP[step];\n const formatter = STEP_TO_DATE_FORMAT[step];\n const newerDate = parseISO(visits[0].date);\n const oldestDate = parseISO(visits[visits.length - 1].date);\n const size = diffFunc(newerDate, oldestDate);\n const duration = STEP_TO_DURATION_MAP[step];\n\n return [\n formatter(oldestDate),\n ...rangeOf(size, (num) => formatter(add(oldestDate, duration(num)))),\n ];\n};\n\nconst generateLabelsAndGroupedVisits = (\n visits: NormalizedVisit[],\n groupedVisitsWithGaps: Stats,\n step: Step,\n skipNoElements: boolean,\n): [string[], number[]] => {\n if (skipNoElements) {\n return [ Object.keys(groupedVisitsWithGaps), Object.values(groupedVisitsWithGaps) ];\n }\n\n const labels = generateLabels(step, visits);\n\n return [ labels, fillTheGaps(groupedVisitsWithGaps, labels) ];\n};\n\nconst generateDataset = (data: number[], label: string, color: string): ChartDataset => ({\n label,\n data,\n fill: false,\n tension: 0.2,\n borderColor: color,\n backgroundColor: color,\n});\n\nlet selectedLabel: string | null = null;\n\nconst chartElementAtEvent = (\n labels: string[],\n datasetsByPoint: Record,\n setSelectedVisits?: (visits: NormalizedVisit[]) => void,\n) => ([ chart ]: [{ index: number }]) => {\n if (!setSelectedVisits || !chart) {\n return;\n }\n\n const { index } = chart;\n\n if (selectedLabel === labels[index]) {\n setSelectedVisits([]);\n selectedLabel = null;\n } else {\n setSelectedVisits(labels[index] && datasetsByPoint[labels[index]] || []);\n selectedLabel = labels[index] ?? null;\n }\n};\n\nconst LineChartCard = (\n { title, visits, highlightedVisits, highlightedLabel = 'Selected', setSelectedVisits }: LineChartCardProps,\n) => {\n const [ step, setStep ] = useState(\n visits.length > 0 ? determineInitialStep(visits[visits.length - 1].date) : 'monthly',\n );\n const [ skipNoVisits, toggleSkipNoVisits ] = useToggle(true);\n\n const datasetsByPoint = useMemo(() => visitsToDatasetGroups(step, visits), [ step, visits ]);\n const groupedVisitsWithGaps = useMemo(() => groupVisitsByStep(step, reverse(visits)), [ step, visits ]);\n const [ labels, groupedVisits ] = useMemo(\n () => generateLabelsAndGroupedVisits(visits, groupedVisitsWithGaps, step, skipNoVisits),\n [ visits, step, skipNoVisits ],\n );\n const groupedHighlighted = useMemo(\n () => fillTheGaps(groupVisitsByStep(step, reverse(highlightedVisits)), labels),\n [ highlightedVisits, step, labels ],\n );\n const generateChartDatasets = (): ChartDataset[] => {\n const mainDataset = generateDataset(groupedVisits, 'Visits', MAIN_COLOR);\n\n if (highlightedVisits.length === 0) {\n return [ mainDataset ];\n }\n\n const highlightedDataset = generateDataset(groupedHighlighted, highlightedLabel, HIGHLIGHTED_COLOR);\n\n return [ mainDataset, highlightedDataset ];\n };\n const generateChartData = (): ChartData => ({ labels, datasets: generateChartDatasets() });\n\n const options: ChartOptions = {\n maintainAspectRatio: false,\n plugins: {\n legend: { display: false },\n tooltip: {\n intersect: false,\n axis: 'x',\n callbacks: { label: renderChartLabel },\n },\n },\n scales: {\n y: {\n beginAtZero: true,\n ticks: {\n precision: 0,\n callback: prettify,\n },\n },\n x: {\n title: { display: true, text: STEPS_MAP[step] },\n },\n },\n onHover: pointerOnHover,\n };\n const renderLineChart = () => (\n \n );\n\n return (\n \n \n {title}\n
\n \n \n Group by\n \n \n {Object.entries(STEPS_MAP).map(([ value, menuText ]) => (\n setStep(value as Step)}>\n {menuText}\n \n ))}\n \n \n
\n
\n \n Skip dates with no visits\n \n
\n
\n \n {/* It's VERY IMPORTANT to render two different components here, as one has 1 dataset and the other has 2 */}\n {/* Using the same component causes a crash when switching from 1 to 2 datasets, and then back to 1 dataset */}\n {highlightedVisits.length > 0 && renderLineChart()}\n {highlightedVisits.length === 0 && renderLineChart()}\n \n
\n );\n};\n\nexport default LineChartCard;\n","import { FC } from 'react';\nimport classNames from 'classnames';\nimport { Pagination, PaginationItem, PaginationLink } from 'reactstrap';\nimport {\n pageIsEllipsis,\n keyForPage,\n NumberOrEllipsis,\n progressivePagination,\n prettifyPageNumber,\n} from '../utils/helpers/pagination';\nimport './SimplePaginator.scss';\n\ninterface SimplePaginatorProps {\n pagesCount: number;\n currentPage: number;\n setCurrentPage: (currentPage: number) => void;\n centered?: boolean;\n}\n\nconst SimplePaginator: FC = ({ pagesCount, currentPage, setCurrentPage, centered = true }) => {\n if (pagesCount < 2) {\n return null;\n }\n\n const onClick = (page: NumberOrEllipsis) => () => !pageIsEllipsis(page) && setCurrentPage(page);\n\n return (\n \n \n \n \n {progressivePagination(currentPage, pagesCount).map((pageNumber, index) => (\n \n {prettifyPageNumber(pageNumber)}\n \n ))}\n = pagesCount}>\n \n \n \n );\n};\n\nexport default SimplePaginator;\n","import { useEffect, useMemo, useState, useRef } from 'react';\nimport classNames from 'classnames';\nimport { min, splitEvery } from 'ramda';\nimport { faCheck as checkIcon, faRobot as botIcon } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { UncontrolledTooltip } from 'reactstrap';\nimport SimplePaginator from '../common/SimplePaginator';\nimport SearchField from '../utils/SearchField';\nimport { determineOrderDir, Order, sortList } from '../utils/helpers/ordering';\nimport { prettify } from '../utils/helpers/numbers';\nimport { supportsBotVisits } from '../utils/helpers/features';\nimport { SelectedServer } from '../servers/data';\nimport { Time } from '../utils/Time';\nimport { TableOrderIcon } from '../utils/table/TableOrderIcon';\nimport { MediaMatcher } from '../utils/types';\nimport { NormalizedOrphanVisit, NormalizedVisit } from './types';\nimport './VisitsTable.scss';\n\nexport interface VisitsTableProps {\n visits: NormalizedVisit[];\n selectedVisits?: NormalizedVisit[];\n setSelectedVisits: (visits: NormalizedVisit[]) => void;\n matchMedia?: MediaMatcher;\n isOrphanVisits?: boolean;\n selectedServer: SelectedServer;\n}\n\ntype OrderableFields = 'date' | 'country' | 'city' | 'browser' | 'os' | 'referer' | 'visitedUrl' | 'potentialBot';\ntype VisitsOrder = Order;\n\nconst PAGE_SIZE = 20;\nconst visitMatchesSearch = ({ browser, os, referer, country, city, ...rest }: NormalizedVisit, searchTerm: string) =>\n `${browser} ${os} ${referer} ${country} ${city} ${(rest as NormalizedOrphanVisit).visitedUrl}`.toLowerCase().includes(\n searchTerm.toLowerCase(),\n );\nconst searchVisits = (searchTerm: string, visits: NormalizedVisit[]) =>\n visits.filter((visit) => visitMatchesSearch(visit, searchTerm));\nconst sortVisits = (order: VisitsOrder, visits: NormalizedVisit[]) => sortList(visits, order as any);\nconst calculateVisits = (allVisits: NormalizedVisit[], searchTerm: string | undefined, order: VisitsOrder) => {\n const filteredVisits = searchTerm ? searchVisits(searchTerm, allVisits) : [ ...allVisits ];\n const sortedVisits = sortVisits(order, filteredVisits);\n const total = sortedVisits.length;\n const visitsGroups = splitEvery(PAGE_SIZE, sortedVisits);\n\n return { visitsGroups, total };\n};\n\nconst VisitsTable = ({\n visits,\n selectedVisits = [],\n setSelectedVisits,\n selectedServer,\n matchMedia = window.matchMedia,\n isOrphanVisits = false,\n}: VisitsTableProps) => {\n const headerCellsClass = 'visits-table__header-cell visits-table__sticky';\n const matchMobile = () => matchMedia('(max-width: 767px)').matches;\n\n const [ isMobileDevice, setIsMobileDevice ] = useState(matchMobile());\n const [ searchTerm, setSearchTerm ] = useState(undefined);\n const [ order, setOrder ] = useState({});\n const resultSet = useMemo(() => calculateVisits(visits, searchTerm, order), [ searchTerm, order ]);\n const isFirstLoad = useRef(true);\n const [ page, setPage ] = useState(1);\n const end = page * PAGE_SIZE;\n const start = end - PAGE_SIZE;\n const supportsBots = supportsBotVisits(selectedServer);\n const fullSizeColSpan = 7 + Number(supportsBots) + Number(isOrphanVisits);\n\n const orderByColumn = (field: OrderableFields) =>\n () => setOrder({ field, dir: determineOrderDir(field, order.field, order.dir) });\n const renderOrderIcon = (field: OrderableFields) =>\n ;\n\n useEffect(() => {\n const listener = () => setIsMobileDevice(matchMobile());\n\n window.addEventListener('resize', listener);\n\n return () => window.removeEventListener('resize', listener);\n }, []);\n useEffect(() => {\n setPage(1);\n\n !isFirstLoad.current && setSelectedVisits([]);\n isFirstLoad.current = false;\n }, [ searchTerm ]);\n\n return (\n
\n \n \n \n setSelectedVisits(\n selectedVisits.length < resultSet.total ? resultSet.visitsGroups.flat() : [],\n )}\n >\n 0 })} />\n \n {supportsBots && (\n \n )}\n \n \n \n \n \n \n {isOrphanVisits && (\n \n )}\n \n \n \n \n \n \n {!resultSet.visitsGroups[page - 1]?.length && (\n \n \n \n )}\n {resultSet.visitsGroups[page - 1]?.map((visit, index) => {\n const isSelected = selectedVisits.includes(visit);\n\n return (\n setSelectedVisits(\n isSelected ? selectedVisits.filter((v) => v !== visit) : [ ...selectedVisits, visit ],\n )}\n >\n \n {supportsBots && (\n \n )}\n \n \n \n \n \n \n {isOrphanVisits && }\n \n );\n })}\n \n {resultSet.total > PAGE_SIZE && (\n \n \n \n \n \n )}\n
\n \n {renderOrderIcon('potentialBot')}\n \n Date\n {renderOrderIcon('date')}\n \n Country\n {renderOrderIcon('country')}\n \n City\n {renderOrderIcon('city')}\n \n Browser\n {renderOrderIcon('browser')}\n \n OS\n {renderOrderIcon('os')}\n \n Referrer\n {renderOrderIcon('referer')}\n \n Visited URL\n {renderOrderIcon('visitedUrl')}\n
\n \n
\n No visits found with current filtering\n
\n {isSelected && }\n \n {visit.potentialBot && (\n <>\n \n \n Potentially a visit from a bot or crawler\n \n \n )}\n {visit.country}{visit.city}{visit.browser}{visit.os}{visit.referer}{(visit as NormalizedOrphanVisit).visitedUrl}
\n
\n
\n \n
\n \n
\n Visits {prettify(start + 1)} to{' '}\n {prettify(min(end, resultSet.total))} of{' '}\n {prettify(resultSet.total)}\n
\n
\n \n
\n
\n );\n};\n\nexport default VisitsTable;\n","import { useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faMapMarkedAlt as mapIcon } from '@fortawesome/free-solid-svg-icons';\nimport { Dropdown, DropdownItem, DropdownMenu, UncontrolledTooltip } from 'reactstrap';\nimport { useToggle } from '../../utils/helpers/hooks';\nimport { CityStats } from '../types';\nimport MapModal from './MapModal';\nimport './OpenMapModalBtn.scss';\n\ninterface OpenMapModalBtnProps {\n modalTitle: string;\n activeCities: string[];\n locations?: CityStats[];\n}\n\nconst OpenMapModalBtn = ({ modalTitle, activeCities, locations = [] }: OpenMapModalBtnProps) => {\n const [ mapIsOpened, , openMap, closeMap ] = useToggle();\n const [ dropdownIsOpened, toggleDropdown, openDropdown ] = useToggle();\n const [ locationsToShow, setLocationsToShow ] = useState([]);\n const buttonRef = useRef();\n\n const filterLocations = (cities: CityStats[]) => cities.filter(({ cityName }) => activeCities.includes(cityName));\n const onClick = () => {\n if (!activeCities) {\n setLocationsToShow(locations);\n openMap();\n\n return;\n }\n\n openDropdown();\n };\n const openMapWithLocations = (filtered: boolean) => () => {\n setLocationsToShow(filtered ? filterLocations(locations) : locations);\n openMap();\n };\n\n return (\n <>\n \n buttonRef.current) as any}>Show in map\n \n \n Show all locations\n Show locations in current page\n \n \n \n \n );\n};\n\nexport default OpenMapModalBtn;\n","import { countBy, groupBy, pipe, prop } from 'ramda';\nimport { formatIsoDate } from '../../utils/helpers/date';\nimport { ShlinkVisitsParams } from '../../api/types';\nimport { CreateVisit, NormalizedOrphanVisit, NormalizedVisit, OrphanVisit, Stats, Visit, VisitsParams } from './index';\n\nexport const isOrphanVisit = (visit: Visit): visit is OrphanVisit => visit.hasOwnProperty('visitedUrl');\n\nexport const isNormalizedOrphanVisit = (visit: NormalizedVisit): visit is NormalizedOrphanVisit =>\n visit.hasOwnProperty('visitedUrl');\n\nexport interface GroupedNewVisits {\n orphanVisits: CreateVisit[];\n regularVisits: CreateVisit[];\n}\n\nexport const groupNewVisitsByType = pipe(\n groupBy((newVisit: CreateVisit) => isOrphanVisit(newVisit.visit) ? 'orphanVisits' : 'regularVisits'),\n // @ts-expect-error Type declaration on groupBy is not correct. It can return undefined props\n (result): GroupedNewVisits => ({ orphanVisits: [], regularVisits: [], ...result }),\n);\n\nexport type HighlightableProps = T extends NormalizedOrphanVisit\n ? ('referer' | 'country' | 'city' | 'visitedUrl')\n : ('referer' | 'country' | 'city');\n\nexport const highlightedVisitsToStats = (\n highlightedVisits: T[],\n property: HighlightableProps,\n): Stats => countBy(prop(property) as any, highlightedVisits);\n\nexport const toApiParams = ({ page, itemsPerPage, filter, dateRange }: VisitsParams): ShlinkVisitsParams => {\n const startDate = (dateRange?.startDate && formatIsoDate(dateRange?.startDate)) ?? undefined;\n const endDate = (dateRange?.endDate && formatIsoDate(dateRange?.endDate)) ?? undefined;\n const excludeBots = filter?.excludeBots || undefined; // eslint-disable-line @typescript-eslint/prefer-nullish-coalescing\n\n return { page, itemsPerPage, startDate, endDate, excludeBots };\n};\n","import { isNil, map } from 'ramda';\nimport { extractDomain, parseUserAgent } from '../../utils/helpers/visits';\nimport { hasValue } from '../../utils/utils';\nimport { CityStats, NormalizedVisit, Stats, Visit, VisitsStats } from '../types';\nimport { isNormalizedOrphanVisit, isOrphanVisit } from '../types/helpers';\n\nconst visitHasProperty = (visit: NormalizedVisit, propertyName: keyof NormalizedVisit) =>\n !isNil(visit) && hasValue(visit[propertyName]);\n\nconst optionalNumericToNumber = (numeric: string | number | null | undefined): number => {\n if (typeof numeric === 'number') {\n return numeric;\n }\n\n return numeric ? parseFloat(numeric) : 0;\n};\n\nconst updateOsStatsForVisit = (osStats: Stats, { os }: NormalizedVisit) => {\n osStats[os] = (osStats[os] || 0) + 1;\n};\n\nconst updateBrowsersStatsForVisit = (browsersStats: Stats, { browser }: NormalizedVisit) => {\n browsersStats[browser] = (browsersStats[browser] || 0) + 1;\n};\n\nconst updateReferrersStatsForVisit = (referrersStats: Stats, { referer: domain }: NormalizedVisit) => {\n referrersStats[domain] = (referrersStats[domain] || 0) + 1;\n};\n\nconst updateLocationsStatsForVisit = (propertyName: 'country' | 'city') => (stats: Stats, visit: NormalizedVisit) => {\n const hasLocationProperty = visitHasProperty(visit, propertyName);\n const value = hasLocationProperty ? visit[propertyName] : 'Unknown';\n\n stats[value] = (stats[value] || 0) + 1;\n};\n\nconst updateCountriesStatsForVisit = updateLocationsStatsForVisit('country');\nconst updateCitiesStatsForVisit = updateLocationsStatsForVisit('city');\n\nconst updateCitiesForMapForVisit = (citiesForMapStats: Record, visit: NormalizedVisit) => {\n if (!visitHasProperty(visit, 'city') || visit.city === 'Unknown') {\n return;\n }\n\n const { city, latitude, longitude } = visit;\n const currentCity = citiesForMapStats[city] || {\n cityName: city,\n count: 0,\n latLong: [ optionalNumericToNumber(latitude), optionalNumericToNumber(longitude) ],\n };\n\n currentCity.count++;\n\n citiesForMapStats[city] = currentCity;\n};\n\nconst updateVisitedUrlsForVisit = (visitedUrlsStats: Stats, visit: NormalizedVisit) => {\n if (!isNormalizedOrphanVisit(visit)) {\n return;\n }\n\n const { visitedUrl } = visit;\n\n visitedUrlsStats[visitedUrl] = (visitedUrlsStats[visitedUrl] || 0) + 1;\n};\n\nexport const processStatsFromVisits = (visits: NormalizedVisit[]) => visits.reduce(\n (stats: VisitsStats, visit: NormalizedVisit) => {\n // We mutate the original object because it has a big performance impact when large data sets are processed\n updateOsStatsForVisit(stats.os, visit);\n updateBrowsersStatsForVisit(stats.browsers, visit);\n updateReferrersStatsForVisit(stats.referrers, visit);\n updateCountriesStatsForVisit(stats.countries, visit);\n updateCitiesStatsForVisit(stats.cities, visit);\n updateCitiesForMapForVisit(stats.citiesForMap, visit);\n updateVisitedUrlsForVisit(stats.visitedUrls, visit);\n\n return stats;\n },\n { os: {}, browsers: {}, referrers: {}, countries: {}, cities: {}, citiesForMap: {}, visitedUrls: {} },\n);\n\nexport const normalizeVisits = map((visit: Visit): NormalizedVisit => {\n const { userAgent, date, referer, visitLocation, potentialBot = false } = visit;\n const common = {\n date,\n potentialBot,\n ...parseUserAgent(userAgent),\n referer: extractDomain(referer),\n country: visitLocation?.countryName || 'Unknown', // eslint-disable-line @typescript-eslint/prefer-nullish-coalescing\n city: visitLocation?.cityName || 'Unknown', // eslint-disable-line @typescript-eslint/prefer-nullish-coalescing\n latitude: visitLocation?.latitude,\n longitude: visitLocation?.longitude,\n };\n\n if (!isOrphanVisit(visit)) {\n return common;\n }\n\n return { ...common, type: visit.type, visitedUrl: visit.visitedUrl };\n});\n\nexport interface VisitsParser {\n processStatsFromVisits: (normalizedVisits: NormalizedVisit[]) => VisitsStats;\n normalizeVisits: (visits: Visit[]) => NormalizedVisit[];\n}\n","import { DropdownItem, DropdownItemProps } from 'reactstrap';\nimport { OrphanVisitType, VisitsFilter } from '../types';\nimport { DropdownBtn } from '../../utils/DropdownBtn';\nimport { hasValue } from '../../utils/utils';\n\ninterface VisitsFilterDropdownProps {\n onChange: (filters: VisitsFilter) => void;\n selected?: VisitsFilter;\n className?: string;\n isOrphanVisits: boolean;\n botsSupported: boolean;\n}\n\nexport const VisitsFilterDropdown = (\n { onChange, selected = {}, className, isOrphanVisits, botsSupported }: VisitsFilterDropdownProps,\n) => {\n if (!botsSupported && !isOrphanVisits) {\n return null;\n }\n\n const { orphanVisitsType, excludeBots = false } = selected;\n const propsForOrphanVisitsTypeItem = (type: OrphanVisitType): DropdownItemProps => ({\n active: orphanVisitsType === type,\n onClick: () => onChange({ ...selected, orphanVisitsType: type === selected?.orphanVisitsType ? undefined : type }),\n });\n const onBotsClick = () => onChange({ ...selected, excludeBots: !selected?.excludeBots });\n\n return (\n \n {botsSupported && (\n <>\n Bots:\n Exclude potential bots\n \n )}\n\n {botsSupported && isOrphanVisits && }\n\n {isOrphanVisits && (\n <>\n Orphan visits type:\n Base URL\n Invalid short URL\n Regular 404\n \n )}\n\n \n onChange({})}>Clear filters\n \n );\n};\n","import { FC } from 'react';\nimport { Chart } from 'chart.js';\nimport './DoughnutChartLegend.scss';\n\ninterface DoughnutChartLegendProps {\n chart: Chart;\n}\n\nexport const DoughnutChartLegend: FC = ({ chart }) => {\n const { config } = chart;\n const { labels = [], datasets = [] } = config.data ?? {};\n const [{ backgroundColor: colors }] = datasets;\n const { defaultColor } = config.options ?? {} as any;\n\n return (\n
    \n {(labels as string[]).map((label, index) => (\n
  • \n \n {label}\n
  • \n ))}\n
\n );\n};\n","import { FC, useState, memo } from 'react';\nimport { Chart, ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { keys, values } from 'ramda';\nimport { Doughnut } from 'react-chartjs-2';\nimport { renderPieChartLabel } from '../../utils/helpers/charts';\nimport { isDarkThemeEnabled, PRIMARY_DARK_COLOR, PRIMARY_LIGHT_COLOR } from '../../utils/theme';\nimport { Stats } from '../types';\nimport { DoughnutChartLegend } from './DoughnutChartLegend';\n\ninterface DoughnutChartProps {\n stats: Stats;\n}\n\nconst generateChartDatasets = (data: number[]): ChartDataset[] => [\n {\n data,\n backgroundColor: [\n '#97BBCD',\n '#F7464A',\n '#46BFBD',\n '#FDB45C',\n '#949FB1',\n '#57A773',\n '#414066',\n '#08B2E3',\n '#B6C454',\n '#DCDCDC',\n '#463730',\n ],\n borderColor: isDarkThemeEnabled() ? PRIMARY_DARK_COLOR : PRIMARY_LIGHT_COLOR,\n borderWidth: 2,\n },\n];\nconst generateChartData = (labels: string[], data: number[]): ChartData => ({\n labels,\n datasets: generateChartDatasets(data),\n});\n\nexport const DoughnutChart: FC = memo(({ stats }) => {\n const [ chartRef, setChartRef ] = useState(); // Cannot use useRef here\n const labels = keys(stats);\n const data = values(stats);\n\n const options: ChartOptions = {\n plugins: {\n legend: { display: false },\n tooltip: {\n intersect: true,\n callbacks: { label: renderPieChartLabel },\n },\n },\n };\n const chartData = generateChartData(labels, data);\n\n return (\n
\n
\n {\n setChartRef(element ?? undefined);\n }}\n />\n
\n
\n {chartRef && }\n
\n
\n );\n});\n","import { Card, CardHeader, CardBody, CardFooter } from 'reactstrap';\nimport { FC, ReactNode } from 'react';\nimport './ChartCard.scss';\n\ninterface ChartCardProps {\n title: Function | string;\n footer?: ReactNode;\n}\n\nexport const ChartCard: FC = ({ title, footer, children }) => (\n \n {typeof title === 'function' ? title() : title}\n {children}\n {footer && {footer}}\n \n);\n","import { FC } from 'react';\nimport { Stats } from '../types';\nimport { DoughnutChart } from './DoughnutChart';\nimport { ChartCard } from './ChartCard';\n\ninterface DoughnutChartCardProps {\n title: string;\n stats: Stats;\n}\n\nexport const DoughnutChartCard: FC = ({ title, stats }) => (\n \n \n \n);\n","import { DropdownItem, DropdownMenu, DropdownToggle, UncontrolledDropdown } from 'reactstrap';\n\ninterface PaginationDropdownProps {\n ranges: number[];\n value: number;\n setValue: (newValue: number) => void;\n toggleClassName?: string;\n}\n\nconst PaginationDropdown = ({ toggleClassName, ranges, value, setValue }: PaginationDropdownProps) => (\n \n \n Paginate\n \n \n {ranges.map((itemsPerPage) => (\n setValue(itemsPerPage)}>\n {itemsPerPage} items per page\n \n ))}\n \n setValue(Infinity)}>\n Clear pagination\n \n \n \n);\n\nexport default PaginationDropdown;\n","import { FC } from 'react';\nimport { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { keys, values } from 'ramda';\nimport { Bar } from 'react-chartjs-2';\nimport { fillTheGaps } from '../../utils/helpers/visits';\nimport { pointerOnHover, renderChartLabel } from '../../utils/helpers/charts';\nimport { prettify } from '../../utils/helpers/numbers';\nimport { Stats } from '../types';\nimport { HIGHLIGHTED_COLOR, HIGHLIGHTED_COLOR_ALPHA, MAIN_COLOR, MAIN_COLOR_ALPHA } from '../../utils/theme';\n\nexport interface HorizontalBarChartProps {\n stats: Stats;\n max?: number;\n highlightedStats?: Stats;\n highlightedLabel?: string;\n onClick?: (label: string) => void;\n}\n\nconst dropLabelIfHidden = (label: string) => label.startsWith('hidden') ? '' : label;\nconst statsAreDefined = (stats: Stats | undefined): stats is Stats => !!stats && Object.keys(stats).length > 0;\nconst determineHeight = (labels: string[]): number | undefined => labels.length > 20 ? labels.length * 10 : undefined;\n\nconst generateChartDatasets = (\n data: number[],\n highlightedData: number[],\n highlightedLabel?: string,\n): ChartDataset[] => {\n const mainDataset: ChartDataset = {\n data,\n label: highlightedLabel ? 'Non-selected' : 'Visits',\n backgroundColor: MAIN_COLOR_ALPHA,\n borderColor: MAIN_COLOR,\n borderWidth: 2,\n };\n\n if (highlightedData.every((value) => value === 0)) {\n return [ mainDataset ];\n }\n\n const highlightedDataset: ChartDataset = {\n label: highlightedLabel ?? 'Selected',\n data: highlightedData,\n backgroundColor: HIGHLIGHTED_COLOR_ALPHA,\n borderColor: HIGHLIGHTED_COLOR,\n borderWidth: 2,\n };\n\n return [ mainDataset, highlightedDataset ];\n};\nconst generateChartData = (\n labels: string[],\n data: number[],\n highlightedData: number[],\n highlightedLabel?: string,\n): ChartData => ({\n labels,\n datasets: generateChartDatasets(data, highlightedData, highlightedLabel),\n});\n\ntype ClickedCharts = [{ index: number }] | [];\nconst chartElementAtEvent = (labels: string[], onClick?: (label: string) => void) => ([ chart ]: ClickedCharts) => {\n if (!onClick || !chart) {\n return;\n }\n\n onClick(labels[chart.index]);\n};\n\nexport const HorizontalBarChart: FC = (\n { stats, highlightedStats, highlightedLabel, onClick, max },\n) => {\n const labels = keys(stats).map(dropLabelIfHidden);\n const data = values(\n !statsAreDefined(highlightedStats) ? stats : keys(highlightedStats).reduce((acc, highlightedKey) => {\n if (acc[highlightedKey]) {\n acc[highlightedKey] -= highlightedStats[highlightedKey];\n }\n\n return acc;\n }, { ...stats }),\n );\n const highlightedData = fillTheGaps(highlightedStats ?? {}, labels);\n\n const options: ChartOptions = {\n plugins: {\n legend: { display: false },\n tooltip: {\n mode: 'y',\n // Do not show tooltip on items with empty label when in a bar chart\n filter: ({ label }) => label !== '',\n callbacks: { label: renderChartLabel },\n },\n },\n scales: {\n x: {\n beginAtZero: true,\n stacked: true,\n max,\n ticks: {\n precision: 0,\n callback: prettify,\n },\n },\n y: { stacked: true },\n },\n onHover: pointerOnHover,\n indexAxis: 'y',\n };\n const chartData = generateChartData(labels, data, highlightedData, highlightedLabel);\n const height = determineHeight(labels);\n\n // Provide a key based on the height, to force re-render every time the dataset changes (example, due to pagination)\n const renderChartComponent = (customKey: string) => (\n \n );\n\n return (\n <>\n {/* It's VERY IMPORTANT to render two different components here, as one has 1 dataset and the other has 2 */}\n {/* Using the same component causes a crash when switching from 1 to 2 datasets, and then back to 1 dataset */}\n {highlightedStats !== undefined && renderChartComponent('with_stats')}\n {highlightedStats === undefined && renderChartComponent('without_stats')}\n \n );\n};\n","import { FC, useState } from 'react';\nimport { fromPairs, pipe, reverse, sortBy, splitEvery, toLower, toPairs, type, zipObj } from 'ramda';\nimport { rangeOf } from '../../utils/utils';\nimport { Order } from '../../utils/helpers/ordering';\nimport SimplePaginator from '../../common/SimplePaginator';\nimport { roundTen } from '../../utils/helpers/numbers';\nimport { OrderingDropdown } from '../../utils/OrderingDropdown';\nimport PaginationDropdown from '../../utils/PaginationDropdown';\nimport { Stats, StatsRow } from '../types';\nimport { HorizontalBarChart, HorizontalBarChartProps } from './HorizontalBarChart';\nimport { ChartCard } from './ChartCard';\n\ninterface SortableBarChartCardProps extends Omit {\n title: Function | string;\n sortingItems: Record;\n withPagination?: boolean;\n extraHeaderContent?: Function;\n}\n\nconst toLowerIfString = (value: any) => type(value) === 'String' ? toLower(value) : value; // eslint-disable-line @typescript-eslint/no-unsafe-return\nconst pickKeyFromPair = ([ key ]: StatsRow) => key;\nconst pickValueFromPair = ([ , value ]: StatsRow) => value;\n\nexport const SortableBarChartCard: FC = ({\n stats,\n highlightedStats,\n title,\n sortingItems,\n extraHeaderContent,\n withPagination = true,\n ...rest\n}) => {\n const [ order, setOrder ] = useState>({});\n const [ currentPage, setCurrentPage ] = useState(1);\n const [ itemsPerPage, setItemsPerPage ] = useState(50);\n\n const getSortedPairsForStats = (stats: Stats, sortingItems: Record) => {\n const pairs = toPairs(stats);\n const sortedPairs = !order.field ? pairs : sortBy(\n pipe(\n order.field === Object.keys(sortingItems)[0] ? pickKeyFromPair : pickValueFromPair,\n toLowerIfString,\n ),\n pairs,\n );\n\n return !order.dir || order.dir === 'ASC' ? sortedPairs : reverse(sortedPairs);\n };\n const determineCurrentPagePairs = (pages: StatsRow[][]): StatsRow[] => {\n const page = pages[currentPage - 1];\n\n if (currentPage < pages.length) {\n return page;\n }\n\n const firstPageLength = pages[0].length;\n\n // Using the \"hidden\" key, the chart will just replace the label by an empty string\n return [ ...page, ...rangeOf(firstPageLength - page.length, (i): StatsRow => [ `hidden_${i}`, 0 ]) ];\n };\n const renderPagination = (pagesCount: number) =>\n ;\n const determineStats = (stats: Stats, highlightedStats: Stats | undefined, sortingItems: Record) => {\n const sortedPairs = getSortedPairsForStats(stats, sortingItems);\n const sortedKeys = sortedPairs.map(pickKeyFromPair);\n // The highlighted stats have to be ordered based on the regular stats, not on its own values\n const sortedHighlightedPairs = highlightedStats && toPairs(\n { ...zipObj(sortedKeys, sortedKeys.map(() => 0)), ...highlightedStats },\n );\n\n if (sortedPairs.length <= itemsPerPage) {\n return {\n currentPageStats: fromPairs(sortedPairs),\n currentPageHighlightedStats: sortedHighlightedPairs && fromPairs(sortedHighlightedPairs),\n };\n }\n\n const pages = splitEvery(itemsPerPage, sortedPairs);\n const highlightedPages = sortedHighlightedPairs && splitEvery(itemsPerPage, sortedHighlightedPairs);\n\n return {\n currentPageStats: fromPairs(determineCurrentPagePairs(pages)),\n currentPageHighlightedStats: highlightedPages && fromPairs(determineCurrentPagePairs(highlightedPages)),\n pagination: renderPagination(pages.length),\n max: roundTen(Math.max(...sortedPairs.map(pickValueFromPair))),\n };\n };\n\n const { currentPageStats, currentPageHighlightedStats, pagination, max } = determineStats(\n stats,\n highlightedStats && Object.keys(highlightedStats).length > 0 ? highlightedStats : undefined,\n sortingItems,\n );\n const activeCities = Object.keys(currentPageStats);\n const computeTitle = () => (\n <>\n {title}\n
\n {\n setOrder({ field, dir });\n setCurrentPage(1);\n }}\n />\n
\n {withPagination && Object.keys(stats).length > 50 && (\n
\n {\n setItemsPerPage(itemsPerPage);\n setCurrentPage(1);\n }}\n />\n
\n )}\n {extraHeaderContent && (\n
\n {extraHeaderContent(pagination ? activeCities : undefined)}\n
\n )}\n \n );\n\n return (\n \n \n \n );\n};\n","import { useEffect } from 'react';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { boundToMercureHub } from '../mercure/helpers/boundToMercureHub';\nimport { ShlinkVisitsParams } from '../api/types';\nimport { parseQuery } from '../utils/helpers/query';\nimport { Topics } from '../mercure/helpers/Topics';\nimport { ShortUrlDetail } from '../short-urls/reducers/shortUrlDetail';\nimport { useGoBack } from '../utils/helpers/hooks';\nimport { ShortUrlVisits as ShortUrlVisitsState } from './reducers/shortUrlVisits';\nimport ShortUrlVisitsHeader from './ShortUrlVisitsHeader';\nimport VisitsStats from './VisitsStats';\nimport { VisitsExporter } from './services/VisitsExporter';\nimport { NormalizedVisit, VisitsParams } from './types';\nimport { CommonVisitsProps } from './types/CommonVisitsProps';\nimport { toApiParams } from './types/helpers';\n\nexport interface ShortUrlVisitsProps extends CommonVisitsProps {\n getShortUrlVisits: (shortCode: string, query?: ShlinkVisitsParams, doIntervalFallback?: boolean) => void;\n shortUrlVisits: ShortUrlVisitsState;\n getShortUrlDetail: Function;\n shortUrlDetail: ShortUrlDetail;\n cancelGetShortUrlVisits: () => void;\n}\n\nconst ShortUrlVisits = ({ exportVisits }: VisitsExporter) => boundToMercureHub(({\n shortUrlVisits,\n shortUrlDetail,\n getShortUrlVisits,\n getShortUrlDetail,\n cancelGetShortUrlVisits,\n settings,\n selectedServer,\n}: ShortUrlVisitsProps) => {\n const { shortCode = '' } = useParams<{ shortCode: string }>();\n const { search } = useLocation();\n const goBack = useGoBack();\n const { domain } = parseQuery<{ domain?: string }>(search);\n const loadVisits = (params: VisitsParams, doIntervalFallback?: boolean) =>\n getShortUrlVisits(shortCode, { ...toApiParams(params), domain }, doIntervalFallback);\n const exportCsv = (visits: NormalizedVisit[]) => exportVisits(\n `short-url_${shortUrlDetail.shortUrl?.shortUrl.replace(/https?:\\/\\//g, '')}_visits.csv`,\n visits,\n );\n\n useEffect(() => {\n getShortUrlDetail(shortCode, domain);\n }, []);\n\n return (\n \n \n \n );\n}, (_, params) => [ Topics.shortUrlVisits(params.shortCode) ]);\n\nexport default ShortUrlVisits;\n","import Tag from '../tags/helpers/Tag';\nimport ColorGenerator from '../utils/services/ColorGenerator';\nimport VisitsHeader from './VisitsHeader';\nimport { TagVisits } from './reducers/tagVisits';\nimport './ShortUrlVisitsHeader.scss';\n\ninterface TagVisitsHeaderProps {\n tagVisits: TagVisits;\n goBack: () => void;\n colorGenerator: ColorGenerator;\n}\n\nconst TagVisitsHeader = ({ tagVisits, goBack, colorGenerator }: TagVisitsHeaderProps) => {\n const { visits, tag } = tagVisits;\n\n const visitsStatsTitle = (\n \n Visits for\n \n \n );\n\n return ;\n};\n\nexport default TagVisitsHeader;\n","import { useParams } from 'react-router-dom';\nimport { boundToMercureHub } from '../mercure/helpers/boundToMercureHub';\nimport ColorGenerator from '../utils/services/ColorGenerator';\nimport { ShlinkVisitsParams } from '../api/types';\nimport { Topics } from '../mercure/helpers/Topics';\nimport { useGoBack } from '../utils/helpers/hooks';\nimport { TagVisits as TagVisitsState } from './reducers/tagVisits';\nimport TagVisitsHeader from './TagVisitsHeader';\nimport VisitsStats from './VisitsStats';\nimport { VisitsExporter } from './services/VisitsExporter';\nimport { NormalizedVisit } from './types';\nimport { CommonVisitsProps } from './types/CommonVisitsProps';\nimport { toApiParams } from './types/helpers';\n\nexport interface TagVisitsProps extends CommonVisitsProps {\n getTagVisits: (tag: string, query?: ShlinkVisitsParams, doIntervalFallback?: boolean) => void;\n tagVisits: TagVisitsState;\n cancelGetTagVisits: () => void;\n}\n\nconst TagVisits = (colorGenerator: ColorGenerator, { exportVisits }: VisitsExporter) => boundToMercureHub(({\n getTagVisits,\n tagVisits,\n cancelGetTagVisits,\n settings,\n selectedServer,\n}: TagVisitsProps) => {\n const goBack = useGoBack();\n const { tag = '' } = useParams();\n const loadVisits = (params: ShlinkVisitsParams, doIntervalFallback?: boolean) =>\n getTagVisits(tag, toApiParams(params), doIntervalFallback);\n const exportCsv = (visits: NormalizedVisit[]) => exportVisits(`tag_${tag}_visits.csv`, visits);\n\n return (\n \n \n \n );\n}, () => [ Topics.visits ]);\n\nexport default TagVisits;\n","import VisitsHeader from './VisitsHeader';\nimport { VisitsInfo } from './types';\nimport './ShortUrlVisitsHeader.scss';\n\ninterface OrphanVisitsHeaderProps {\n orphanVisits: VisitsInfo;\n goBack: () => void;\n}\n\nexport const OrphanVisitsHeader = ({ orphanVisits, goBack }: OrphanVisitsHeaderProps) => {\n const { visits } = orphanVisits;\n\n return ;\n};\n","import { boundToMercureHub } from '../mercure/helpers/boundToMercureHub';\nimport { ShlinkVisitsParams } from '../api/types';\nimport { Topics } from '../mercure/helpers/Topics';\nimport { useGoBack } from '../utils/helpers/hooks';\nimport VisitsStats from './VisitsStats';\nimport { OrphanVisitsHeader } from './OrphanVisitsHeader';\nimport { NormalizedVisit, OrphanVisitType, VisitsInfo, VisitsParams } from './types';\nimport { VisitsExporter } from './services/VisitsExporter';\nimport { CommonVisitsProps } from './types/CommonVisitsProps';\nimport { toApiParams } from './types/helpers';\n\nexport interface OrphanVisitsProps extends CommonVisitsProps {\n getOrphanVisits: (\n params?: ShlinkVisitsParams,\n orphanVisitsType?: OrphanVisitType,\n doIntervalFallback?: boolean,\n ) => void;\n orphanVisits: VisitsInfo;\n cancelGetOrphanVisits: () => void;\n}\n\nexport const OrphanVisits = ({ exportVisits }: VisitsExporter) => boundToMercureHub(({\n getOrphanVisits,\n orphanVisits,\n cancelGetOrphanVisits,\n settings,\n selectedServer,\n}: OrphanVisitsProps) => {\n const goBack = useGoBack();\n const exportCsv = (visits: NormalizedVisit[]) => exportVisits('orphan_visits.csv', visits);\n const loadVisits = (params: VisitsParams, doIntervalFallback?: boolean) =>\n getOrphanVisits(toApiParams(params), params.filter?.orphanVisitsType, doIntervalFallback);\n\n return (\n \n \n \n );\n}, () => [ Topics.orphanVisits ]);\n","import VisitsHeader from './VisitsHeader';\nimport { VisitsInfo } from './types';\nimport './ShortUrlVisitsHeader.scss';\n\ninterface NonOrphanVisitsHeaderProps {\n nonOrphanVisits: VisitsInfo;\n goBack: () => void;\n}\n\nexport const NonOrphanVisitsHeader = ({ nonOrphanVisits, goBack }: NonOrphanVisitsHeaderProps) => {\n const { visits } = nonOrphanVisits;\n\n return ;\n};\n","import { boundToMercureHub } from '../mercure/helpers/boundToMercureHub';\nimport { ShlinkVisitsParams } from '../api/types';\nimport { Topics } from '../mercure/helpers/Topics';\nimport { useGoBack } from '../utils/helpers/hooks';\nimport VisitsStats from './VisitsStats';\nimport { NormalizedVisit, VisitsInfo, VisitsParams } from './types';\nimport { VisitsExporter } from './services/VisitsExporter';\nimport { CommonVisitsProps } from './types/CommonVisitsProps';\nimport { toApiParams } from './types/helpers';\nimport { NonOrphanVisitsHeader } from './NonOrphanVisitsHeader';\n\nexport interface NonOrphanVisitsProps extends CommonVisitsProps {\n getNonOrphanVisits: (params?: ShlinkVisitsParams, doIntervalFallback?: boolean) => void;\n nonOrphanVisits: VisitsInfo;\n cancelGetNonOrphanVisits: () => void;\n}\n\nexport const NonOrphanVisits = ({ exportVisits }: VisitsExporter) => boundToMercureHub(({\n getNonOrphanVisits,\n nonOrphanVisits,\n cancelGetNonOrphanVisits,\n settings,\n selectedServer,\n}: NonOrphanVisitsProps) => {\n const goBack = useGoBack();\n const exportCsv = (visits: NormalizedVisit[]) => exportVisits('non_orphan_visits.csv', visits);\n const loadVisits = (params: VisitsParams, doIntervalFallback?: boolean) =>\n getNonOrphanVisits(toApiParams(params), doIntervalFallback);\n\n return (\n \n \n \n );\n}, () => [ Topics.visits ]);\n","import { flatten, prop, range, splitEvery } from 'ramda';\nimport { Action, Dispatch } from 'redux';\nimport { ShlinkPaginator, ShlinkVisits, ShlinkVisitsParams } from '../../api/types';\nimport { Visit } from '../types';\nimport { parseApiError } from '../../api/utils';\nimport { ApiErrorAction } from '../../api/types/actions';\nimport { dateToMatchingInterval } from '../../utils/dates/types';\n\nconst ITEMS_PER_PAGE = 5000;\nconst PARALLEL_REQUESTS_COUNT = 4;\nconst PARALLEL_STARTING_PAGE = 2;\n\nconst isLastPage = ({ currentPage, pagesCount }: ShlinkPaginator): boolean => currentPage >= pagesCount;\nconst calcProgress = (total: number, current: number): number => current * 100 / total;\n\ntype VisitsLoader = (page: number, itemsPerPage: number) => Promise;\ntype LastVisitLoader = () => Promise;\ninterface ActionMap {\n start: string;\n large: string;\n finish: string;\n error: string;\n progress: string;\n fallbackToInterval: string;\n}\n\nexport const getVisitsWithLoader = async & { visits: Visit[] }>(\n visitsLoader: VisitsLoader,\n lastVisitLoader: LastVisitLoader,\n extraFinishActionData: Partial,\n actionMap: ActionMap,\n dispatch: Dispatch,\n shouldCancel: () => boolean,\n) => {\n dispatch({ type: actionMap.start });\n\n const loadVisitsInParallel = async (pages: number[]): Promise =>\n Promise.all(pages.map(async (page) => visitsLoader(page, ITEMS_PER_PAGE).then(prop('data')))).then(flatten);\n\n const loadPagesBlocks = async (pagesBlocks: number[][], index = 0): Promise => {\n if (shouldCancel()) {\n return [];\n }\n\n const data = await loadVisitsInParallel(pagesBlocks[index]);\n\n dispatch({ type: actionMap.progress, progress: calcProgress(pagesBlocks.length, index + PARALLEL_STARTING_PAGE) });\n\n if (index < pagesBlocks.length - 1) {\n return data.concat(await loadPagesBlocks(pagesBlocks, index + 1));\n }\n\n return data;\n };\n\n const loadVisits = async (page = 1) => {\n const { pagination, data } = await visitsLoader(page, ITEMS_PER_PAGE);\n\n // If pagination was not returned, then this is an old shlink version. Just return data\n if (!pagination || isLastPage(pagination)) {\n return data;\n }\n\n // If there are more pages, make requests in blocks of 4\n const pagesRange = range(PARALLEL_STARTING_PAGE, pagination.pagesCount + 1);\n const pagesBlocks = splitEvery(PARALLEL_REQUESTS_COUNT, pagesRange);\n\n if (pagination.pagesCount - 1 > PARALLEL_REQUESTS_COUNT) {\n dispatch({ type: actionMap.large });\n }\n\n return data.concat(await loadPagesBlocks(pagesBlocks));\n };\n\n try {\n const [ visits, lastVisit ] = await Promise.all([ loadVisits(), lastVisitLoader() ]);\n\n dispatch(\n !visits.length && lastVisit\n ? { type: actionMap.fallbackToInterval, fallbackInterval: dateToMatchingInterval(lastVisit.date) }\n : { ...extraFinishActionData, visits, type: actionMap.finish },\n );\n } catch (e: any) {\n dispatch({ type: actionMap.error, errorData: parseApiError(e) });\n }\n};\n\nexport const lastVisitLoaderForLoader = (\n doIntervalFallback: boolean,\n loader: (params: ShlinkVisitsParams) => Promise,\n): LastVisitLoader => {\n if (!doIntervalFallback) {\n return async () => Promise.resolve(undefined);\n }\n\n return async () => loader({ page: 1, itemsPerPage: 1 }).then((result) => result.data[0]);\n};\n","import { Action, Dispatch } from 'redux';\nimport { shortUrlMatches } from '../../short-urls/helpers';\nimport { Visit, VisitsFallbackIntervalAction, VisitsInfo, VisitsLoadProgressChangedAction } from '../types';\nimport { ShortUrlIdentifier } from '../../short-urls/data';\nimport { buildActionCreator, buildReducer } from '../../utils/helpers/redux';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\nimport { GetState } from '../../container/types';\nimport { ShlinkVisitsParams } from '../../api/types';\nimport { ApiErrorAction } from '../../api/types/actions';\nimport { isBetween } from '../../utils/helpers/date';\nimport { getVisitsWithLoader, lastVisitLoaderForLoader } from './common';\nimport { CREATE_VISITS, CreateVisitsAction } from './visitCreation';\n\n/* eslint-disable padding-line-between-statements */\nexport const GET_SHORT_URL_VISITS_START = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS_START';\nexport const GET_SHORT_URL_VISITS_ERROR = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS_ERROR';\nexport const GET_SHORT_URL_VISITS = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS';\nexport const GET_SHORT_URL_VISITS_LARGE = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS_LARGE';\nexport const GET_SHORT_URL_VISITS_CANCEL = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS_CANCEL';\nexport const GET_SHORT_URL_VISITS_PROGRESS_CHANGED = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS_PROGRESS_CHANGED';\nexport const GET_SHORT_URL_VISITS_FALLBACK_TO_INTERVAL = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS_FALLBACK_TO_INTERVAL';\n/* eslint-enable padding-line-between-statements */\n\nexport interface ShortUrlVisits extends VisitsInfo, ShortUrlIdentifier {}\n\ninterface ShortUrlVisitsAction extends Action, ShortUrlIdentifier {\n visits: Visit[];\n query?: ShlinkVisitsParams;\n}\n\ntype ShortUrlVisitsCombinedAction = ShortUrlVisitsAction\n& VisitsLoadProgressChangedAction\n& VisitsFallbackIntervalAction\n& CreateVisitsAction\n& ApiErrorAction;\n\nconst initialState: ShortUrlVisits = {\n visits: [],\n shortCode: '',\n domain: undefined, // Deprecated. Value from query params can be used instead\n loading: false,\n loadingLarge: false,\n error: false,\n cancelLoad: false,\n progress: 0,\n};\n\nexport default buildReducer({\n [GET_SHORT_URL_VISITS_START]: () => ({ ...initialState, loading: true }),\n [GET_SHORT_URL_VISITS_ERROR]: (_, { errorData }) => ({ ...initialState, error: true, errorData }),\n [GET_SHORT_URL_VISITS]: (state, { visits, query, shortCode, domain }) => ({\n ...state,\n visits,\n shortCode,\n domain,\n query,\n loading: false,\n error: false,\n }),\n [GET_SHORT_URL_VISITS_LARGE]: (state) => ({ ...state, loadingLarge: true }),\n [GET_SHORT_URL_VISITS_CANCEL]: (state) => ({ ...state, cancelLoad: true }),\n [GET_SHORT_URL_VISITS_PROGRESS_CHANGED]: (state, { progress }) => ({ ...state, progress }),\n [GET_SHORT_URL_VISITS_FALLBACK_TO_INTERVAL]: (state, { fallbackInterval }) => ({ ...state, fallbackInterval }),\n [CREATE_VISITS]: (state, { createdVisits }) => {\n const { shortCode, domain, visits, query = {} } = state;\n const { startDate, endDate } = query;\n const newVisits = createdVisits\n .filter(\n ({ shortUrl, visit }) =>\n shortUrl && shortUrlMatches(shortUrl, shortCode, domain) && isBetween(visit.date, startDate, endDate),\n )\n .map(({ visit }) => visit);\n\n return newVisits.length === 0 ? state : { ...state, visits: [ ...newVisits, ...visits ] };\n },\n}, initialState);\n\nexport const getShortUrlVisits = (buildShlinkApiClient: ShlinkApiClientBuilder) => (\n shortCode: string,\n query: ShlinkVisitsParams = {},\n doIntervalFallback = false,\n) => async (dispatch: Dispatch, getState: GetState) => {\n const { getShortUrlVisits } = buildShlinkApiClient(getState);\n const visitsLoader = async (page: number, itemsPerPage: number) => getShortUrlVisits(\n shortCode,\n { ...query, page, itemsPerPage },\n );\n const lastVisitLoader = lastVisitLoaderForLoader(\n doIntervalFallback,\n async (params) => getShortUrlVisits(shortCode, { ...params, domain: query.domain }),\n );\n const shouldCancel = () => getState().shortUrlVisits.cancelLoad;\n const extraFinishActionData: Partial = { shortCode, query, domain: query.domain };\n const actionMap = {\n start: GET_SHORT_URL_VISITS_START,\n large: GET_SHORT_URL_VISITS_LARGE,\n finish: GET_SHORT_URL_VISITS,\n error: GET_SHORT_URL_VISITS_ERROR,\n progress: GET_SHORT_URL_VISITS_PROGRESS_CHANGED,\n fallbackToInterval: GET_SHORT_URL_VISITS_FALLBACK_TO_INTERVAL,\n };\n\n return getVisitsWithLoader(visitsLoader, lastVisitLoader, extraFinishActionData, actionMap, dispatch, shouldCancel);\n};\n\nexport const cancelGetShortUrlVisits = buildActionCreator(GET_SHORT_URL_VISITS_CANCEL);\n","import { Action, Dispatch } from 'redux';\nimport { Visit, VisitsFallbackIntervalAction, VisitsInfo, VisitsLoadProgressChangedAction } from '../types';\nimport { buildActionCreator, buildReducer } from '../../utils/helpers/redux';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\nimport { GetState } from '../../container/types';\nimport { ShlinkVisitsParams } from '../../api/types';\nimport { ApiErrorAction } from '../../api/types/actions';\nimport { isBetween } from '../../utils/helpers/date';\nimport { getVisitsWithLoader, lastVisitLoaderForLoader } from './common';\nimport { CREATE_VISITS, CreateVisitsAction } from './visitCreation';\n\n/* eslint-disable padding-line-between-statements */\nexport const GET_TAG_VISITS_START = 'shlink/tagVisits/GET_TAG_VISITS_START';\nexport const GET_TAG_VISITS_ERROR = 'shlink/tagVisits/GET_TAG_VISITS_ERROR';\nexport const GET_TAG_VISITS = 'shlink/tagVisits/GET_TAG_VISITS';\nexport const GET_TAG_VISITS_LARGE = 'shlink/tagVisits/GET_TAG_VISITS_LARGE';\nexport const GET_TAG_VISITS_CANCEL = 'shlink/tagVisits/GET_TAG_VISITS_CANCEL';\nexport const GET_TAG_VISITS_PROGRESS_CHANGED = 'shlink/tagVisits/GET_TAG_VISITS_PROGRESS_CHANGED';\nexport const GET_TAG_VISITS_FALLBACK_TO_INTERVAL = 'shlink/tagVisits/GET_TAG_VISITS_FALLBACK_TO_INTERVAL';\n/* eslint-enable padding-line-between-statements */\n\nexport interface TagVisits extends VisitsInfo {\n tag: string;\n}\n\nexport interface TagVisitsAction extends Action {\n visits: Visit[];\n tag: string;\n query?: ShlinkVisitsParams;\n}\n\ntype TagsVisitsCombinedAction = TagVisitsAction\n& VisitsLoadProgressChangedAction\n& VisitsFallbackIntervalAction\n& CreateVisitsAction\n& ApiErrorAction;\n\nconst initialState: TagVisits = {\n visits: [],\n tag: '',\n loading: false,\n loadingLarge: false,\n error: false,\n cancelLoad: false,\n progress: 0,\n};\n\nexport default buildReducer({\n [GET_TAG_VISITS_START]: () => ({ ...initialState, loading: true }),\n [GET_TAG_VISITS_ERROR]: (_, { errorData }) => ({ ...initialState, error: true, errorData }),\n [GET_TAG_VISITS]: (state, { visits, tag, query }) => ({ ...state, visits, tag, query, loading: false, error: false }),\n [GET_TAG_VISITS_LARGE]: (state) => ({ ...state, loadingLarge: true }),\n [GET_TAG_VISITS_CANCEL]: (state) => ({ ...state, cancelLoad: true }),\n [GET_TAG_VISITS_PROGRESS_CHANGED]: (state, { progress }) => ({ ...state, progress }),\n [GET_TAG_VISITS_FALLBACK_TO_INTERVAL]: (state, { fallbackInterval }) => ({ ...state, fallbackInterval }),\n [CREATE_VISITS]: (state, { createdVisits }) => {\n const { tag, visits, query = {} } = state;\n const { startDate, endDate } = query;\n const newVisits = createdVisits\n .filter(({ shortUrl, visit }) => shortUrl?.tags.includes(tag) && isBetween(visit.date, startDate, endDate))\n .map(({ visit }) => visit);\n\n return { ...state, visits: [ ...newVisits, ...visits ] };\n },\n}, initialState);\n\nexport const getTagVisits = (buildShlinkApiClient: ShlinkApiClientBuilder) => (\n tag: string,\n query: ShlinkVisitsParams = {},\n doIntervalFallback = false,\n) => async (dispatch: Dispatch, getState: GetState) => {\n const { getTagVisits } = buildShlinkApiClient(getState);\n const visitsLoader = async (page: number, itemsPerPage: number) => getTagVisits(\n tag,\n { ...query, page, itemsPerPage },\n );\n const lastVisitLoader = lastVisitLoaderForLoader(doIntervalFallback, async (params) => getTagVisits(tag, params));\n const shouldCancel = () => getState().tagVisits.cancelLoad;\n const extraFinishActionData: Partial = { tag, query };\n const actionMap = {\n start: GET_TAG_VISITS_START,\n large: GET_TAG_VISITS_LARGE,\n finish: GET_TAG_VISITS,\n error: GET_TAG_VISITS_ERROR,\n progress: GET_TAG_VISITS_PROGRESS_CHANGED,\n fallbackToInterval: GET_TAG_VISITS_FALLBACK_TO_INTERVAL,\n };\n\n return getVisitsWithLoader(visitsLoader, lastVisitLoader, extraFinishActionData, actionMap, dispatch, shouldCancel);\n};\n\nexport const cancelGetTagVisits = buildActionCreator(GET_TAG_VISITS_CANCEL);\n","import { Action, Dispatch } from 'redux';\nimport {\n OrphanVisit,\n OrphanVisitType,\n Visit,\n VisitsFallbackIntervalAction,\n VisitsInfo,\n VisitsLoadProgressChangedAction,\n} from '../types';\nimport { buildActionCreator, buildReducer } from '../../utils/helpers/redux';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\nimport { GetState } from '../../container/types';\nimport { ShlinkVisitsParams } from '../../api/types';\nimport { isOrphanVisit } from '../types/helpers';\nimport { ApiErrorAction } from '../../api/types/actions';\nimport { isBetween } from '../../utils/helpers/date';\nimport { getVisitsWithLoader, lastVisitLoaderForLoader } from './common';\nimport { CREATE_VISITS, CreateVisitsAction } from './visitCreation';\n\n/* eslint-disable padding-line-between-statements */\nexport const GET_ORPHAN_VISITS_START = 'shlink/orphanVisits/GET_ORPHAN_VISITS_START';\nexport const GET_ORPHAN_VISITS_ERROR = 'shlink/orphanVisits/GET_ORPHAN_VISITS_ERROR';\nexport const GET_ORPHAN_VISITS = 'shlink/orphanVisits/GET_ORPHAN_VISITS';\nexport const GET_ORPHAN_VISITS_LARGE = 'shlink/orphanVisits/GET_ORPHAN_VISITS_LARGE';\nexport const GET_ORPHAN_VISITS_CANCEL = 'shlink/orphanVisits/GET_ORPHAN_VISITS_CANCEL';\nexport const GET_ORPHAN_VISITS_PROGRESS_CHANGED = 'shlink/orphanVisits/GET_ORPHAN_VISITS_PROGRESS_CHANGED';\nexport const GET_ORPHAN_VISITS_FALLBACK_TO_INTERVAL = 'shlink/orphanVisits/GET_ORPHAN_VISITS_FALLBACK_TO_INTERVAL';\n/* eslint-enable padding-line-between-statements */\n\nexport interface OrphanVisitsAction extends Action {\n visits: Visit[];\n query?: ShlinkVisitsParams;\n}\n\ntype OrphanVisitsCombinedAction = OrphanVisitsAction\n& VisitsLoadProgressChangedAction\n& VisitsFallbackIntervalAction\n& CreateVisitsAction\n& ApiErrorAction;\n\nconst initialState: VisitsInfo = {\n visits: [],\n loading: false,\n loadingLarge: false,\n error: false,\n cancelLoad: false,\n progress: 0,\n};\n\nexport default buildReducer({\n [GET_ORPHAN_VISITS_START]: () => ({ ...initialState, loading: true }),\n [GET_ORPHAN_VISITS_ERROR]: (_, { errorData }) => ({ ...initialState, error: true, errorData }),\n [GET_ORPHAN_VISITS]: (state, { visits, query }) => ({ ...state, visits, query, loading: false, error: false }),\n [GET_ORPHAN_VISITS_LARGE]: (state) => ({ ...state, loadingLarge: true }),\n [GET_ORPHAN_VISITS_CANCEL]: (state) => ({ ...state, cancelLoad: true }),\n [GET_ORPHAN_VISITS_PROGRESS_CHANGED]: (state, { progress }) => ({ ...state, progress }),\n [GET_ORPHAN_VISITS_FALLBACK_TO_INTERVAL]: (state, { fallbackInterval }) => ({ ...state, fallbackInterval }),\n [CREATE_VISITS]: (state, { createdVisits }) => {\n const { visits, query = {} } = state;\n const { startDate, endDate } = query;\n const newVisits = createdVisits\n .filter(({ visit, shortUrl }) => !shortUrl && isBetween(visit.date, startDate, endDate))\n .map(({ visit }) => visit);\n\n return { ...state, visits: [ ...newVisits, ...visits ] };\n },\n}, initialState);\n\nconst matchesType = (visit: OrphanVisit, orphanVisitsType?: OrphanVisitType) =>\n !orphanVisitsType || orphanVisitsType === visit.type;\n\nexport const getOrphanVisits = (buildShlinkApiClient: ShlinkApiClientBuilder) => (\n query: ShlinkVisitsParams = {},\n orphanVisitsType?: OrphanVisitType,\n doIntervalFallback = false,\n) => async (dispatch: Dispatch, getState: GetState) => {\n const { getOrphanVisits } = buildShlinkApiClient(getState);\n const visitsLoader = async (page: number, itemsPerPage: number) => getOrphanVisits({ ...query, page, itemsPerPage })\n .then((result) => {\n const visits = result.data.filter((visit) => isOrphanVisit(visit) && matchesType(visit, orphanVisitsType));\n\n return { ...result, data: visits };\n });\n const lastVisitLoader = lastVisitLoaderForLoader(doIntervalFallback, getOrphanVisits);\n const shouldCancel = () => getState().orphanVisits.cancelLoad;\n const extraFinishActionData: Partial = { query };\n const actionMap = {\n start: GET_ORPHAN_VISITS_START,\n large: GET_ORPHAN_VISITS_LARGE,\n finish: GET_ORPHAN_VISITS,\n error: GET_ORPHAN_VISITS_ERROR,\n progress: GET_ORPHAN_VISITS_PROGRESS_CHANGED,\n fallbackToInterval: GET_ORPHAN_VISITS_FALLBACK_TO_INTERVAL,\n };\n\n return getVisitsWithLoader(visitsLoader, lastVisitLoader, extraFinishActionData, actionMap, dispatch, shouldCancel);\n};\n\nexport const cancelGetOrphanVisits = buildActionCreator(GET_ORPHAN_VISITS_CANCEL);\n","import { Action, Dispatch } from 'redux';\nimport {\n Visit,\n VisitsFallbackIntervalAction,\n VisitsInfo,\n VisitsLoadProgressChangedAction,\n} from '../types';\nimport { buildActionCreator, buildReducer } from '../../utils/helpers/redux';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\nimport { GetState } from '../../container/types';\nimport { ShlinkVisitsParams } from '../../api/types';\nimport { ApiErrorAction } from '../../api/types/actions';\nimport { isBetween } from '../../utils/helpers/date';\nimport { getVisitsWithLoader, lastVisitLoaderForLoader } from './common';\nimport { CREATE_VISITS, CreateVisitsAction } from './visitCreation';\n\n/* eslint-disable padding-line-between-statements */\nexport const GET_NON_ORPHAN_VISITS_START = 'shlink/orphanVisits/GET_NON_ORPHAN_VISITS_START';\nexport const GET_NON_ORPHAN_VISITS_ERROR = 'shlink/orphanVisits/GET_NON_ORPHAN_VISITS_ERROR';\nexport const GET_NON_ORPHAN_VISITS = 'shlink/orphanVisits/GET_NON_ORPHAN_VISITS';\nexport const GET_NON_ORPHAN_VISITS_LARGE = 'shlink/orphanVisits/GET_NON_ORPHAN_VISITS_LARGE';\nexport const GET_NON_ORPHAN_VISITS_CANCEL = 'shlink/orphanVisits/GET_NON_ORPHAN_VISITS_CANCEL';\nexport const GET_NON_ORPHAN_VISITS_PROGRESS_CHANGED = 'shlink/orphanVisits/GET_NON_ORPHAN_VISITS_PROGRESS_CHANGED';\nexport const GET_NON_ORPHAN_VISITS_FALLBACK_TO_INTERVAL = 'shlink/orphanVisits/GET_NON_ORPHAN_VISITS_FALLBACK_TO_INTERVAL';\n/* eslint-enable padding-line-between-statements */\n\nexport interface NonOrphanVisitsAction extends Action {\n visits: Visit[];\n query?: ShlinkVisitsParams;\n}\n\ntype NonOrphanVisitsCombinedAction = NonOrphanVisitsAction\n& VisitsLoadProgressChangedAction\n& VisitsFallbackIntervalAction\n& CreateVisitsAction\n& ApiErrorAction;\n\nconst initialState: VisitsInfo = {\n visits: [],\n loading: false,\n loadingLarge: false,\n error: false,\n cancelLoad: false,\n progress: 0,\n};\n\nexport default buildReducer({\n [GET_NON_ORPHAN_VISITS_START]: () => ({ ...initialState, loading: true }),\n [GET_NON_ORPHAN_VISITS_ERROR]: (_, { errorData }) => ({ ...initialState, error: true, errorData }),\n [GET_NON_ORPHAN_VISITS]: (state, { visits, query }) => ({ ...state, visits, query, loading: false, error: false }),\n [GET_NON_ORPHAN_VISITS_LARGE]: (state) => ({ ...state, loadingLarge: true }),\n [GET_NON_ORPHAN_VISITS_CANCEL]: (state) => ({ ...state, cancelLoad: true }),\n [GET_NON_ORPHAN_VISITS_PROGRESS_CHANGED]: (state, { progress }) => ({ ...state, progress }),\n [GET_NON_ORPHAN_VISITS_FALLBACK_TO_INTERVAL]: (state, { fallbackInterval }) => ({ ...state, fallbackInterval }),\n [CREATE_VISITS]: (state, { createdVisits }) => {\n const { visits, query = {} } = state;\n const { startDate, endDate } = query;\n const newVisits = createdVisits\n .filter(({ visit }) => isBetween(visit.date, startDate, endDate))\n .map(({ visit }) => visit);\n\n return { ...state, visits: [ ...newVisits, ...visits ] };\n },\n}, initialState);\n\nexport const getNonOrphanVisits = (buildShlinkApiClient: ShlinkApiClientBuilder) => (\n query: ShlinkVisitsParams = {},\n doIntervalFallback = false,\n) => async (dispatch: Dispatch, getState: GetState) => {\n const { getNonOrphanVisits } = buildShlinkApiClient(getState);\n const visitsLoader = async (page: number, itemsPerPage: number) =>\n getNonOrphanVisits({ ...query, page, itemsPerPage });\n const lastVisitLoader = lastVisitLoaderForLoader(doIntervalFallback, getNonOrphanVisits);\n const shouldCancel = () => getState().orphanVisits.cancelLoad;\n const extraFinishActionData: Partial = { query };\n const actionMap = {\n start: GET_NON_ORPHAN_VISITS_START,\n large: GET_NON_ORPHAN_VISITS_LARGE,\n finish: GET_NON_ORPHAN_VISITS,\n error: GET_NON_ORPHAN_VISITS_ERROR,\n progress: GET_NON_ORPHAN_VISITS_PROGRESS_CHANGED,\n fallbackToInterval: GET_NON_ORPHAN_VISITS_FALLBACK_TO_INTERVAL,\n };\n\n return getVisitsWithLoader(visitsLoader, lastVisitLoader, extraFinishActionData, actionMap, dispatch, shouldCancel);\n};\n\nexport const cancelGetNonOrphanVisits = buildActionCreator(GET_NON_ORPHAN_VISITS_CANCEL);\n","import { Action, Dispatch } from 'redux';\nimport { ShlinkVisitsOverview } from '../../api/types';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\nimport { GetState } from '../../container/types';\nimport { buildReducer } from '../../utils/helpers/redux';\nimport { groupNewVisitsByType } from '../types/helpers';\nimport { CREATE_VISITS, CreateVisitsAction } from './visitCreation';\n\n/* eslint-disable padding-line-between-statements */\nexport const GET_OVERVIEW_START = 'shlink/visitsOverview/GET_OVERVIEW_START';\nexport const GET_OVERVIEW_ERROR = 'shlink/visitsOverview/GET_OVERVIEW_ERROR';\nexport const GET_OVERVIEW = 'shlink/visitsOverview/GET_OVERVIEW';\n/* eslint-enable padding-line-between-statements */\n\nexport interface VisitsOverview {\n visitsCount: number;\n orphanVisitsCount?: number;\n loading: boolean;\n error: boolean;\n}\n\nexport type GetVisitsOverviewAction = ShlinkVisitsOverview & Action;\n\nconst initialState: VisitsOverview = {\n visitsCount: 0,\n orphanVisitsCount: 0,\n loading: false,\n error: false,\n};\n\nexport default buildReducer({\n [GET_OVERVIEW_START]: () => ({ ...initialState, loading: true }),\n [GET_OVERVIEW_ERROR]: () => ({ ...initialState, error: true }),\n [GET_OVERVIEW]: (_, { visitsCount, orphanVisitsCount }) => ({ ...initialState, visitsCount, orphanVisitsCount }),\n [CREATE_VISITS]: ({ visitsCount, orphanVisitsCount = 0, ...rest }, { createdVisits }) => {\n const { regularVisits, orphanVisits } = groupNewVisitsByType(createdVisits);\n\n return {\n ...rest,\n visitsCount: visitsCount + regularVisits.length,\n orphanVisitsCount: orphanVisitsCount + orphanVisits.length,\n };\n },\n}, initialState);\n\nexport const loadVisitsOverview = (buildShlinkApiClient: ShlinkApiClientBuilder) => () => async (\n dispatch: Dispatch,\n getState: GetState,\n) => {\n dispatch({ type: GET_OVERVIEW_START });\n\n try {\n const { getVisitsOverview } = buildShlinkApiClient(getState);\n const result = await getVisitsOverview();\n\n dispatch({ type: GET_OVERVIEW, ...result });\n } catch (e) {\n dispatch({ type: GET_OVERVIEW_ERROR });\n }\n};\n","import { CsvJson } from 'csvjson';\nimport { NormalizedVisit } from '../types';\nimport { saveCsv } from '../../utils/helpers/files';\n\nexport class VisitsExporter {\n public constructor(\n private readonly window: Window,\n private readonly csvjson: CsvJson,\n ) {}\n\n public readonly exportVisits = (filename: string, visits: NormalizedVisit[]) => {\n if (!visits.length) {\n return;\n }\n\n const csv = this.csvjson.toCSV(visits, { headers: 'key' });\n\n saveCsv(this.window, csv, filename);\n };\n}\n","import Bottle from 'bottlejs';\nimport MapModal from '../helpers/MapModal';\nimport { createNewVisits } from '../reducers/visitCreation';\nimport ShortUrlVisits from '../ShortUrlVisits';\nimport TagVisits from '../TagVisits';\nimport { OrphanVisits } from '../OrphanVisits';\nimport { NonOrphanVisits } from '../NonOrphanVisits';\nimport { cancelGetShortUrlVisits, getShortUrlVisits } from '../reducers/shortUrlVisits';\nimport { cancelGetTagVisits, getTagVisits } from '../reducers/tagVisits';\nimport { cancelGetOrphanVisits, getOrphanVisits } from '../reducers/orphanVisits';\nimport { cancelGetNonOrphanVisits, getNonOrphanVisits } from '../reducers/nonOrphanVisits';\nimport { ConnectDecorator } from '../../container/types';\nimport { loadVisitsOverview } from '../reducers/visitsOverview';\nimport * as visitsParser from './VisitsParser';\nimport { VisitsExporter } from './VisitsExporter';\n\nconst provideServices = (bottle: Bottle, connect: ConnectDecorator) => {\n // Components\n bottle.serviceFactory('MapModal', () => MapModal);\n\n bottle.serviceFactory('ShortUrlVisits', ShortUrlVisits, 'VisitsExporter');\n bottle.decorator('ShortUrlVisits', connect(\n [ 'shortUrlVisits', 'shortUrlDetail', 'mercureInfo', 'settings', 'selectedServer' ],\n [ 'getShortUrlVisits', 'getShortUrlDetail', 'cancelGetShortUrlVisits', 'createNewVisits', 'loadMercureInfo' ],\n ));\n\n bottle.serviceFactory('TagVisits', TagVisits, 'ColorGenerator', 'VisitsExporter');\n bottle.decorator('TagVisits', connect(\n [ 'tagVisits', 'mercureInfo', 'settings', 'selectedServer' ],\n [ 'getTagVisits', 'cancelGetTagVisits', 'createNewVisits', 'loadMercureInfo' ],\n ));\n\n bottle.serviceFactory('OrphanVisits', OrphanVisits, 'VisitsExporter');\n bottle.decorator('OrphanVisits', connect(\n [ 'orphanVisits', 'mercureInfo', 'settings', 'selectedServer' ],\n [ 'getOrphanVisits', 'cancelGetOrphanVisits', 'createNewVisits', 'loadMercureInfo' ],\n ));\n\n bottle.serviceFactory('NonOrphanVisits', NonOrphanVisits, 'VisitsExporter');\n bottle.decorator('NonOrphanVisits', connect(\n [ 'nonOrphanVisits', 'mercureInfo', 'settings', 'selectedServer' ],\n [ 'getNonOrphanVisits', 'cancelGetNonOrphanVisits', 'createNewVisits', 'loadMercureInfo' ],\n ));\n\n // Services\n bottle.serviceFactory('VisitsParser', () => visitsParser);\n bottle.service('VisitsExporter', VisitsExporter, 'window', 'csvjson');\n\n // Actions\n bottle.serviceFactory('getShortUrlVisits', getShortUrlVisits, 'buildShlinkApiClient');\n bottle.serviceFactory('cancelGetShortUrlVisits', () => cancelGetShortUrlVisits);\n\n bottle.serviceFactory('getTagVisits', getTagVisits, 'buildShlinkApiClient');\n bottle.serviceFactory('cancelGetTagVisits', () => cancelGetTagVisits);\n\n bottle.serviceFactory('getOrphanVisits', getOrphanVisits, 'buildShlinkApiClient');\n bottle.serviceFactory('cancelGetOrphanVisits', () => cancelGetOrphanVisits);\n\n bottle.serviceFactory('getNonOrphanVisits', getNonOrphanVisits, 'buildShlinkApiClient');\n bottle.serviceFactory('cancelGetNonOrphanVisits', () => cancelGetNonOrphanVisits);\n\n bottle.serviceFactory('createNewVisits', () => createNewVisits);\n bottle.serviceFactory('loadVisitsOverview', loadVisitsOverview, 'buildShlinkApiClient');\n};\n\nexport default provideServices;\n","import ColorGenerator from '../../utils/services/ColorGenerator';\nimport './TagBullet.scss';\n\ninterface TagBulletProps {\n tag: string;\n colorGenerator: ColorGenerator;\n}\n\nconst TagBullet = ({ tag, colorGenerator }: TagBulletProps) => (\n \n);\n\nexport default TagBullet;\n","import { useEffect } from 'react';\nimport ReactTags, { SuggestionComponentProps, TagComponentProps } from 'react-tag-autocomplete';\nimport ColorGenerator from '../../utils/services/ColorGenerator';\nimport { Settings } from '../../settings/reducers/settings';\nimport { TagsList } from '../reducers/tagsList';\nimport TagBullet from './TagBullet';\nimport Tag from './Tag';\n\nexport interface TagsSelectorProps {\n selectedTags: string[];\n onChange: (tags: string[]) => void;\n placeholder?: string;\n}\n\ninterface TagsSelectorConnectProps extends TagsSelectorProps {\n listTags: Function;\n tagsList: TagsList;\n settings: Settings;\n}\n\nconst toComponentTag = (tag: string) => ({ id: tag, name: tag });\n\nconst TagsSelector = (colorGenerator: ColorGenerator) => (\n { selectedTags, onChange, placeholder, listTags, tagsList, settings }: TagsSelectorConnectProps,\n) => {\n useEffect(() => {\n listTags();\n }, []);\n\n const searchMode = settings.shortUrlCreation?.tagFilteringMode ?? 'startsWith';\n const ReactTagsTag = ({ tag, onDelete }: TagComponentProps) =>\n ;\n const ReactTagsSuggestion = ({ item }: SuggestionComponentProps) => (\n <>\n \n {item.name}\n \n );\n\n return (\n !selectedTags.includes(tag)).map(toComponentTag)}\n suggestionComponent={ReactTagsSuggestion}\n allowNew\n addOnBlur\n placeholderText={placeholder ?? 'Add tags to the URL'}\n minQueryLength={1}\n delimiters={[ 'Enter', 'Tab', ',' ]}\n suggestionsTransform={\n searchMode === 'includes'\n ? (query, suggestions) => suggestions.filter(({ name }) => name.includes(query))\n : undefined\n }\n onDelete={(removedTagIndex) => {\n const tagsCopy = [ ...selectedTags ];\n\n tagsCopy.splice(removedTagIndex, 1);\n onChange(tagsCopy);\n }}\n onAddition={({ name: newTag }) => onChange(\n // * Avoid duplicated tags (thanks to the Set),\n // * Split any of the new tags by comma, allowing to paste multiple comma-separated tags at once.\n [ ...new Set([ ...selectedTags, ...newTag.toLowerCase().split(',') ]) ],\n )}\n />\n );\n};\n\nexport default TagsSelector;\n","import { Card, CardHeader, CardBody, Button, Collapse } from 'reactstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faTrash as deleteIcon, faPencilAlt as editIcon, faLink, faEye } from '@fortawesome/free-solid-svg-icons';\nimport { FC, useEffect, useRef } from 'react';\nimport { Link } from 'react-router-dom';\nimport { prettify } from '../utils/helpers/numbers';\nimport { useToggle } from '../utils/helpers/hooks';\nimport ColorGenerator from '../utils/services/ColorGenerator';\nimport { getServerId, SelectedServer } from '../servers/data';\nimport TagBullet from './helpers/TagBullet';\nimport { NormalizedTag, TagModalProps } from './data';\nimport './TagCard.scss';\n\nexport interface TagCardProps {\n tag: NormalizedTag;\n selectedServer: SelectedServer;\n displayed: boolean;\n toggle: () => void;\n}\n\nconst isTruncated = (el: HTMLElement | undefined): boolean => !!el && el.scrollWidth > el.clientWidth;\n\nconst TagCard = (\n DeleteTagConfirmModal: FC,\n EditTagModal: FC,\n colorGenerator: ColorGenerator,\n) => ({ tag, selectedServer, displayed, toggle }: TagCardProps) => {\n const [ isDeleteModalOpen, toggleDelete ] = useToggle();\n const [ isEditModalOpen, toggleEdit ] = useToggle();\n const [ hasTitle,, displayTitle ] = useToggle();\n const titleRef = useRef();\n const serverId = getServerId(selectedServer);\n\n useEffect(() => {\n if (isTruncated(titleRef.current)) {\n displayTitle();\n }\n }, [ titleRef.current ]);\n\n return (\n \n \n \n \n {\n titleRef.current = el ?? undefined;\n }}\n >\n \n {tag.tag}\n \n \n\n \n \n \n Short URLs\n {prettify(tag.shortUrls)}\n \n \n Visits\n {prettify(tag.visits)}\n \n \n \n\n \n \n \n );\n};\n\nexport default TagCard;\n","import { Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';\nimport { TagDeletion } from '../reducers/tagDelete';\nimport { TagModalProps } from '../data';\nimport { Result } from '../../utils/Result';\nimport { ShlinkApiError } from '../../api/ShlinkApiError';\n\ninterface DeleteTagConfirmModalProps extends TagModalProps {\n deleteTag: (tag: string) => Promise;\n tagDeleted: (tag: string) => void;\n tagDelete: TagDeletion;\n}\n\nconst DeleteTagConfirmModal = (\n { tag, toggle, isOpen, deleteTag, tagDelete, tagDeleted }: DeleteTagConfirmModalProps,\n) => {\n const { deleting, error, errorData } = tagDelete;\n const doDelete = async () => {\n await deleteTag(tag);\n tagDeleted(tag);\n toggle();\n };\n\n return (\n \n \n Delete tag\n \n \n Are you sure you want to delete tag {tag}?\n {error && (\n \n \n \n )}\n \n \n \n \n \n \n );\n};\n\nexport default DeleteTagConfirmModal;\n","import { useState } from 'react';\nimport { Button, Input, Modal, ModalBody, ModalFooter, ModalHeader, Popover, InputGroup } from 'reactstrap';\nimport { HexColorPicker } from 'react-colorful';\nimport { faPalette as colorIcon } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { useToggle } from '../../utils/helpers/hooks';\nimport { handleEventPreventingDefault } from '../../utils/utils';\nimport ColorGenerator from '../../utils/services/ColorGenerator';\nimport { TagModalProps } from '../data';\nimport { TagEdition } from '../reducers/tagEdit';\nimport { Result } from '../../utils/Result';\nimport { ShlinkApiError } from '../../api/ShlinkApiError';\nimport './EditTagModal.scss';\n\ninterface EditTagModalProps extends TagModalProps {\n tagEdit: TagEdition;\n editTag: (oldName: string, newName: string, color: string) => Promise;\n tagEdited: (oldName: string, newName: string, color: string) => void;\n}\n\nconst EditTagModal = ({ getColorForKey }: ColorGenerator) => (\n { tag, editTag, toggle, tagEdited, isOpen, tagEdit }: EditTagModalProps,\n) => {\n const [ newTagName, setNewTagName ] = useState(tag);\n const [ color, setColor ] = useState(getColorForKey(tag));\n const [ showColorPicker, toggleColorPicker, , hideColorPicker ] = useToggle();\n const { editing, error, errorData } = tagEdit;\n const saveTag = handleEventPreventingDefault(\n async () => editTag(tag, newTagName, color)\n .then(() => tagEdited(tag, newTagName, color))\n .then(toggle)\n .catch(() => {}),\n );\n\n return (\n \n
\n Edit tag\n \n \n \n \n \n \n \n \n setNewTagName(target.value)}\n />\n \n\n {error && (\n \n \n \n )}\n \n \n \n \n \n
\n
\n );\n};\n\nexport default EditTagModal;\n","import { SelectedServer } from '../../servers/data';\nimport { Order } from '../../utils/helpers/ordering';\nimport { NormalizedTag } from './index';\n\nexport const TAGS_ORDERABLE_FIELDS = {\n tag: 'Tag',\n shortUrls: 'Short URLs',\n visits: 'Visits',\n};\n\nexport type TagsOrderableFields = keyof typeof TAGS_ORDERABLE_FIELDS;\n\nexport type TagsOrder = Order;\n\nexport interface TagsListChildrenProps {\n sortedTags: NormalizedTag[];\n selectedServer: SelectedServer;\n}\n","import { FC } from 'react';\nimport { DropdownItem } from 'reactstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faBars as listIcon, faThLarge as cardsIcon } from '@fortawesome/free-solid-svg-icons';\nimport { DropdownBtn } from '../utils/DropdownBtn';\nimport { TagsMode } from '../settings/reducers/settings';\n\ninterface TagsModeDropdownProps {\n mode: TagsMode;\n onChange: (newMode: TagsMode) => void;\n renderTitle?: (mode: TagsMode) => string;\n}\n\nexport const TagsModeDropdown: FC = ({ mode, onChange, renderTitle }) => (\n \n onChange('cards')}>\n Cards\n \n onChange('list')}>\n List\n \n \n);\n","import { FC, useEffect, useState } from 'react';\nimport { Row } from 'reactstrap';\nimport { pipe } from 'ramda';\nimport Message from '../utils/Message';\nimport SearchField from '../utils/SearchField';\nimport { SelectedServer } from '../servers/data';\nimport { boundToMercureHub } from '../mercure/helpers/boundToMercureHub';\nimport { Result } from '../utils/Result';\nimport { ShlinkApiError } from '../api/ShlinkApiError';\nimport { Topics } from '../mercure/helpers/Topics';\nimport { Settings, TagsMode } from '../settings/reducers/settings';\nimport { determineOrderDir, sortList } from '../utils/helpers/ordering';\nimport { OrderingDropdown } from '../utils/OrderingDropdown';\nimport { TagsList as TagsListState } from './reducers/tagsList';\nimport {\n TagsOrderableFields,\n TAGS_ORDERABLE_FIELDS,\n TagsListChildrenProps,\n TagsOrder,\n} from './data/TagsListChildrenProps';\nimport { TagsModeDropdown } from './TagsModeDropdown';\nimport { NormalizedTag } from './data';\nimport { TagsTableProps } from './TagsTable';\n\nexport interface TagsListProps {\n filterTags: (searchTerm: string) => void;\n forceListTags: Function;\n tagsList: TagsListState;\n selectedServer: SelectedServer;\n settings: Settings;\n}\n\nconst TagsList = (TagsCards: FC, TagsTable: FC) => boundToMercureHub((\n { filterTags, forceListTags, tagsList, selectedServer, settings }: TagsListProps,\n) => {\n const [ mode, setMode ] = useState(settings.tags?.defaultMode ?? 'cards');\n const [ order, setOrder ] = useState(settings.tags?.defaultOrdering ?? {});\n const resolveSortedTags = pipe(\n () => tagsList.filteredTags.map((tag): NormalizedTag => ({\n tag,\n shortUrls: tagsList.stats[tag]?.shortUrlsCount ?? 0,\n visits: tagsList.stats[tag]?.visitsCount ?? 0,\n })),\n (normalizedTags) => sortList(normalizedTags, order),\n );\n\n useEffect(() => {\n forceListTags();\n }, []);\n\n if (tagsList.loading) {\n return ;\n }\n\n if (tagsList.error) {\n return (\n \n \n \n );\n }\n\n const orderByColumn = (field: TagsOrderableFields) => () => {\n const dir = determineOrderDir(field, order.field, order.dir);\n\n setOrder({ field: dir ? field : undefined, dir });\n };\n\n const renderContent = () => {\n if (tagsList.filteredTags.length < 1) {\n return No tags found;\n }\n\n const sortedTags = resolveSortedTags();\n\n return mode === 'cards'\n ? \n : (\n \n );\n };\n\n return (\n <>\n \n \n
\n \n
\n
\n setOrder({ field, dir })}\n />\n
\n
\n {renderContent()}\n \n );\n}, () => [ Topics.visits ]);\n\nexport default TagsList;\n","import { Action, Dispatch } from 'redux';\nimport { buildReducer } from '../../utils/helpers/redux';\nimport { GetState } from '../../container/types';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\nimport { ProblemDetailsError } from '../../api/types';\nimport { parseApiError } from '../../api/utils';\nimport { ApiErrorAction } from '../../api/types/actions';\n\n/* eslint-disable padding-line-between-statements */\nexport const DELETE_TAG_START = 'shlink/deleteTag/DELETE_TAG_START';\nexport const DELETE_TAG_ERROR = 'shlink/deleteTag/DELETE_TAG_ERROR';\nexport const DELETE_TAG = 'shlink/deleteTag/DELETE_TAG';\nexport const TAG_DELETED = 'shlink/deleteTag/TAG_DELETED';\n/* eslint-enable padding-line-between-statements */\n\nexport interface TagDeletion {\n deleting: boolean;\n error: boolean;\n errorData?: ProblemDetailsError;\n}\n\nexport interface DeleteTagAction extends Action {\n tag: string;\n}\n\nconst initialState: TagDeletion = {\n deleting: false,\n error: false,\n};\n\nexport default buildReducer({\n [DELETE_TAG_START]: () => ({ deleting: true, error: false }),\n [DELETE_TAG_ERROR]: (_, { errorData }) => ({ deleting: false, error: true, errorData }),\n [DELETE_TAG]: () => ({ deleting: false, error: false }),\n}, initialState);\n\nexport const deleteTag = (buildShlinkApiClient: ShlinkApiClientBuilder) => (tag: string) => async (\n dispatch: Dispatch,\n getState: GetState,\n) => {\n dispatch({ type: DELETE_TAG_START });\n const { deleteTags } = buildShlinkApiClient(getState);\n\n try {\n await deleteTags([ tag ]);\n dispatch({ type: DELETE_TAG });\n } catch (e: any) {\n dispatch({ type: DELETE_TAG_ERROR, errorData: parseApiError(e) });\n\n throw e;\n }\n};\n\nexport const tagDeleted = (tag: string): DeleteTagAction => ({ type: TAG_DELETED, tag });\n","import { pick } from 'ramda';\nimport { Action, Dispatch } from 'redux';\nimport { buildReducer } from '../../utils/helpers/redux';\nimport { GetState } from '../../container/types';\nimport ColorGenerator from '../../utils/services/ColorGenerator';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\nimport { ProblemDetailsError } from '../../api/types';\nimport { parseApiError } from '../../api/utils';\nimport { ApiErrorAction } from '../../api/types/actions';\n\n/* eslint-disable padding-line-between-statements */\nexport const EDIT_TAG_START = 'shlink/editTag/EDIT_TAG_START';\nexport const EDIT_TAG_ERROR = 'shlink/editTag/EDIT_TAG_ERROR';\nexport const EDIT_TAG = 'shlink/editTag/EDIT_TAG';\n/* eslint-enable padding-line-between-statements */\n\nexport const TAG_EDITED = 'shlink/editTag/TAG_EDITED';\n\nexport interface TagEdition {\n oldName: string;\n newName: string;\n editing: boolean;\n error: boolean;\n errorData?: ProblemDetailsError;\n}\n\nexport interface EditTagAction extends Action {\n oldName: string;\n newName: string;\n color: string;\n}\n\nconst initialState: TagEdition = {\n oldName: '',\n newName: '',\n editing: false,\n error: false,\n};\n\nexport default buildReducer({\n [EDIT_TAG_START]: (state) => ({ ...state, editing: true, error: false }),\n [EDIT_TAG_ERROR]: (state, { errorData }) => ({ ...state, editing: false, error: true, errorData }),\n [EDIT_TAG]: (_, action) => ({\n ...pick([ 'oldName', 'newName' ], action),\n editing: false,\n error: false,\n }),\n}, initialState);\n\nexport const editTag = (buildShlinkApiClient: ShlinkApiClientBuilder, colorGenerator: ColorGenerator) => (\n oldName: string,\n newName: string,\n color: string,\n) => async (dispatch: Dispatch, getState: GetState) => {\n dispatch({ type: EDIT_TAG_START });\n const { editTag } = buildShlinkApiClient(getState);\n\n try {\n await editTag(oldName, newName);\n colorGenerator.setColorForKey(newName, color);\n dispatch({ type: EDIT_TAG, oldName, newName });\n } catch (e: any) {\n dispatch({ type: EDIT_TAG_ERROR, errorData: parseApiError(e) });\n\n throw e;\n }\n};\n\nexport const tagEdited = (oldName: string, newName: string, color: string): EditTagAction => ({\n type: TAG_EDITED,\n oldName,\n newName,\n color,\n});\n","import { isEmpty, reject } from 'ramda';\nimport { Action, Dispatch } from 'redux';\nimport { CREATE_VISITS, CreateVisitsAction } from '../../visits/reducers/visitCreation';\nimport { buildReducer } from '../../utils/helpers/redux';\nimport { ProblemDetailsError, ShlinkTags } from '../../api/types';\nimport { GetState } from '../../container/types';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\nimport { CreateVisit, Stats } from '../../visits/types';\nimport { parseApiError } from '../../api/utils';\nimport { TagStats } from '../data';\nimport { ApiErrorAction } from '../../api/types/actions';\nimport { CREATE_SHORT_URL, CreateShortUrlAction } from '../../short-urls/reducers/shortUrlCreation';\nimport { DeleteTagAction, TAG_DELETED } from './tagDelete';\nimport { EditTagAction, TAG_EDITED } from './tagEdit';\n\n/* eslint-disable padding-line-between-statements */\nexport const LIST_TAGS_START = 'shlink/tagsList/LIST_TAGS_START';\nexport const LIST_TAGS_ERROR = 'shlink/tagsList/LIST_TAGS_ERROR';\nexport const LIST_TAGS = 'shlink/tagsList/LIST_TAGS';\nexport const FILTER_TAGS = 'shlink/tagsList/FILTER_TAGS';\n/* eslint-enable padding-line-between-statements */\n\ntype TagsStatsMap = Record;\n\nexport interface TagsList {\n tags: string[];\n filteredTags: string[];\n stats: TagsStatsMap;\n loading: boolean;\n error: boolean;\n errorData?: ProblemDetailsError;\n}\n\ninterface ListTagsAction extends Action {\n tags: string[];\n stats: TagsStatsMap;\n}\n\ninterface FilterTagsAction extends Action {\n searchTerm: string;\n}\n\ntype TagsCombinedAction = ListTagsAction\n& DeleteTagAction\n& CreateVisitsAction\n& CreateShortUrlAction\n& EditTagAction\n& FilterTagsAction\n& ApiErrorAction;\n\nconst initialState = {\n tags: [],\n filteredTags: [],\n stats: {},\n loading: false,\n error: false,\n};\n\ntype TagIncrease = [string, number];\n\nconst renameTag = (oldName: string, newName: string) => (tag: string) => tag === oldName ? newName : tag;\nconst rejectTag = (tags: string[], tagToReject: string) => reject((tag) => tag === tagToReject, tags);\nconst increaseVisitsForTags = (tags: TagIncrease[], stats: TagsStatsMap) => tags.reduce((stats, [ tag, increase ]) => {\n if (!stats[tag]) {\n return stats;\n }\n\n const tagStats = stats[tag];\n\n tagStats.visitsCount = tagStats.visitsCount + increase;\n stats[tag] = tagStats;\n\n return stats;\n}, { ...stats });\nconst calculateVisitsPerTag = (createdVisits: CreateVisit[]): TagIncrease[] => Object.entries(\n createdVisits.reduce((acc, { shortUrl }) => {\n shortUrl?.tags.forEach((tag) => {\n acc[tag] = (acc[tag] || 0) + 1;\n });\n\n return acc;\n }, {}),\n);\n\nexport default buildReducer({\n [LIST_TAGS_START]: () => ({ ...initialState, loading: true }),\n [LIST_TAGS_ERROR]: (_, { errorData }) => ({ ...initialState, error: true, errorData }),\n [LIST_TAGS]: (_, { tags, stats }) => ({ ...initialState, stats, tags, filteredTags: tags }),\n [TAG_DELETED]: (state, { tag }) => ({\n ...state,\n tags: rejectTag(state.tags, tag),\n filteredTags: rejectTag(state.filteredTags, tag),\n }),\n [TAG_EDITED]: (state, { oldName, newName }) => ({\n ...state,\n tags: state.tags.map(renameTag(oldName, newName)).sort(),\n filteredTags: state.filteredTags.map(renameTag(oldName, newName)).sort(),\n }),\n [FILTER_TAGS]: (state, { searchTerm }) => ({\n ...state,\n filteredTags: state.tags.filter((tag) => tag.toLowerCase().match(searchTerm)),\n }),\n [CREATE_VISITS]: (state, { createdVisits }) => ({\n ...state,\n stats: increaseVisitsForTags(calculateVisitsPerTag(createdVisits), state.stats),\n }),\n [CREATE_SHORT_URL]: ({ tags: stateTags, ...rest }, { result }) => ({\n ...rest,\n tags: stateTags.concat(result.tags.filter((tag) => !stateTags.includes(tag))), // More performant than [ ...new Set(...) ]\n }),\n}, initialState);\n\nexport const listTags = (buildShlinkApiClient: ShlinkApiClientBuilder, force = true) => () => async (\n dispatch: Dispatch,\n getState: GetState,\n) => {\n const { tagsList } = getState();\n\n if (!force && (tagsList.loading || !isEmpty(tagsList.tags))) {\n return;\n }\n\n dispatch({ type: LIST_TAGS_START });\n\n try {\n const { listTags } = buildShlinkApiClient(getState);\n const { tags, stats = [] }: ShlinkTags = await listTags();\n const processedStats = stats.reduce((acc, { tag, shortUrlsCount, visitsCount }) => {\n acc[tag] = { shortUrlsCount, visitsCount };\n\n return acc;\n }, {});\n\n dispatch({ tags, stats: processedStats, type: LIST_TAGS });\n } catch (e: any) {\n dispatch({ type: LIST_TAGS_ERROR, errorData: parseApiError(e) });\n }\n};\n\nexport const filterTags = (searchTerm: string): FilterTagsAction => ({ type: FILTER_TAGS, searchTerm });\n","import { FC, useState } from 'react';\nimport { splitEvery } from 'ramda';\nimport { Row } from 'reactstrap';\nimport { TagCardProps } from './TagCard';\nimport { TagsListChildrenProps } from './data/TagsListChildrenProps';\n\nconst { ceil } = Math;\nconst TAGS_GROUPS_AMOUNT = 4;\n\nexport const TagsCards = (TagCard: FC): FC => ({ sortedTags, selectedServer }) => {\n const [ displayedTag, setDisplayedTag ] = useState();\n const tagsCount = sortedTags.length;\n const tagsGroups = splitEvery(ceil(tagsCount / TAGS_GROUPS_AMOUNT), sortedTags);\n\n return (\n \n {tagsGroups.map((group, index) => (\n
\n {group.map((tag) => (\n setDisplayedTag(displayedTag !== tag.tag ? tag.tag : undefined)}\n />\n ))}\n
\n ))}\n
\n );\n};\n","import { FC, useEffect, useRef } from 'react';\nimport { splitEvery } from 'ramda';\nimport { useLocation } from 'react-router-dom';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport SimplePaginator from '../common/SimplePaginator';\nimport { useQueryState } from '../utils/helpers/hooks';\nimport { parseQuery } from '../utils/helpers/query';\nimport { TableOrderIcon } from '../utils/table/TableOrderIcon';\nimport { TagsOrderableFields, TagsListChildrenProps, TagsOrder } from './data/TagsListChildrenProps';\nimport { TagsTableRowProps } from './TagsTableRow';\nimport './TagsTable.scss';\n\nexport interface TagsTableProps extends TagsListChildrenProps {\n orderByColumn: (field: TagsOrderableFields) => () => void;\n currentOrder: TagsOrder;\n}\n\nconst TAGS_PER_PAGE = 20; // TODO Allow customizing this value in settings\n\nexport const TagsTable = (TagsTableRow: FC) => (\n { sortedTags, selectedServer, orderByColumn, currentOrder }: TagsTableProps,\n) => {\n const isFirstLoad = useRef(true);\n const { search } = useLocation();\n const { page: pageFromQuery = 1 } = parseQuery<{ page?: number | string }>(search);\n const [ page, setPage ] = useQueryState('page', Number(pageFromQuery));\n const pages = splitEvery(TAGS_PER_PAGE, sortedTags);\n const showPaginator = pages.length > 1;\n const currentPage = pages[page - 1] ?? [];\n\n useEffect(() => {\n !isFirstLoad.current && setPage(1);\n isFirstLoad.current = false;\n }, [ sortedTags ]);\n useEffect(() => {\n scrollTo(0, 0);\n }, [ page ]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {currentPage.length === 0 && }\n {currentPage.map((tag) => )}\n \n
\n Tag \n \n Short URLs \n \n Visits \n \n
No results found
\n\n {showPaginator && (\n
\n \n
\n )}\n
\n );\n};\n","import { FC } from 'react';\nimport { Link } from 'react-router-dom';\nimport { DropdownItem } from 'reactstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faTrash as deleteIcon, faPencilAlt as editIcon } from '@fortawesome/free-solid-svg-icons';\nimport { getServerId, SelectedServer } from '../servers/data';\nimport ColorGenerator from '../utils/services/ColorGenerator';\nimport { prettify } from '../utils/helpers/numbers';\nimport { useToggle } from '../utils/helpers/hooks';\nimport { DropdownBtnMenu } from '../utils/DropdownBtnMenu';\nimport TagBullet from './helpers/TagBullet';\nimport { NormalizedTag, TagModalProps } from './data';\n\nexport interface TagsTableRowProps {\n tag: NormalizedTag;\n selectedServer: SelectedServer;\n}\n\nexport const TagsTableRow = (\n DeleteTagConfirmModal: FC,\n EditTagModal: FC,\n colorGenerator: ColorGenerator,\n) => ({ tag, selectedServer }: TagsTableRowProps) => {\n const [ isDeleteModalOpen, toggleDelete ] = useToggle();\n const [ isEditModalOpen, toggleEdit ] = useToggle();\n const [ isDropdownOpen, toggleDropdown ] = useToggle();\n const serverId = getServerId(selectedServer);\n\n return (\n \n \n {tag.tag}\n \n \n \n {prettify(tag.shortUrls)}\n \n \n \n \n {prettify(tag.visits)}\n \n \n \n \n \n Edit\n \n \n Delete\n \n \n \n\n \n \n \n );\n};\n","import Bottle, { IContainer } from 'bottlejs';\nimport TagsSelector from '../helpers/TagsSelector';\nimport TagCard from '../TagCard';\nimport DeleteTagConfirmModal from '../helpers/DeleteTagConfirmModal';\nimport EditTagModal from '../helpers/EditTagModal';\nimport TagsList from '../TagsList';\nimport { filterTags, listTags } from '../reducers/tagsList';\nimport { deleteTag, tagDeleted } from '../reducers/tagDelete';\nimport { editTag, tagEdited } from '../reducers/tagEdit';\nimport { ConnectDecorator } from '../../container/types';\nimport { TagsCards } from '../TagsCards';\nimport { TagsTable } from '../TagsTable';\nimport { TagsTableRow } from '../TagsTableRow';\n\nconst provideServices = (bottle: Bottle, connect: ConnectDecorator) => {\n // Components\n bottle.serviceFactory('TagsSelector', TagsSelector, 'ColorGenerator');\n bottle.decorator('TagsSelector', connect([ 'tagsList', 'settings' ], [ 'listTags' ]));\n\n bottle.serviceFactory('TagCard', TagCard, 'DeleteTagConfirmModal', 'EditTagModal', 'ColorGenerator');\n\n bottle.serviceFactory('DeleteTagConfirmModal', () => DeleteTagConfirmModal);\n bottle.decorator('DeleteTagConfirmModal', connect([ 'tagDelete' ], [ 'deleteTag', 'tagDeleted' ]));\n\n bottle.serviceFactory('EditTagModal', EditTagModal, 'ColorGenerator');\n bottle.decorator('EditTagModal', connect([ 'tagEdit' ], [ 'editTag', 'tagEdited' ]));\n\n bottle.serviceFactory('TagsCards', TagsCards, 'TagCard');\n bottle.serviceFactory('TagsTableRow', TagsTableRow, 'DeleteTagConfirmModal', 'EditTagModal', 'ColorGenerator');\n\n bottle.serviceFactory('TagsTable', TagsTable, 'TagsTableRow');\n\n bottle.serviceFactory('TagsList', TagsList, 'TagsCards', 'TagsTable');\n bottle.decorator('TagsList', connect(\n [ 'tagsList', 'selectedServer', 'mercureInfo', 'settings' ],\n [ 'forceListTags', 'filterTags', 'createNewVisits', 'loadMercureInfo' ],\n ));\n\n // Actions\n const listTagsActionFactory = (force: boolean) =>\n ({ buildShlinkApiClient }: IContainer) => listTags(buildShlinkApiClient, force);\n\n bottle.factory('listTags', listTagsActionFactory(false));\n bottle.factory('forceListTags', listTagsActionFactory(true));\n bottle.serviceFactory('filterTags', () => filterTags);\n bottle.serviceFactory('tagDeleted', () => tagDeleted);\n bottle.serviceFactory('tagEdited', () => tagEdited);\n\n bottle.serviceFactory('deleteTag', deleteTag, 'buildShlinkApiClient');\n bottle.serviceFactory('editTag', editTag, 'buildShlinkApiClient', 'ColorGenerator');\n};\n\nexport default provideServices;\n","import { Action, Dispatch } from 'redux';\nimport { ShlinkMercureInfo } from '../../api/types';\nimport { GetState } from '../../container/types';\nimport { buildReducer } from '../../utils/helpers/redux';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\n\n/* eslint-disable padding-line-between-statements */\nexport const GET_MERCURE_INFO_START = 'shlink/mercure/GET_MERCURE_INFO_START';\nexport const GET_MERCURE_INFO_ERROR = 'shlink/mercure/GET_MERCURE_INFO_ERROR';\nexport const GET_MERCURE_INFO = 'shlink/mercure/GET_MERCURE_INFO';\n/* eslint-enable padding-line-between-statements */\n\nexport interface MercureInfo {\n token?: string;\n mercureHubUrl?: string;\n interval?: number;\n loading: boolean;\n error: boolean;\n}\n\nexport type GetMercureInfoAction = Action & ShlinkMercureInfo & { interval?: number };\n\nconst initialState: MercureInfo = {\n loading: true,\n error: false,\n};\n\nexport default buildReducer({\n [GET_MERCURE_INFO_START]: (state) => ({ ...state, loading: true, error: false }),\n [GET_MERCURE_INFO_ERROR]: (state) => ({ ...state, loading: false, error: true }),\n [GET_MERCURE_INFO]: (_, action) => ({ ...action, loading: false, error: false }),\n}, initialState);\n\nexport const loadMercureInfo = (buildShlinkApiClient: ShlinkApiClientBuilder) =>\n () => async (dispatch: Dispatch, getState: GetState) => {\n dispatch({ type: GET_MERCURE_INFO_START });\n\n const { settings } = getState();\n const { mercureInfo } = buildShlinkApiClient(getState);\n\n if (!settings.realTimeUpdates.enabled) {\n dispatch({ type: GET_MERCURE_INFO_ERROR });\n\n return;\n }\n\n try {\n const info = await mercureInfo();\n\n dispatch({ type: GET_MERCURE_INFO, interval: settings.realTimeUpdates.interval, ...info });\n } catch (e) {\n dispatch({ type: GET_MERCURE_INFO_ERROR });\n }\n };\n","import Bottle from 'bottlejs';\nimport { loadMercureInfo } from '../reducers/mercureInfo';\n\nconst provideServices = (bottle: Bottle) => {\n // Actions\n bottle.serviceFactory('loadMercureInfo', loadMercureInfo, 'buildShlinkApiClient');\n};\n\nexport default provideServices;\n","import { FC } from 'react';\n\nexport const FormText: FC = ({ children }) => {children};\n","import { FormGroup, Input } from 'reactstrap';\nimport classNames from 'classnames';\nimport ToggleSwitch from '../utils/ToggleSwitch';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport { FormText } from '../utils/forms/FormText';\nimport { LabeledFormGroup } from '../utils/forms/LabeledFormGroup';\nimport { Settings } from './reducers/settings';\n\ninterface RealTimeUpdatesProps {\n settings: Settings;\n toggleRealTimeUpdates: (enabled: boolean) => void;\n setRealTimeUpdatesInterval: (interval: number) => void;\n}\n\nconst intervalValue = (interval?: number) => !interval ? '' : `${interval}`;\n\nconst RealTimeUpdatesSettings = (\n { settings: { realTimeUpdates }, toggleRealTimeUpdates, setRealTimeUpdatesInterval }: RealTimeUpdatesProps,\n) => (\n \n \n \n Enable or disable real-time updates.\n \n Real-time updates are currently being {realTimeUpdates.enabled ? 'processed' : 'ignored'}.\n \n \n \n \n setRealTimeUpdatesInterval(Number(target.value))}\n />\n {realTimeUpdates.enabled && (\n \n {realTimeUpdates.interval !== undefined && realTimeUpdates.interval > 0 && (\n \n Updates will be reflected in the UI every {realTimeUpdates.interval} minute{realTimeUpdates.interval > 1 && 's'}.\n \n )}\n {!realTimeUpdates.interval && 'Updates will be reflected in the UI as soon as they happen.'}\n \n )}\n \n \n);\n\nexport default RealTimeUpdatesSettings;\n","import { FC, ReactNode } from 'react';\nimport { Navigate, Routes, Route } from 'react-router-dom';\nimport { NoMenuLayout } from '../common/NoMenuLayout';\nimport { NavPillItem, NavPills } from '../utils/NavPills';\n\nconst SettingsSections: FC<{ items: ReactNode[] }> = ({ items }) => (\n <>\n {items.map((child, index) =>
{child}
)}\n \n);\n\nconst Settings = (\n RealTimeUpdates: FC,\n ShortUrlCreation: FC,\n ShortUrlsList: FC,\n UserInterface: FC,\n Visits: FC,\n Tags: FC,\n) => () => (\n \n \n General\n Short URLs\n Other items\n \n\n \n , ]} />} />\n , ]} />} />\n , ]} />} />\n } />\n \n \n);\n\nexport default Settings;\n","import { FC, ReactNode } from 'react';\nimport { DropdownItem, FormGroup } from 'reactstrap';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport ToggleSwitch from '../utils/ToggleSwitch';\nimport { DropdownBtn } from '../utils/DropdownBtn';\nimport { FormText } from '../utils/forms/FormText';\nimport { LabeledFormGroup } from '../utils/forms/LabeledFormGroup';\nimport { Settings, ShortUrlCreationSettings as ShortUrlsSettings, TagFilteringMode } from './reducers/settings';\n\ninterface ShortUrlCreationProps {\n settings: Settings;\n setShortUrlCreationSettings: (settings: ShortUrlsSettings) => void;\n}\n\nconst tagFilteringModeText = (tagFilteringMode: TagFilteringMode | undefined): string =>\n tagFilteringMode === 'includes' ? 'Suggest tags including input' : 'Suggest tags starting with input';\nconst tagFilteringModeHint = (tagFilteringMode: TagFilteringMode | undefined): ReactNode =>\n tagFilteringMode === 'includes'\n ? <>The list of suggested tags will contain those including provided input.\n : <>The list of suggested tags will contain those starting with provided input.;\n\nexport const ShortUrlCreationSettings: FC = ({ settings, setShortUrlCreationSettings }) => {\n const shortUrlCreation: ShortUrlsSettings = settings.shortUrlCreation ?? { validateUrls: false };\n const changeTagsFilteringMode = (tagFilteringMode: TagFilteringMode) => () => setShortUrlCreationSettings(\n { ...shortUrlCreation ?? { validateUrls: false }, tagFilteringMode },\n );\n\n return (\n \n \n setShortUrlCreationSettings({ ...shortUrlCreation, validateUrls })}\n >\n Request validation on long URLs when creating new short URLs.\n \n The initial state of the Validate URL checkbox will\n be {shortUrlCreation.validateUrls ? 'checked' : 'unchecked'}.\n \n \n \n \n setShortUrlCreationSettings({ ...shortUrlCreation, forwardQuery })}\n >\n Make all new short URLs forward their query params to the long URL.\n \n The initial state of the Forward query params on redirect checkbox will\n be {shortUrlCreation.forwardQuery ?? true ? 'checked' : 'unchecked'}.\n \n \n \n \n \n \n {tagFilteringModeText('startsWith')}\n
\n \n {tagFilteringModeText('includes')}\n \n \n {tagFilteringModeHint(shortUrlCreation.tagFilteringMode)}\n \n \n );\n};\n","import { FC } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSun, faMoon } from '@fortawesome/free-solid-svg-icons';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport ToggleSwitch from '../utils/ToggleSwitch';\nimport { changeThemeInMarkup, Theme } from '../utils/theme';\nimport { Settings, UiSettings } from './reducers/settings';\nimport './UserInterfaceSettings.scss';\n\ninterface UserInterfaceProps {\n settings: Settings;\n setUiSettings: (settings: UiSettings) => void;\n}\n\nexport const UserInterfaceSettings: FC = ({ settings: { ui }, setUiSettings }) => (\n \n \n {\n const theme: Theme = useDarkTheme ? 'dark' : 'light';\n\n setUiSettings({ ...ui, theme });\n changeThemeInMarkup(theme);\n }}\n >\n Use dark theme.\n \n \n);\n","import { FC } from 'react';\nimport { DropdownBtn } from '../DropdownBtn';\nimport { rangeOrIntervalToString } from './types';\nimport { DateIntervalDropdownItems, DateIntervalDropdownProps } from './DateIntervalDropdownItems';\n\nexport const DateIntervalSelector: FC = ({ onChange, active, allText }) => (\n \n \n \n);\n","import { FC } from 'react';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport { DateIntervalSelector } from '../utils/dates/DateIntervalSelector';\nimport { LabeledFormGroup } from '../utils/forms/LabeledFormGroup';\nimport { Settings, VisitsSettings as VisitsSettingsConfig } from './reducers/settings';\n\ninterface VisitsProps {\n settings: Settings;\n setVisitsSettings: (settings: VisitsSettingsConfig) => void;\n}\n\nexport const VisitsSettings: FC = ({ settings, setVisitsSettings }) => (\n \n \n setVisitsSettings({ defaultInterval })}\n />\n \n \n);\n","import { FC } from 'react';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport { TagsModeDropdown } from '../tags/TagsModeDropdown';\nimport { capitalize } from '../utils/utils';\nimport { OrderingDropdown } from '../utils/OrderingDropdown';\nimport { TAGS_ORDERABLE_FIELDS } from '../tags/data/TagsListChildrenProps';\nimport { FormText } from '../utils/forms/FormText';\nimport { LabeledFormGroup } from '../utils/forms/LabeledFormGroup';\nimport { Settings, TagsSettings as TagsSettingsOptions } from './reducers/settings';\n\ninterface TagsProps {\n settings: Settings;\n setTagsSettings: (settings: TagsSettingsOptions) => void;\n}\n\nexport const TagsSettings: FC = ({ settings: { tags }, setTagsSettings }) => (\n \n \n capitalize(tagsMode)}\n onChange={(defaultMode) => setTagsSettings({ ...tags, defaultMode })}\n />\n Tags will be displayed as {tags?.defaultMode ?? 'cards'}.\n \n \n setTagsSettings({ ...tags, defaultOrdering: { field, dir } })}\n />\n \n \n);\n","import { FC } from 'react';\nimport { OrderingDropdown } from '../utils/OrderingDropdown';\nimport { SHORT_URLS_ORDERABLE_FIELDS } from '../short-urls/data';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport { LabeledFormGroup } from '../utils/forms/LabeledFormGroup';\nimport { DEFAULT_SHORT_URLS_ORDERING, Settings, ShortUrlsListSettings as ShortUrlsSettings } from './reducers/settings';\n\ninterface ShortUrlsListProps {\n settings: Settings;\n setShortUrlsListSettings: (settings: ShortUrlsSettings) => void;\n}\n\nexport const ShortUrlsListSettings: FC = (\n { settings: { shortUrlsList }, setShortUrlsListSettings },\n) => (\n \n \n setShortUrlsListSettings({ defaultOrdering: { field, dir } })}\n />\n \n \n);\n","import Bottle from 'bottlejs';\nimport RealTimeUpdatesSettings from '../RealTimeUpdatesSettings';\nimport Settings from '../Settings';\nimport {\n setRealTimeUpdatesInterval,\n setShortUrlCreationSettings,\n setShortUrlsListSettings,\n setTagsSettings,\n setUiSettings,\n setVisitsSettings,\n toggleRealTimeUpdates,\n} from '../reducers/settings';\nimport { ConnectDecorator } from '../../container/types';\nimport { withoutSelectedServer } from '../../servers/helpers/withoutSelectedServer';\nimport { ShortUrlCreationSettings } from '../ShortUrlCreationSettings';\nimport { UserInterfaceSettings } from '../UserInterfaceSettings';\nimport { VisitsSettings } from '../VisitsSettings';\nimport { TagsSettings } from '../TagsSettings';\nimport { ShortUrlsListSettings } from '../ShortUrlsListSettings';\n\nconst provideServices = (bottle: Bottle, connect: ConnectDecorator) => {\n // Components\n bottle.serviceFactory(\n 'Settings',\n Settings,\n 'RealTimeUpdatesSettings',\n 'ShortUrlCreationSettings',\n 'ShortUrlsListSettings',\n 'UserInterfaceSettings',\n 'VisitsSettings',\n 'TagsSettings',\n );\n bottle.decorator('Settings', withoutSelectedServer);\n bottle.decorator('Settings', connect(null, [ 'resetSelectedServer' ]));\n\n bottle.serviceFactory('RealTimeUpdatesSettings', () => RealTimeUpdatesSettings);\n bottle.decorator(\n 'RealTimeUpdatesSettings',\n connect([ 'settings' ], [ 'toggleRealTimeUpdates', 'setRealTimeUpdatesInterval' ]),\n );\n\n bottle.serviceFactory('ShortUrlCreationSettings', () => ShortUrlCreationSettings);\n bottle.decorator('ShortUrlCreationSettings', connect([ 'settings' ], [ 'setShortUrlCreationSettings' ]));\n\n bottle.serviceFactory('UserInterfaceSettings', () => UserInterfaceSettings);\n bottle.decorator('UserInterfaceSettings', connect([ 'settings' ], [ 'setUiSettings' ]));\n\n bottle.serviceFactory('VisitsSettings', () => VisitsSettings);\n bottle.decorator('VisitsSettings', connect([ 'settings' ], [ 'setVisitsSettings' ]));\n\n bottle.serviceFactory('TagsSettings', () => TagsSettings);\n bottle.decorator('TagsSettings', connect([ 'settings' ], [ 'setTagsSettings' ]));\n\n bottle.serviceFactory('ShortUrlsListSettings', () => ShortUrlsListSettings);\n bottle.decorator('ShortUrlsListSettings', connect([ 'settings' ], [ 'setShortUrlsListSettings' ]));\n\n // Actions\n bottle.serviceFactory('toggleRealTimeUpdates', () => toggleRealTimeUpdates);\n bottle.serviceFactory('setRealTimeUpdatesInterval', () => setRealTimeUpdatesInterval);\n bottle.serviceFactory('setShortUrlCreationSettings', () => setShortUrlCreationSettings);\n bottle.serviceFactory('setShortUrlsListSettings', () => setShortUrlsListSettings);\n bottle.serviceFactory('setUiSettings', () => setUiSettings);\n bottle.serviceFactory('setVisitsSettings', () => setVisitsSettings);\n bottle.serviceFactory('setTagsSettings', () => setTagsSettings);\n};\n\nexport default provideServices;\n","export const replaceAuthorityFromUri = (uri: string, newAuthority: string): string => {\n const [ schema, rest ] = uri.split('://');\n const [ , ...pathParts ] = rest.split('/');\n const normalizedPath = pathParts.length ? `/${pathParts.join('/')}` : '';\n\n return `${schema}://${newAuthority}${normalizedPath}`;\n};\n","import { Action, Dispatch } from 'redux';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\nimport { ShlinkDomainRedirects } from '../../api/types';\nimport { GetState } from '../../container/types';\nimport { ApiErrorAction } from '../../api/types/actions';\nimport { parseApiError } from '../../api/utils';\n\n/* eslint-disable padding-line-between-statements */\nexport const EDIT_DOMAIN_REDIRECTS_START = 'shlink/domainRedirects/EDIT_DOMAIN_REDIRECTS_START';\nexport const EDIT_DOMAIN_REDIRECTS_ERROR = 'shlink/domainRedirects/EDIT_DOMAIN_REDIRECTS_ERROR';\nexport const EDIT_DOMAIN_REDIRECTS = 'shlink/domainRedirects/EDIT_DOMAIN_REDIRECTS';\n/* eslint-enable padding-line-between-statements */\n\nexport interface EditDomainRedirectsAction extends Action {\n domain: string;\n redirects: ShlinkDomainRedirects;\n}\n\nexport const editDomainRedirects = (buildShlinkApiClient: ShlinkApiClientBuilder) => (\n domain: string,\n domainRedirects: Partial,\n) => async (dispatch: Dispatch, getState: GetState) => {\n dispatch({ type: EDIT_DOMAIN_REDIRECTS_START });\n const { editDomainRedirects } = buildShlinkApiClient(getState);\n\n try {\n const redirects = await editDomainRedirects({ domain, ...domainRedirects });\n\n dispatch({ type: EDIT_DOMAIN_REDIRECTS, domain, redirects });\n } catch (e: any) {\n dispatch({ type: EDIT_DOMAIN_REDIRECTS_ERROR, errorData: parseApiError(e) });\n }\n};\n","import { Action, Dispatch } from 'redux';\nimport { ProblemDetailsError, ShlinkDomainRedirects } from '../../api/types';\nimport { buildReducer } from '../../utils/helpers/redux';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\nimport { GetState } from '../../container/types';\nimport { parseApiError } from '../../api/utils';\nimport { ApiErrorAction } from '../../api/types/actions';\nimport { Domain, DomainStatus } from '../data';\nimport { hasServerData } from '../../servers/data';\nimport { replaceAuthorityFromUri } from '../../utils/helpers/uri';\nimport { EDIT_DOMAIN_REDIRECTS, EditDomainRedirectsAction } from './domainRedirects';\n\n/* eslint-disable padding-line-between-statements */\nexport const LIST_DOMAINS_START = 'shlink/domainsList/LIST_DOMAINS_START';\nexport const LIST_DOMAINS_ERROR = 'shlink/domainsList/LIST_DOMAINS_ERROR';\nexport const LIST_DOMAINS = 'shlink/domainsList/LIST_DOMAINS';\nexport const FILTER_DOMAINS = 'shlink/domainsList/FILTER_DOMAINS';\nexport const VALIDATE_DOMAIN = 'shlink/domainsList/VALIDATE_DOMAIN';\n/* eslint-enable padding-line-between-statements */\n\nexport interface DomainsList {\n domains: Domain[];\n filteredDomains: Domain[];\n defaultRedirects?: ShlinkDomainRedirects;\n loading: boolean;\n error: boolean;\n errorData?: ProblemDetailsError;\n}\n\nexport interface ListDomainsAction extends Action {\n domains: Domain[];\n defaultRedirects?: ShlinkDomainRedirects;\n}\n\ninterface FilterDomainsAction extends Action {\n searchTerm: string;\n}\n\ninterface ValidateDomain extends Action {\n domain: string;\n status: DomainStatus;\n}\n\nconst initialState: DomainsList = {\n domains: [],\n filteredDomains: [],\n loading: false,\n error: false,\n};\n\nexport type DomainsCombinedAction = ListDomainsAction\n& ApiErrorAction\n& FilterDomainsAction\n& EditDomainRedirectsAction\n& ValidateDomain;\n\nexport const replaceRedirectsOnDomain = (domain: string, redirects: ShlinkDomainRedirects) =>\n (d: Domain): Domain => d.domain !== domain ? d : { ...d, redirects };\n\nexport const replaceStatusOnDomain = (domain: string, status: DomainStatus) =>\n (d: Domain): Domain => d.domain !== domain ? d : { ...d, status };\n\nexport default buildReducer({\n [LIST_DOMAINS_START]: () => ({ ...initialState, loading: true }),\n [LIST_DOMAINS_ERROR]: ({ errorData }) => ({ ...initialState, error: true, errorData }),\n [LIST_DOMAINS]: (_, { domains, defaultRedirects }) =>\n ({ ...initialState, domains, filteredDomains: domains, defaultRedirects }),\n [FILTER_DOMAINS]: (state, { searchTerm }) => ({\n ...state,\n filteredDomains: state.domains.filter(({ domain }) => domain.toLowerCase().match(searchTerm)),\n }),\n [EDIT_DOMAIN_REDIRECTS]: (state, { domain, redirects }) => ({\n ...state,\n domains: state.domains.map(replaceRedirectsOnDomain(domain, redirects)),\n filteredDomains: state.filteredDomains.map(replaceRedirectsOnDomain(domain, redirects)),\n }),\n [VALIDATE_DOMAIN]: (state, { domain, status }) => ({\n ...state,\n domains: state.domains.map(replaceStatusOnDomain(domain, status)),\n filteredDomains: state.filteredDomains.map(replaceStatusOnDomain(domain, status)),\n }),\n}, initialState);\n\nexport const listDomains = (buildShlinkApiClient: ShlinkApiClientBuilder) => () => async (\n dispatch: Dispatch,\n getState: GetState,\n) => {\n dispatch({ type: LIST_DOMAINS_START });\n const { listDomains } = buildShlinkApiClient(getState);\n\n try {\n const { domains, defaultRedirects } = await listDomains().then(({ data, defaultRedirects }) => ({\n domains: data.map((domain): Domain => ({ ...domain, status: 'validating' })),\n defaultRedirects,\n }));\n\n dispatch({ type: LIST_DOMAINS, domains, defaultRedirects });\n } catch (e: any) {\n dispatch({ type: LIST_DOMAINS_ERROR, errorData: parseApiError(e) });\n }\n};\n\nexport const filterDomains = (searchTerm: string): FilterDomainsAction => ({ type: FILTER_DOMAINS, searchTerm });\n\nexport const checkDomainHealth = (buildShlinkApiClient: ShlinkApiClientBuilder) => (domain: string) => async (\n dispatch: Dispatch,\n getState: GetState,\n) => {\n const { selectedServer } = getState();\n\n if (!hasServerData(selectedServer)) {\n dispatch({ type: VALIDATE_DOMAIN, domain, status: 'invalid' });\n\n return;\n }\n\n try {\n const { url, ...rest } = selectedServer;\n const { health } = buildShlinkApiClient({\n ...rest,\n url: replaceAuthorityFromUri(url, domain),\n });\n\n const { status } = await health();\n\n dispatch({ type: VALIDATE_DOMAIN, domain, status: status === 'pass' ? 'valid' : 'invalid' });\n } catch (e) {\n dispatch({ type: VALIDATE_DOMAIN, domain, status: 'invalid' });\n }\n};\n","import { useEffect } from 'react';\nimport { Button, DropdownItem, Input, InputGroup, UncontrolledTooltip, InputProps } from 'reactstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faUndo } from '@fortawesome/free-solid-svg-icons';\nimport { isEmpty, pipe } from 'ramda';\nimport { DropdownBtn } from '../utils/DropdownBtn';\nimport { useToggle } from '../utils/helpers/hooks';\nimport { DomainsList } from './reducers/domainsList';\nimport './DomainSelector.scss';\n\nexport interface DomainSelectorProps extends Omit {\n value?: string;\n onChange: (domain: string) => void;\n}\n\ninterface DomainSelectorConnectProps extends DomainSelectorProps {\n listDomains: Function;\n domainsList: DomainsList;\n}\n\nexport const DomainSelector = ({ listDomains, value, domainsList, onChange }: DomainSelectorConnectProps) => {\n const [ inputDisplayed,, showInput, hideInput ] = useToggle();\n const { domains } = domainsList;\n const valueIsEmpty = isEmpty(value);\n const unselectDomain = () => onChange('');\n\n useEffect(() => {\n listDomains();\n }, []);\n\n return inputDisplayed ? (\n \n onChange(e.target.value)}\n />\n \n \n \n \n Existing domains\n \n \n ) : (\n \n {domains.map(({ domain, isDefault }) => (\n onChange(domain)}\n >\n {domain}\n {isDefault && default}\n \n ))}\n \n \n New domain\n \n \n );\n};\n","import { FC, useState } from 'react';\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';\nimport { ShlinkDomain, ShlinkDomainRedirects } from '../../api/types';\nimport { InputFormGroup, InputFormGroupProps } from '../../utils/forms/InputFormGroup';\nimport { handleEventPreventingDefault, nonEmptyValueOrNull } from '../../utils/utils';\nimport { InfoTooltip } from '../../utils/InfoTooltip';\n\ninterface EditDomainRedirectsModalProps {\n domain: ShlinkDomain;\n isOpen: boolean;\n toggle: () => void;\n editDomainRedirects: (domain: string, redirects: Partial) => Promise;\n}\n\nconst FormGroup: FC = ({ isLast, ...rest }) => (\n \n);\n\nexport const EditDomainRedirectsModal: FC = (\n { isOpen, toggle, domain, editDomainRedirects },\n) => {\n const [ baseUrlRedirect, setBaseUrlRedirect ] = useState(domain.redirects?.baseUrlRedirect ?? '');\n const [ regular404Redirect, setRegular404Redirect ] = useState(domain.redirects?.regular404Redirect ?? '');\n const [ invalidShortUrlRedirect, setInvalidShortUrlRedirect ] = useState(\n domain.redirects?.invalidShortUrlRedirect ?? '',\n );\n const handleSubmit = handleEventPreventingDefault(async () => editDomainRedirects(domain.domain, {\n baseUrlRedirect: nonEmptyValueOrNull(baseUrlRedirect),\n regular404Redirect: nonEmptyValueOrNull(regular404Redirect),\n invalidShortUrlRedirect: nonEmptyValueOrNull(invalidShortUrlRedirect),\n }).then(toggle));\n\n return (\n \n
\n Edit redirects for {domain.domain}\n \n \n \n Visitors accessing the base url, as in https://{domain.domain}/, will be redirected to this URL.\n \n Base URL\n \n \n \n Visitors accessing a url not matching a short URL pattern, as in https://{domain.domain}/???/[...],\n will be redirected to this URL.\n \n Regular 404\n \n \n \n Visitors accessing a url matching a short URL pattern, but not matching an existing short code, will be\n redirected to this URL.\n \n Invalid short URL\n \n \n \n \n \n \n
\n
\n );\n};\n","import { FC, useEffect, useRef, useState } from 'react';\nimport { UncontrolledTooltip } from 'reactstrap';\nimport { ExternalLink } from 'react-external-link';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faTimes as invalidIcon,\n faCheck as checkIcon,\n faCircleNotch as loadingStatusIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { MediaMatcher } from '../../utils/types';\nimport { DomainStatus } from '../data';\n\ninterface DomainStatusIconProps {\n status: DomainStatus;\n matchMedia?: MediaMatcher;\n}\n\nexport const DomainStatusIcon: FC = ({ status, matchMedia = window.matchMedia }) => {\n const ref = useRef();\n const matchesMobile = () => matchMedia('(max-width: 991px)').matches;\n const [ isMobile, setIsMobile ] = useState(matchesMobile());\n\n useEffect(() => {\n const listener = () => setIsMobile(matchesMobile());\n\n window.addEventListener('resize', listener);\n\n return () => window.removeEventListener('resize', listener);\n }, []);\n\n if (status === 'validating') {\n return ;\n }\n\n return (\n <>\n {\n ref.current = el;\n }}\n >\n {status === 'valid'\n ? \n : }\n \n ref.current) as any}\n placement={isMobile ? 'top-start' : 'left'}\n autohide={status === 'valid'}\n >\n {status === 'valid' ? 'Congratulations! This domain is properly configured.' : (\n \n Oops! There is some missing configuration, and short URLs shared with this domain will not work.\n
\n Check the documentation in order to\n find out what is missing.\n
\n )}\n \n \n );\n};\n","import { FC, useEffect } from 'react';\nimport { Button, UncontrolledTooltip } from 'reactstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faBan as forbiddenIcon,\n faDotCircle as defaultDomainIcon,\n faEdit as editIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { ShlinkDomainRedirects } from '../api/types';\nimport { useToggle } from '../utils/helpers/hooks';\nimport { OptionalString } from '../utils/utils';\nimport { SelectedServer } from '../servers/data';\nimport { supportsDefaultDomainRedirectsEdition } from '../utils/helpers/features';\nimport { EditDomainRedirectsModal } from './helpers/EditDomainRedirectsModal';\nimport { Domain } from './data';\nimport { DomainStatusIcon } from './helpers/DomainStatusIcon';\n\ninterface DomainRowProps {\n domain: Domain;\n defaultRedirects?: ShlinkDomainRedirects;\n editDomainRedirects: (domain: string, redirects: Partial) => Promise;\n checkDomainHealth: (domain: string) => void;\n selectedServer: SelectedServer;\n}\n\nconst Nr: FC<{ fallback: OptionalString }> = ({ fallback }) => (\n \n {!fallback && No redirect}\n {fallback && <>{fallback} (as fallback)}\n \n);\nconst DefaultDomain: FC = () => (\n <>\n \n Default domain\n \n);\n\nexport const DomainRow: FC = (\n { domain, editDomainRedirects, checkDomainHealth, defaultRedirects, selectedServer },\n) => {\n const [ isOpen, toggle ] = useToggle();\n const { domain: authority, isDefault, redirects, status } = domain;\n const canEditDomain = !isDefault || supportsDefaultDomainRedirectsEdition(selectedServer);\n\n useEffect(() => {\n checkDomainHealth(domain.domain);\n }, []);\n\n return (\n \n {isDefault && }\n {authority}\n \n {redirects?.baseUrlRedirect ?? }\n \n \n {redirects?.regular404Redirect ?? }\n \n \n {redirects?.invalidShortUrlRedirect ?? }\n \n \n \n \n \n \n \n \n {!canEditDomain && (\n \n Redirects for default domain cannot be edited here.\n
\n Use config options or env vars directly on the server.\n
\n )}\n \n \n \n );\n};\n","import { FC, useEffect } from 'react';\nimport Message from '../utils/Message';\nimport { Result } from '../utils/Result';\nimport { ShlinkApiError } from '../api/ShlinkApiError';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport SearchField from '../utils/SearchField';\nimport { ShlinkDomainRedirects } from '../api/types';\nimport { SelectedServer } from '../servers/data';\nimport { DomainsList } from './reducers/domainsList';\nimport { DomainRow } from './DomainRow';\n\ninterface ManageDomainsProps {\n listDomains: Function;\n filterDomains: (searchTerm: string) => void;\n editDomainRedirects: (domain: string, redirects: Partial) => Promise;\n checkDomainHealth: (domain: string) => void;\n domainsList: DomainsList;\n selectedServer: SelectedServer;\n}\n\nconst headers = [ '', 'Domain', 'Base path redirect', 'Regular 404 redirect', 'Invalid short URL redirect', '', '' ];\n\nexport const ManageDomains: FC = (\n { listDomains, domainsList, filterDomains, editDomainRedirects, checkDomainHealth, selectedServer },\n) => {\n const { filteredDomains: domains, defaultRedirects, loading, error, errorData } = domainsList;\n const resolvedDefaultRedirects = defaultRedirects ?? domains.find(({ isDefault }) => isDefault)?.redirects;\n\n useEffect(() => {\n listDomains();\n }, []);\n\n if (loading) {\n return ;\n }\n\n const renderContent = () => {\n if (error) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n {headers.map((column, index) => )}\n \n \n {domains.length < 1 && }\n {domains.map((domain) => (\n \n ))}\n \n
{column}
No results found
\n
\n );\n };\n\n return (\n <>\n \n {renderContent()}\n \n );\n};\n","import Bottle from 'bottlejs';\nimport { ConnectDecorator } from '../../container/types';\nimport { checkDomainHealth, filterDomains, listDomains } from '../reducers/domainsList';\nimport { DomainSelector } from '../DomainSelector';\nimport { ManageDomains } from '../ManageDomains';\nimport { editDomainRedirects } from '../reducers/domainRedirects';\n\nconst provideServices = (bottle: Bottle, connect: ConnectDecorator) => {\n // Components\n bottle.serviceFactory('DomainSelector', () => DomainSelector);\n bottle.decorator('DomainSelector', connect([ 'domainsList' ], [ 'listDomains' ]));\n\n bottle.serviceFactory('ManageDomains', () => ManageDomains);\n bottle.decorator('ManageDomains', connect(\n [ 'domainsList', 'selectedServer' ],\n [ 'listDomains', 'filterDomains', 'editDomainRedirects', 'checkDomainHealth' ],\n ));\n\n // Actions\n bottle.serviceFactory('listDomains', listDomains, 'buildShlinkApiClient');\n bottle.serviceFactory('filterDomains', () => filterDomains);\n bottle.serviceFactory('editDomainRedirects', editDomainRedirects, 'buildShlinkApiClient');\n bottle.serviceFactory('checkDomainHealth', checkDomainHealth, 'buildShlinkApiClient');\n};\n\nexport default provideServices;\n","import { Action } from 'redux';\nimport { buildActionCreator, buildReducer } from '../../utils/helpers/redux';\n\n/* eslint-disable padding-line-between-statements */\nexport const APP_UPDATE_AVAILABLE = 'shlink/appUpdates/APP_UPDATE_AVAILABLE';\nexport const RESET_APP_UPDATE = 'shlink/appUpdates/RESET_APP_UPDATE';\n/* eslint-enable padding-line-between-statements */\n\nconst initialState = false;\n\nexport default buildReducer>({\n [APP_UPDATE_AVAILABLE]: () => true,\n [RESET_APP_UPDATE]: () => false,\n}, initialState);\n\nexport const appUpdateAvailable = buildActionCreator(APP_UPDATE_AVAILABLE);\n\nexport const resetAppUpdate = buildActionCreator(RESET_APP_UPDATE);\n","import { FC, MouseEventHandler } from 'react';\nimport { Alert, Button } from 'reactstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSyncAlt as reloadIcon } from '@fortawesome/free-solid-svg-icons';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport { useToggle } from '../utils/helpers/hooks';\nimport './AppUpdateBanner.scss';\n\ninterface AppUpdateBannerProps {\n isOpen: boolean;\n toggle: MouseEventHandler;\n forceUpdate: Function;\n}\n\nexport const AppUpdateBanner: FC = ({ isOpen, toggle, forceUpdate }) => {\n const [ isUpdating,, setUpdating ] = useToggle();\n const update = () => {\n setUpdating();\n forceUpdate();\n };\n\n return (\n \n

This app has just been updated!

\n

\n Restart it to enjoy the new features.\n \n

\n
\n );\n};\n","export const forceUpdate = async () => {\n const registrations = await navigator.serviceWorker?.getRegistrations() ?? [];\n\n for (const registration of registrations) {\n const { waiting } = registration;\n\n waiting?.addEventListener('statechange', (event) => {\n if ((event.target as any)?.state === 'activated') {\n window.location.reload();\n }\n });\n\n // The logic that makes skipWaiting to be called when this message is posted is in service-worker.ts\n waiting?.postMessage({ type: 'SKIP_WAITING' });\n }\n};\n","import { useEffect, FC } from 'react';\nimport { Route, Routes, useLocation } from 'react-router-dom';\nimport classNames from 'classnames';\nimport NotFound from '../common/NotFound';\nimport { ServersMap } from '../servers/data';\nimport { Settings } from '../settings/reducers/settings';\nimport { changeThemeInMarkup } from '../utils/theme';\nimport { AppUpdateBanner } from '../common/AppUpdateBanner';\nimport { forceUpdate } from '../utils/helpers/sw';\nimport './App.scss';\n\ninterface AppProps {\n fetchServers: () => void;\n servers: ServersMap;\n settings: Settings;\n resetAppUpdate: () => void;\n appUpdated: boolean;\n}\n\nconst App = (\n MainHeader: FC,\n Home: FC,\n MenuLayout: FC,\n CreateServer: FC,\n EditServer: FC,\n Settings: FC,\n ManageServers: FC,\n ShlinkVersionsContainer: FC,\n) => ({ fetchServers, servers, settings, appUpdated, resetAppUpdate }: AppProps) => {\n const location = useLocation();\n const isHome = location.pathname === '/';\n\n useEffect(() => {\n // On first load, try to fetch the remote servers if the list is empty\n if (Object.keys(servers).length === 0) {\n fetchServers();\n }\n\n changeThemeInMarkup(settings.ui?.theme ?? 'light');\n }, []);\n\n return (\n
\n \n\n
\n
\n \n } />\n } />\n } />\n } />\n } />\n } />\n } />\n \n
\n\n
\n \n
\n
\n\n \n
\n );\n};\n\nexport default App;\n","import Bottle from 'bottlejs';\nimport { appUpdateAvailable, resetAppUpdate } from '../reducers/appUpdates';\nimport App from '../App';\nimport { ConnectDecorator } from '../../container/types';\n\nconst provideServices = (bottle: Bottle, connect: ConnectDecorator) => {\n // Components\n bottle.serviceFactory(\n 'App',\n App,\n 'MainHeader',\n 'Home',\n 'MenuLayout',\n 'CreateServer',\n 'EditServer',\n 'Settings',\n 'ManageServers',\n 'ShlinkVersionsContainer',\n );\n bottle.decorator('App', connect([ 'servers', 'settings', 'appUpdated' ], [ 'fetchServers', 'resetAppUpdate' ]));\n\n // Actions\n bottle.serviceFactory('appUpdateAvailable', () => appUpdateAvailable);\n bottle.serviceFactory('resetAppUpdate', () => resetAppUpdate);\n};\n\nexport default provideServices;\n","import Bottle, { IContainer } from 'bottlejs';\nimport { connect as reduxConnect } from 'react-redux';\nimport { pick } from 'ramda';\nimport provideApiServices from '../api/services/provideServices';\nimport provideCommonServices from '../common/services/provideServices';\nimport provideShortUrlsServices from '../short-urls/services/provideServices';\nimport provideServersServices from '../servers/services/provideServices';\nimport provideVisitsServices from '../visits/services/provideServices';\nimport provideTagsServices from '../tags/services/provideServices';\nimport provideUtilsServices from '../utils/services/provideServices';\nimport provideMercureServices from '../mercure/services/provideServices';\nimport provideSettingsServices from '../settings/services/provideServices';\nimport provideDomainsServices from '../domains/services/provideServices';\nimport provideAppServices from '../app/services/provideServices';\nimport { ConnectDecorator } from './types';\n\ntype LazyActionMap = Record;\n\nconst bottle = new Bottle();\n\nexport const { container } = bottle;\n\nconst lazyService = (container: IContainer, serviceName: string) =>\n (...args: any[]) => (container[serviceName] as T)(...args) as K;\nconst mapActionService = (map: LazyActionMap, actionName: string): LazyActionMap => ({\n ...map,\n // Wrap actual action service in a function so that it is lazily created the first time it is called\n [actionName]: lazyService(container, actionName),\n});\nconst connect: ConnectDecorator = (propsFromState: string[] | null, actionServiceNames: string[] = []) =>\n reduxConnect(\n propsFromState ? pick(propsFromState) : null,\n actionServiceNames.reduce(mapActionService, {}),\n );\n\nprovideAppServices(bottle, connect);\nprovideCommonServices(bottle, connect);\nprovideApiServices(bottle);\nprovideShortUrlsServices(bottle, connect);\nprovideServersServices(bottle, connect);\nprovideTagsServices(bottle, connect);\nprovideVisitsServices(bottle, connect);\nprovideUtilsServices(bottle);\nprovideMercureServices(bottle);\nprovideSettingsServices(bottle, connect);\nprovideDomainsServices(bottle, connect);\n","import { combineReducers } from 'redux';\nimport serversReducer from '../servers/reducers/servers';\nimport selectedServerReducer from '../servers/reducers/selectedServer';\nimport shortUrlsListReducer from '../short-urls/reducers/shortUrlsList';\nimport shortUrlCreationReducer from '../short-urls/reducers/shortUrlCreation';\nimport shortUrlDeletionReducer from '../short-urls/reducers/shortUrlDeletion';\nimport shortUrlEditionReducer from '../short-urls/reducers/shortUrlEdition';\nimport shortUrlVisitsReducer from '../visits/reducers/shortUrlVisits';\nimport tagVisitsReducer from '../visits/reducers/tagVisits';\nimport orphanVisitsReducer from '../visits/reducers/orphanVisits';\nimport nonOrphanVisitsReducer from '../visits/reducers/nonOrphanVisits';\nimport shortUrlDetailReducer from '../short-urls/reducers/shortUrlDetail';\nimport tagsListReducer from '../tags/reducers/tagsList';\nimport tagDeleteReducer from '../tags/reducers/tagDelete';\nimport tagEditReducer from '../tags/reducers/tagEdit';\nimport mercureInfoReducer from '../mercure/reducers/mercureInfo';\nimport settingsReducer from '../settings/reducers/settings';\nimport domainsListReducer from '../domains/reducers/domainsList';\nimport visitsOverviewReducer from '../visits/reducers/visitsOverview';\nimport appUpdatesReducer from '../app/reducers/appUpdates';\nimport { ShlinkState } from '../container/types';\n\nexport default combineReducers({\n servers: serversReducer,\n selectedServer: selectedServerReducer,\n shortUrlsList: shortUrlsListReducer,\n shortUrlCreationResult: shortUrlCreationReducer,\n shortUrlDeletion: shortUrlDeletionReducer,\n shortUrlEdition: shortUrlEditionReducer,\n shortUrlVisits: shortUrlVisitsReducer,\n tagVisits: tagVisitsReducer,\n orphanVisits: orphanVisitsReducer,\n nonOrphanVisits: nonOrphanVisitsReducer,\n shortUrlDetail: shortUrlDetailReducer,\n tagsList: tagsListReducer,\n tagDelete: tagDeleteReducer,\n tagEdit: tagEditReducer,\n mercureInfo: mercureInfoReducer,\n settings: settingsReducer,\n domainsList: domainsListReducer,\n visitsOverview: visitsOverviewReducer,\n appUpdated: appUpdatesReducer,\n});\n","import ReduxThunk from 'redux-thunk';\nimport { applyMiddleware, compose, createStore } from 'redux';\nimport { save, load, RLSOptions } from 'redux-localstorage-simple';\nimport reducers from '../reducers';\nimport { migrateDeprecatedSettings } from '../settings/helpers';\nimport { ShlinkState } from './types';\n\nconst isProduction = process.env.NODE_ENV !== 'production';\nconst composeEnhancers: Function = !isProduction && (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n\nconst localStorageConfig: RLSOptions = {\n states: [ 'settings', 'servers' ],\n namespace: 'shlink',\n namespaceSeparator: '.',\n debounce: 300,\n};\nconst preloadedState = migrateDeprecatedSettings(load(localStorageConfig) as ShlinkState);\n\nexport const store = createStore(reducers, preloadedState, composeEnhancers(\n applyMiddleware(save(localStorageConfig), ReduxThunk),\n));\n","import { ShlinkState } from '../../container/types';\n\nexport const migrateDeprecatedSettings = (state: Partial): Partial => {\n if (!state.settings) {\n return state;\n }\n\n // The \"last180Days\" interval had a typo, with a lowercase d\n if ((state.settings.visits?.defaultInterval as any) === 'last180days') {\n state.settings.visits && (state.settings.visits.defaultInterval = 'last180Days');\n }\n\n // The \"tags display mode\" option has been moved from \"ui\" to \"tags\"\n state.settings.tags = {\n ...state.settings.tags,\n defaultMode: state.settings.tags?.defaultMode ?? (state.settings.ui as any)?.tagsMode,\n };\n state.settings.ui && delete (state.settings.ui as any).tagsMode;\n\n return state;\n};\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://cra.link/PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL ?? '', window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://cra.link/PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://cra.link/PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import L from 'leaflet';\nimport marker2x from 'leaflet/dist/images/marker-icon-2x.png';\nimport marker from 'leaflet/dist/images/marker-icon.png';\nimport markerShadow from 'leaflet/dist/images/marker-shadow.png';\n\nexport const fixLeafletIcons = () => {\n delete (L.Icon.Default.prototype as any)._getIconUrl;\n\n L.Icon.Default.mergeOptions({\n iconRetinaUrl: marker2x,\n iconUrl: marker,\n shadowUrl: markerShadow,\n });\n};\n","import { render } from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { BrowserRouter } from 'react-router-dom';\nimport { homepage } from '../package.json';\nimport { container } from './container';\nimport { store } from './container/store';\nimport { fixLeafletIcons } from './utils/helpers/leaflet';\nimport { register as registerServiceWorker } from './serviceWorkerRegistration';\nimport 'react-datepicker/dist/react-datepicker.css';\nimport 'leaflet/dist/leaflet.css';\nimport './index.scss';\n\n// This overwrites icons used for leaflet maps, fixing some issues caused by webpack while processing the CSS\nfixLeafletIcons();\n\nconst { App, ScrollToTop, ErrorHandler, appUpdateAvailable } = container;\n\nrender(\n \n \n \n \n \n \n \n \n ,\n document.getElementById('root'),\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://cra.link/PWA\nregisterServiceWorker({\n onUpdate() {\n store.dispatch(appUpdateAvailable()); // eslint-disable-line @typescript-eslint/no-unsafe-call\n },\n});\n","import { FC } from 'react';\nimport './NoMenuLayout.scss';\n\nexport const NoMenuLayout: FC = ({ children }) =>
{children}
;\n","import { compare } from 'compare-versions';\nimport { identity, memoizeWith } from 'ramda';\nimport { Empty, hasValue } from '../utils';\n\ntype SemVerPatternFragment = `${bigint | '*'}`;\n\nexport type SemVerPattern = SemVerPatternFragment\n| `${SemVerPatternFragment}.${SemVerPatternFragment}`\n| `${SemVerPatternFragment}.${SemVerPatternFragment}.${SemVerPatternFragment}`;\n\nexport interface Versions {\n maxVersion?: SemVerPattern;\n minVersion?: SemVerPattern;\n}\n\nexport type SemVer = `${bigint}.${bigint}.${bigint}` | 'latest';\n\nexport const versionMatch = (versionToMatch: SemVer | Empty, { maxVersion, minVersion }: Versions): boolean => {\n if (!hasValue(versionToMatch)) {\n return false;\n }\n\n const matchesMinVersion = !minVersion || compare(versionToMatch, minVersion, '>=');\n const matchesMaxVersion = !maxVersion || compare(versionToMatch, maxVersion, '<=');\n\n return matchesMaxVersion && matchesMinVersion;\n};\n\nconst versionIsValidSemVer = memoizeWith(identity, (version: string): version is SemVer => {\n try {\n return compare(version, version, '=');\n } catch (e) {\n return false;\n }\n});\n\nexport const versionToPrintable = (version: string) => !versionIsValidSemVer(version) ? version : `v${version}`;\n\nexport const versionToSemVer = (defaultValue: SemVer = 'latest') =>\n (version: string): SemVer => versionIsValidSemVer(version) ? version : defaultValue;\n","import { FC, useEffect } from 'react';\n\ninterface WithoutSelectedServerProps {\n resetSelectedServer: Function;\n}\n\nexport function withoutSelectedServer(WrappedComponent: FC) {\n return (props: WithoutSelectedServerProps & T) => {\n useEffect(() => {\n props.resetSelectedServer();\n }, []);\n\n return ;\n };\n}\n","export const saveUrl = ({ document }: Window, url: string, filename: string) => {\n const link = document.createElement('a');\n\n link.setAttribute('href', url);\n link.setAttribute('download', filename);\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\nexport const saveCsv = (window: Window, csv: string, filename: string) => {\n const blob = new Blob([ csv ], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n\n saveUrl(window, url, filename);\n};\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["common/img/ShlinkLogo.tsx","servers/helpers/withSelectedServer.tsx","common/NotFound.tsx","servers/ServersListGroup.tsx","utils/helpers/hooks.ts","common/services/provideServices.ts","common/ScrollToTop.tsx","common/ErrorHandler.tsx","common/services/ImageDownloader.ts","utils/services/provideServices.ts","utils/services/LocalStorage.ts","utils/services/ColorGenerator.ts","servers/data/index.ts","common/ShlinkVersions.tsx","common/ShlinkVersionsContainer.tsx","common/MainHeader.tsx","common/Home.tsx","common/MenuLayout.tsx","common/AsideMenu.tsx","utils/utils.ts","utils/SimpleCard.tsx","utils/helpers/features.ts","utils/theme/index.ts","utils/helpers/query.ts","utils/Message.tsx","utils/SearchField.tsx","utils/helpers/ordering.ts","api/services/ShlinkApiClient.ts","api/services/ShlinkApiClientBuilder.ts","api/services/provideServices.ts","tags/helpers/Tag.tsx","utils/DropdownBtn.tsx","utils/helpers/date.ts","utils/dates/types/index.ts","utils/DateInput.tsx","utils/dates/DateRangeRow.tsx","utils/dates/DateIntervalDropdownItems.tsx","utils/dates/DateRangeSelector.tsx","utils/BooleanControl.tsx","utils/ToggleSwitch.tsx","utils/TooltipToggleSwitch.tsx","short-urls/helpers/hooks.ts","short-urls/ShortUrlsFilteringBar.tsx","utils/OrderingDropdown.tsx","mercure/helpers/boundToMercureHub.tsx","mercure/helpers/index.ts","mercure/helpers/Topics.ts","utils/table/TableOrderIcon.tsx","visits/VisitsStats.tsx","utils/helpers/redux.ts","settings/reducers/settings.ts","utils/helpers/numbers.ts","utils/helpers/pagination.ts","short-urls/Paginator.tsx","short-urls/data/index.ts","short-urls/ShortUrlsList.tsx","utils/CopyToClipboardIcon.tsx","utils/Time.tsx","short-urls/helpers/ShortUrlDetailLink.tsx","short-urls/helpers/ShortUrlVisitsCount.tsx","short-urls/helpers/ShortUrlsRow.tsx","utils/DropdownBtnMenu.tsx","short-urls/helpers/ShortUrlsRowMenu.tsx","short-urls/CreateShortUrl.tsx","utils/Result.tsx","api/utils/index.ts","api/ShlinkApiError.tsx","short-urls/helpers/DeleteShortUrlModal.tsx","short-urls/helpers/CreateShortUrlResult.tsx","short-urls/helpers/index.ts","visits/reducers/visitCreation.ts","short-urls/reducers/shortUrlDeletion.ts","short-urls/reducers/shortUrlCreation.ts","short-urls/reducers/shortUrlEdition.ts","short-urls/reducers/shortUrlsList.ts","short-urls/ShortUrlsTable.tsx","short-urls/helpers/qr-codes/QrFormatDropdown.tsx","short-urls/helpers/qr-codes/QrErrorCorrectionDropdown.tsx","short-urls/helpers/QrCodeModal.tsx","utils/helpers/qrCodes.ts","utils/Checkbox.tsx","short-urls/UseExistingIfFoundInfoIcon.tsx","utils/InfoTooltip.tsx","short-urls/helpers/ShortUrlFormCheckboxGroup.tsx","short-urls/ShortUrlForm.tsx","short-urls/EditShortUrl.tsx","short-urls/reducers/shortUrlDetail.ts","short-urls/services/provideServices.ts","utils/forms/LabeledFormGroup.tsx","utils/forms/InputFormGroup.tsx","servers/helpers/ServerForm.tsx","servers/helpers/DuplicatedServersModal.tsx","servers/CreateServer.tsx","servers/ServersDropdown.tsx","servers/DeleteServerModal.tsx","servers/DeleteServerButton.tsx","servers/EditServer.tsx","servers/helpers/ImportServersBtn.tsx","servers/reducers/selectedServer.ts","servers/reducers/servers.ts","servers/reducers/remoteServers.ts","servers/helpers/ForServerVersion.tsx","servers/helpers/ServerError.tsx","servers/helpers/HighlightCard.tsx","servers/Overview.tsx","servers/ManageServers.tsx","servers/ManageServersRow.tsx","servers/ManageServersRowDropdown.tsx","servers/services/ServersImporter.ts","servers/services/ServersExporter.ts","servers/services/provideServices.ts","visits/helpers/MapModal.tsx","visits/VisitsHeader.tsx","visits/ShortUrlVisitsHeader.tsx","utils/NavPills.tsx","utils/helpers/visits.ts","utils/helpers/charts.ts","visits/charts/LineChartCard.tsx","common/SimplePaginator.tsx","visits/VisitsTable.tsx","visits/helpers/OpenMapModalBtn.tsx","visits/types/helpers.ts","visits/services/VisitsParser.ts","visits/helpers/VisitsFilterDropdown.tsx","visits/charts/DoughnutChartLegend.tsx","visits/charts/DoughnutChart.tsx","visits/charts/ChartCard.tsx","visits/charts/DoughnutChartCard.tsx","utils/PaginationDropdown.tsx","visits/charts/HorizontalBarChart.tsx","visits/charts/SortableBarChartCard.tsx","visits/ShortUrlVisits.tsx","visits/TagVisitsHeader.tsx","visits/TagVisits.tsx","visits/OrphanVisitsHeader.tsx","visits/OrphanVisits.tsx","visits/NonOrphanVisitsHeader.tsx","visits/NonOrphanVisits.tsx","visits/reducers/common.ts","visits/reducers/shortUrlVisits.ts","visits/reducers/tagVisits.ts","visits/reducers/orphanVisits.ts","visits/reducers/nonOrphanVisits.ts","visits/reducers/visitsOverview.ts","visits/services/VisitsExporter.ts","visits/services/provideServices.ts","tags/helpers/TagBullet.tsx","tags/helpers/TagsSelector.tsx","tags/TagCard.tsx","tags/helpers/DeleteTagConfirmModal.tsx","tags/helpers/EditTagModal.tsx","tags/data/TagsListChildrenProps.ts","tags/TagsModeDropdown.tsx","tags/TagsList.tsx","tags/reducers/tagDelete.ts","tags/reducers/tagEdit.ts","tags/reducers/tagsList.ts","tags/TagsCards.tsx","tags/TagsTable.tsx","tags/TagsTableRow.tsx","tags/services/provideServices.ts","mercure/reducers/mercureInfo.ts","mercure/services/provideServices.ts","utils/forms/FormText.tsx","settings/RealTimeUpdatesSettings.tsx","settings/Settings.tsx","settings/ShortUrlCreationSettings.tsx","settings/UserInterfaceSettings.tsx","utils/dates/DateIntervalSelector.tsx","settings/VisitsSettings.tsx","settings/TagsSettings.tsx","settings/ShortUrlsListSettings.tsx","settings/services/provideServices.ts","utils/helpers/uri.ts","domains/reducers/domainRedirects.ts","domains/reducers/domainsList.ts","domains/DomainSelector.tsx","domains/helpers/EditDomainRedirectsModal.tsx","domains/helpers/DomainStatusIcon.tsx","domains/DomainRow.tsx","domains/ManageDomains.tsx","domains/services/provideServices.ts","app/reducers/appUpdates.ts","common/AppUpdateBanner.tsx","utils/helpers/sw.ts","app/App.tsx","app/services/provideServices.ts","container/index.ts","reducers/index.ts","container/store.ts","settings/helpers/index.ts","serviceWorkerRegistration.ts","utils/helpers/leaflet.ts","index.tsx","common/NoMenuLayout.tsx","utils/helpers/version.ts","servers/helpers/withoutSelectedServer.tsx","utils/helpers/files.ts"],"names":["ShlinkLogo","color","MAIN_COLOR","className","viewBox","version","xmlns","fill","d","withSelectedServer","WrappedComponent","ServerError","props","params","useParams","selectServer","selectedServer","useEffect","serverId","isNotFoundServer","loading","NotFound","to","children","ServerListItem","id","name","tag","Link","icon","chevronIcon","ServersListGroup","servers","embedded","length","classNames","map","useStateFlagTimeout","setTimeout","clearTimeout","initialValue","delay","useState","flag","setFlag","timeout","useRef","undefined","callback","current","useToggle","useSwipeable","showSidebar","hideSidebar","swipeMenuIfNoModalExists","e","event","composedPath","some","classList","contains","document","querySelector","useReactSwipeable","delta","onSwipedLeft","onSwipedRight","useQueryState","paramName","initialState","value","setValue","window","location","history","query","parseQuery","search","pushState","pathname","stringifyQuery","useEffectExceptFirstTime","deps","isFirstLoad","useGoBack","navigate","useNavigate","provideServices","bottle","connect","constant","global","console","axios","service","ImageDownloader","serviceFactory","ScrollToTop","MainHeader","Home","decorator","withoutSelectedServer","MenuLayout","AsideMenu","ShlinkVersionsContainer","ErrorHandler","useLocation","scrollTo","error","state","hasError","this","outline","onClick","reload","Component","imgUrl","filename","get","responseType","data","url","URL","createObjectURL","saveUrl","localStorage","LocalStorage","ColorGenerator","buildPath","path","key","item","getItem","JSON","parse","set","setItem","stringify","HEX_DIGITS","floor","Math","random","sqrt","round","normalizeKey","toLowerCase","trim","perceivedLightness","r","g","b","storage","colors","lights","getColorForKey","normalizedKey","setColorForKey","rangeOf","join","isColorLightForKey","colorHex","substring","isNil","rgb","match","hex","parseInt","hexColorToRgbArray","hasServerData","server","apiKey","isServerWithId","hasOwnProperty","isReachableServer","getServerId","serverWithIdToServerData","omit","normalizeVersion","pipe","versionToSemVer","versionToPrintable","VersionLink","project","href","ShlinkVersions","clientVersion","normalizedClientVersion","printableVersion","classes","ServersDropdown","isOpen","toggleOpen","close","settingsPath","toggleClass","dark","fixed","expand","arrowIcon","navbar","active","startsWith","cogsIcon","serversList","values","hasServers","isEmpty","autoConnectServer","find","autoConnect","noGutters","faPlus","faExternalLinkAlt","TagsList","ShortUrlsList","CreateShortUrl","ShortUrlVisits","TagVisits","OrphanVisits","NonOrphanVisits","Overview","EditShortUrl","ManageDomains","sidebarVisible","toggleSidebar","addOrphanVisitsRoute","supportsOrphanVisits","addNonOrphanVisitsRoute","supportsNonOrphanVisits","addManageDomainsRoute","supportsDomainRedirects","burgerClasses","swipeableProps","burgerIcon","showOnMobile","index","element","replace","AsideMenuItem","rest","isActive","DeleteServerButton","hasId","addManageDomainsLink","asideClass","suffix","fixedWidth","overviewIcon","listIcon","createIcon","flip","tagsIcon","domainsIcon","editIcon","textClassName","size","mappingFn","startAt","range","hasValue","handleEventPreventingDefault","handler","preventDefault","nonEmptyValueOrNull","capitalize","charAt","toUpperCase","slice","SimpleCard","title","bodyClassName","serverMatchesVersions","versions","versionMatch","supportsQrCodeSizeInQuery","minVersion","supportsShortUrlTitle","supportsQrCodeMargin","supportsTagsInPatch","supportsBotVisits","supportsCrawlableVisits","supportsQrErrorCorrection","supportsForwardQuery","supportsDefaultDomainRedirectsEdition","supportsAllTagsFiltering","MAIN_COLOR_ALPHA","HIGHLIGHTED_COLOR","HIGHLIGHTED_COLOR_ALPHA","PRIMARY_LIGHT_COLOR","PRIMARY_DARK_COLOR","changeThemeInMarkup","theme","getElementsByTagName","setAttribute","isDarkThemeEnabled","getAttribute","qs","ignoreQueryPrefix","arrayFormat","getClassForType","type","default","getTextClassForType","Message","fullWidth","body","preloader","spin","timer","determineOrderDir","currentField","newField","currentOrderDir","ASC","DESC","sortList","list","field","dir","sort","a","greaterThan","smallerThan","orderToString","order","stringToOrder","split","buildShlinkBaseUrl","rejectNilProps","reject","normalizeOrderByInParams","orderBy","ShlinkApiClient","baseUrl","listShortUrls","performRequest","then","shortUrls","createShortUrl","options","filteredOptions","resp","getShortUrlVisits","shortCode","visits","getTagVisits","getOrphanVisits","getNonOrphanVisits","getVisitsOverview","getShortUrl","domain","deleteShortUrl","updateShortUrlTags","tags","updateShortUrl","listTags","withStats","stats","deleteTags","editTag","oldName","newName","health","mercureInfo","listDomains","domains","editDomainRedirects","domainRedirects","method","headers","paramsSerializer","apiClients","buildShlinkApiClient","getStateOrSelectedServer","getState","isGetState","prop","Error","clientKey","SearchField","onChange","large","noBorder","searchTerm","setSearchTerm","resetTimer","searchTermChanged","newSearchTerm","placeholder","target","searchIcon","hidden","Tag","text","clearable","colorGenerator","onClose","style","backgroundColor","cursor","DropdownBtn","disabled","dropdownClassName","right","minWidth","toggle","toggleClasses","caret","isDateObject","date","formatDateFromFormat","theFormat","format","formatISO","formatIsoDate","formatInternational","formatDate","parseISO","stdParseISO","isBetween","start","end","isWithinInterval","isBeforeOrEqual","dateToCompare","isEqual","isBefore","dateRangeIsEmpty","dateRange","filter","Boolean","rangeIsInterval","INTERVAL_TO_STRING_MAP","today","yesterday","last7Days","last30Days","last90Days","last180Days","last365Days","all","DATE_INTERVALS","Object","keys","rangeOrIntervalToString","startDate","endDate","dateRangeToString","startOfDaysAgo","daysAgo","startOfDay","subDays","Date","endingToday","endOfDay","intervalToDateRange","dateInterval","dateToMatchingInterval","theDate","cond","T","DateInput","isClearable","selected","showCalendarIcon","ref","dateFormat","calendarIcon","input","focus","DateRangeRow","onStartDateChange","onEndDateChange","placeholderText","maxDate","minDate","DateIntervalDropdownItems","allText","divider","interval","DateRangeSelector","onDatesChange","initialDateRange","defaultText","updatable","initialIntervalIsRange","activeInterval","setActiveInterval","activeDateRange","setActiveDateRange","updateDateRange","updateInterval","isDateInterval","header","BooleanControl","checked","identity","inline","uuid","typeClasses","display","htmlFor","ToggleSwitch","TooltipToggleSwitch","tooltip","el","useShortUrlsQuery","useMemo","extra","mergedQuery","normalizedQuery","evolvedQuery","queryString","dateOrNull","ShortUrlsFilteringBar","tagsMode","toFirstPage","selectedTags","setDates","setSearch","removeTag","selectedTag","tagsList","canChangeTagsMode","toggleTagsMode","placement","OrderingDropdown","items","isButton","handleItemClick","fieldKey","newOrderDir","toPairs","fieldValue","sortAscIcon","sortDescIcon","boundToMercureHub","getTopicsForProps","pendingUpdates","Set","createNewVisits","loadMercureInfo","topics","closeEventSource","onMessage","onTokenExpired","mercureHubUrl","token","onEventSourceMessage","onEventSourceError","status","subscriptions","topic","hubUrl","searchParams","append","es","EventSource","Authorization","onmessage","onerror","forEach","bindToMercureTopic","visit","add","setInterval","clear","clearInterval","Topics","TableOrderIcon","currentOrder","caretUpIcon","caretDownIcon","orphanVisits","shortUrlVisits","selectedBar","buildReducer","action","actionHandler","currentState","buildActionCreator","SET_SETTINGS","DEFAULT_SHORT_URLS_ORDERING","realTimeUpdates","enabled","shortUrlCreation","validateUrls","ui","defaultInterval","shortUrlsList","defaultOrdering","mergeDeepRight","dissoc","toggleRealTimeUpdates","setRealTimeUpdatesInterval","setShortUrlCreationSettings","settings","setShortUrlsListSettings","setUiSettings","setVisitsSettings","setTagsSettings","ceil","formatter","Intl","NumberFormat","prettify","number","Number","ELLIPSIS","progressivePagination","currentPage","pageCount","pages","max","min","unshift","push","pageIsEllipsis","pageNumber","prettifyPageNumber","keyForPage","Paginator","paginator","currentQueryString","pagesCount","urlForPage","listClassName","previous","next","SHORT_URLS_ORDERABLE_FIELDS","dateCreated","longUrl","ShortUrlsTable","page","actualOrderBy","setActualOrderBy","pagination","handleOrderBy","addTag","newTag","orderByColumn","renderOrderIcon","onTagClick","CopyToClipboardIcon","onCopy","copyIcon","Time","relative","dateObject","dateTime","getUnixTime","formatDistance","buildUrl","ShortUrlDetailLink","shortUrl","ShortUrlVisitsCount","visitsCount","maxVisits","meta","visitsLink","prettifiedMaxVisits","tooltipRef","infoIcon","ShortUrlsRow","ShortUrlsRowMenu","copiedToClipboard","setCopiedToClipboard","setActive","isFirstRun","data-th","DropdownBtnMenu","menuIcon","DeleteShortUrlModal","QrCodeModal","isQrModalOpen","toggleQrCode","isDeleteModalOpen","toggleDelete","pieChartIcon","qrIcon","deleteIcon","ShortUrlForm","CreateShortUrlResult","shortUrlCreationResult","resetCreateShortUrl","basicMode","shortUrlCreationSettings","customSlug","shortCodeLength","validSince","validUntil","findIfExists","validateUrl","forwardQuery","getInitialState","saving","mode","onSave","canBeClosed","Result","small","parseApiError","response","isInvalidDeletionError","ShlinkApiError","errorData","fallbackMessage","detail","invalidElements","shortUrlDeletion","resetDeleteShortUrl","inputValue","setInputValue","handleDeleteUrl","catch","centered","onSubmit","result","showCopyTooltip","setShowCopyTooltip","closeIcon","shortUrlMatches","CREATE_VISITS","createdVisits","DELETE_SHORT_URL_START","DELETE_SHORT_URL_ERROR","SHORT_URL_DELETED","RESET_DELETE_SHORT_URL","dispatch","CREATE_SHORT_URL_START","CREATE_SHORT_URL_ERROR","CREATE_SHORT_URL","RESET_CREATE_SHORT_URL","_","EDIT_SHORT_URL_START","EDIT_SHORT_URL_ERROR","SHORT_URL_EDITED","editShortUrl","sendTagsSeparately","Promise","LIST_SHORT_URLS_START","LIST_SHORT_URLS_ERROR","LIST_SHORT_URLS","assocPath","totalItems","currentShortUrl","lastVisit","last","assoc","ITEMS_IN_OVERVIEW_PAGE","editedShortUrl","actionableFieldClasses","orderableColumnsClasses","tableClasses","supportsTitle","colSpan","QrFormatDropdown","setFormat","QrErrorCorrectionDropdown","errorCorrection","setErrorCorrection","imageDownloader","ForServerVersion","setSize","margin","setMargin","capabilities","useSizeInPath","marginIsSupported","errorCorrectionIsSupported","willRenderThreeControls","qrCodeUrl","buildQrCodeUrl","totalSize","modalSize","step","src","alt","block","saveImage","downloadIcon","Checkbox","InfoModal","UseExistingIfFoundInfoIcon","isModalOpen","toggleModal","InfoTooltip","ShortUrlFormCheckboxGroup","infoTooltip","normalizeTag","toDate","dynamicColClasses","TagsSelector","DomainSelector","shortUrlData","setShortUrlData","isEdit","isBasicMode","hadTitleOriginally","resolveNewTitle","hasNewTitle","matcher","submit","renderOptionalInput","fromGroupProps","renderDateInput","basicComponents","bsSize","required","showCustomizeCard","limitAccessCardClasses","showCrawlableControl","showForwardQueryControl","showBehaviorCard","extraChecksCardClasses","crawlable","shortUrlDetail","getShortUrlDetail","shortUrlEdition","goBack","savingError","savingErrorData","savingSucceeded","isSuccessful","isNotSuccessful","faArrowLeft","GET_SHORT_URL_DETAIL_START","GET_SHORT_URL_DETAIL_ERROR","GET_SHORT_URL_DETAIL","LabeledFormGroup","label","labelClassName","noMargin","InputFormGroup","ServerForm","initialValues","setName","setUrl","setApiKey","handleSubmit","DuplicatedServersModal","duplicatedServers","onDiscard","hasMultipleServers","ImportResult","CreateServer","ImportServersBtn","createServer","serversImported","setServersImported","errorImporting","setErrorImporting","isConfirmModalOpen","toggleConfirmModal","serverData","setServerData","save","NoMenuLayout","tooltipPlacement","onImport","onImportError","nav","inNavbar","serverIcon","plusIcon","DeleteServerModal","deleteServer","redirectHome","showModal","hideModal","EditServer","editServer","serversFiltering","importServersFromFile","createServers","fileRef","serversToCreate","setServersToCreate","setDuplicatedServers","create","createAllServers","createNonDuplicatedServers","complement","onFile","files","existingServers","hasDuplicatedServers","click","importIcon","accept","SELECT_SERVER","RESET_SELECTED_SERVER","toSemVer","getServerVersion","memoizeWith","_serverId","resetSelectedServer","serverNotFound","serverNotReachable","EDIT_SERVER","DELETE_SERVER","CREATE_SERVERS","SET_AUTO_CONNECT","newServers","fromPairs","evaluatedServerId","serversListToMap","reduce","acc","setAutoConnect","responseToServersList","Array","isArray","fetchServers","homepage","remoteList","maxVersion","HighlightCard","link","buildExtraProps","linkIcon","loadVisitsOverview","visitsOverview","loadingTags","loadingVisits","orphanVisitsCount","linkToOrphanVisits","linkToNonOrphanVisits","itemsPerPage","encodeURIComponent","ManageServers","serversExporter","ManageServersRow","allServers","setServersList","hasAutoConnect","exportServers","exportIcon","width","ManageServersRowDropdown","checkIcon","isMenuOpen","toggleMenu","serverUrl","isAutoConnect","autoConnectIcon","toggleOffIcon","toggleOnIcon","connectIcon","validateServer","validateServers","every","ServersImporter","csvJson","fileReaderFactory","file","reader","resolve","addEventListener","content","toString","toObject","readAsText","ServersExporter","csvjson","csv","toCSV","saveCsv","FileReader","OpenStreetMapTile","TileLayer","attribution","calculateMapProps","locations","bounds","zoom","center","latLong","MapModal","contentClassName","MapContainer","cityName","count","Marker","position","Popup","VisitsHeader","ShortUrlVisitsHeader","shortLink","longLink","visitsStatsTitle","NavPillItem","RouterNavLink","NavPills","pills","Children","child","isValidElement","DEFAULT","BROWSERS_WHITELIST","extractDomain","includes","fillTheGaps","labels","zipObj","pointerOnHover","native","firstElement","renderChartLabel","dataset","formattedValue","renderPieChartLabel","STEPS_MAP","monthly","weekly","daily","hourly","STEP_TO_DURATION_MAP","hours","days","weeks","months","STEP_TO_DIFF_FUNC_MAP","differenceInHours","differenceInDays","differenceInWeeks","differenceInMonths","STEP_TO_DATE_FORMAT","firstWeekDay","startOfISOWeek","lastWeekDay","endOfISOWeek","groupVisitsByStep","countBy","generateLabelsAndGroupedVisits","groupedVisitsWithGaps","skipNoElements","diffFunc","newerDate","oldestDate","duration","num","generateLabels","generateDataset","tension","borderColor","selectedLabel","chartElementAtEvent","datasetsByPoint","setSelectedVisits","chart","LineChartCard","highlightedVisits","highlightedLabel","oldestVisitDate","now","always","determineInitialStep","setStep","skipNoVisits","toggleSkipNoVisits","visitsToDatasetGroups","reverse","groupedVisits","groupedHighlighted","generateChartDatasets","mainDataset","maintainAspectRatio","plugins","legend","intersect","axis","callbacks","scales","y","beginAtZero","ticks","precision","x","onHover","renderLineChart","datasets","getElementAtEvent","entries","menuText","SimplePaginator","setCurrentPage","searchVisits","browser","os","referer","country","city","visitedUrl","visitMatchesSearch","calculateVisits","allVisits","sortedVisits","sortVisits","total","visitsGroups","splitEvery","VisitsTable","selectedVisits","matchMedia","isOrphanVisits","headerCellsClass","matchMobile","matches","isMobileDevice","setIsMobileDevice","setOrder","resultSet","setPage","supportsBots","fullSizeColSpan","listener","removeEventListener","flat","botIcon","isSelected","v","potentialBot","OpenMapModalBtn","modalTitle","activeCities","mapIsOpened","openMap","closeMap","dropdownIsOpened","toggleDropdown","openDropdown","locationsToShow","setLocationsToShow","buttonRef","openMapWithLocations","filtered","mapIcon","isOrphanVisit","groupNewVisitsByType","groupBy","newVisit","regularVisits","highlightedVisitsToStats","property","toApiParams","excludeBots","visitHasProperty","propertyName","optionalNumericToNumber","numeric","parseFloat","updateLocationsStatsForVisit","updateCountriesStatsForVisit","updateCitiesStatsForVisit","processStatsFromVisits","osStats","updateOsStatsForVisit","browsersStats","updateBrowsersStatsForVisit","browsers","referrersStats","updateReferrersStatsForVisit","referrers","countries","cities","citiesForMapStats","latitude","longitude","currentCity","updateCitiesForMapForVisit","citiesForMap","visitedUrlsStats","isNormalizedOrphanVisit","updateVisitedUrlsForVisit","visitedUrls","normalizeVisits","userAgent","visitLocation","common","bowser","parseUserAgent","countryName","VisitsFilterDropdown","botsSupported","orphanVisitsType","propsForOrphanVisitsTypeItem","DoughnutChartLegend","config","defaultColor","borderWidth","DoughnutChart","memo","chartRef","setChartRef","chartData","generateChartData","height","ChartCard","footer","DoughnutChartCard","PaginationDropdown","toggleClassName","ranges","Infinity","dropLabelIfHidden","highlightedData","HorizontalBarChart","highlightedStats","statsAreDefined","highlightedKey","stacked","indexAxis","determineHeight","renderChartComponent","customKey","toLowerIfString","toLower","pickKeyFromPair","pickValueFromPair","SortableBarChartCard","sortingItems","extraHeaderContent","withPagination","setItemsPerPage","determineCurrentPagePairs","firstPageLength","i","sortedPairs","pairs","sortBy","getSortedPairsForStats","sortedKeys","sortedHighlightedPairs","currentPageStats","currentPageHighlightedStats","highlightedPages","determineStats","sections","byTime","subPath","faCalendarAlt","byContext","faChartPie","byLocation","faMapMarkedAlt","faList","VisitsStats","visitsInfo","getVisits","cancelGetVisits","exportCsv","loadingLarge","progress","fallbackInterval","initialInterval","setInitialInterval","setDateRange","setHighlightedVisits","setHighlightedLabel","visitsFilter","setVisitsFilter","buildSectionUrl","normalizedVisits","mapLocations","highlightVisitsForProp","newSelectedBar","propEq","faFileDownload","striped","amount","exportVisits","cancelGetShortUrlVisits","doIntervalFallback","TagVisitsHeader","tagVisits","cancelGetTagVisits","OrphanVisitsHeader","cancelGetOrphanVisits","NonOrphanVisitsHeader","nonOrphanVisits","cancelGetNonOrphanVisits","ITEMS_PER_PAGE","isLastPage","calcProgress","getVisitsWithLoader","visitsLoader","lastVisitLoader","extraFinishActionData","actionMap","shouldCancel","loadVisitsInParallel","flatten","loadPagesBlocks","pagesBlocks","concat","loadVisits","pagesRange","fallbackToInterval","finish","lastVisitLoaderForLoader","loader","GET_SHORT_URL_VISITS_START","GET_SHORT_URL_VISITS_ERROR","GET_SHORT_URL_VISITS","GET_SHORT_URL_VISITS_LARGE","GET_SHORT_URL_VISITS_CANCEL","GET_SHORT_URL_VISITS_PROGRESS_CHANGED","GET_SHORT_URL_VISITS_FALLBACK_TO_INTERVAL","cancelLoad","newVisits","GET_TAG_VISITS_START","GET_TAG_VISITS_ERROR","GET_TAG_VISITS","GET_TAG_VISITS_LARGE","GET_TAG_VISITS_CANCEL","GET_TAG_VISITS_PROGRESS_CHANGED","GET_TAG_VISITS_FALLBACK_TO_INTERVAL","GET_ORPHAN_VISITS_START","GET_ORPHAN_VISITS_ERROR","GET_ORPHAN_VISITS","GET_ORPHAN_VISITS_LARGE","GET_ORPHAN_VISITS_CANCEL","GET_ORPHAN_VISITS_PROGRESS_CHANGED","GET_ORPHAN_VISITS_FALLBACK_TO_INTERVAL","matchesType","GET_NON_ORPHAN_VISITS_START","GET_NON_ORPHAN_VISITS_ERROR","GET_NON_ORPHAN_VISITS","GET_NON_ORPHAN_VISITS_LARGE","GET_NON_ORPHAN_VISITS_CANCEL","GET_NON_ORPHAN_VISITS_PROGRESS_CHANGED","GET_NON_ORPHAN_VISITS_FALLBACK_TO_INTERVAL","GET_OVERVIEW_START","GET_OVERVIEW_ERROR","GET_OVERVIEW","VisitsExporter","visitsParser","TagBullet","toComponentTag","searchMode","tagFilteringMode","tagComponent","onDelete","suggestions","suggestionComponent","allowNew","addOnBlur","minQueryLength","delimiters","suggestionsTransform","removedTagIndex","tagsCopy","splice","onAddition","TagCard","DeleteTagConfirmModal","EditTagModal","displayed","isEditModalOpen","toggleEdit","hasTitle","displayTitle","titleRef","scrollWidth","clientWidth","faLink","faEye","deleteTag","tagDelete","tagDeleted","deleting","doDelete","tagEdited","tagEdit","newTagName","setNewTagName","setColor","showColorPicker","toggleColorPicker","hideColorPicker","editing","saveTag","onClosed","colorIcon","hideArrow","popperClassName","TAGS_ORDERABLE_FIELDS","TagsModeDropdown","renderTitle","cardsIcon","TagsCards","TagsTable","filterTags","forceListTags","defaultMode","setMode","resolveSortedTags","filteredTags","shortUrlsCount","normalizedTags","sortedTags","renderContent","DELETE_TAG_START","DELETE_TAG_ERROR","DELETE_TAG","TAG_DELETED","EDIT_TAG_START","EDIT_TAG_ERROR","EDIT_TAG","TAG_EDITED","pick","LIST_TAGS_START","LIST_TAGS_ERROR","LIST_TAGS","FILTER_TAGS","renameTag","rejectTag","tagToReject","calculateVisitsPerTag","increase","tagStats","stateTags","displayedTag","setDisplayedTag","tagsCount","tagsGroups","group","TagsTableRow","pageFromQuery","showPaginator","isDropdownOpen","listTagsActionFactory","force","processedStats","factory","GET_MERCURE_INFO_START","GET_MERCURE_INFO_ERROR","GET_MERCURE_INFO","info","FormText","RealTimeUpdatesSettings","SettingsSections","Settings","RealTimeUpdates","ShortUrlCreation","UserInterface","Visits","Tags","tagFilteringModeText","ShortUrlCreationSettings","changeTagsFilteringMode","UserInterfaceSettings","faMoon","faSun","useDarkTheme","DateIntervalSelector","VisitsSettings","TagsSettings","ShortUrlsListSettings","replaceAuthorityFromUri","uri","newAuthority","schema","pathParts","normalizedPath","EDIT_DOMAIN_REDIRECTS","redirects","LIST_DOMAINS_START","LIST_DOMAINS_ERROR","LIST_DOMAINS","FILTER_DOMAINS","VALIDATE_DOMAIN","filteredDomains","replaceRedirectsOnDomain","replaceStatusOnDomain","defaultRedirects","filterDomains","checkDomainHealth","domainsList","inputDisplayed","showInput","hideInput","valueIsEmpty","unselectDomain","faUndo","trigger","isDefault","FormGroup","isLast","EditDomainRedirectsModal","baseUrlRedirect","setBaseUrlRedirect","regular404Redirect","setRegular404Redirect","invalidShortUrlRedirect","setInvalidShortUrlRedirect","DomainStatusIcon","matchesMobile","isMobile","setIsMobile","loadingStatusIcon","invalidIcon","autohide","Nr","fallback","DefaultDomain","defaultDomainIcon","DomainRow","authority","canEditDomain","forbiddenIcon","resolvedDefaultRedirects","column","APP_UPDATE_AVAILABLE","RESET_APP_UPDATE","appUpdateAvailable","resetAppUpdate","AppUpdateBanner","forceUpdate","isUpdating","setUpdating","reloadIcon","navigator","serviceWorker","getRegistrations","registrations","registration","waiting","postMessage","App","appUpdated","isHome","Bottle","container","mapActionService","actionName","serviceName","lazyService","propsFromState","actionServiceNames","reduxConnect","provideAppServices","provideCommonServices","provideApiServices","provideShortUrlsServices","provideServersServices","provideTagsServices","provideVisitsServices","provideUtilsServices","provideMercureServices","provideSettingsServices","provideDomainsServices","combineReducers","serversReducer","selectedServerReducer","shortUrlsListReducer","shortUrlCreationReducer","shortUrlDeletionReducer","shortUrlEditionReducer","shortUrlVisitsReducer","tagVisitsReducer","orphanVisitsReducer","nonOrphanVisitsReducer","shortUrlDetailReducer","tagsListReducer","tagDeleteReducer","tagEditReducer","mercureInfoReducer","settingsReducer","domainsListReducer","visitsOverviewReducer","appUpdatesReducer","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","localStorageConfig","states","namespace","namespaceSeparator","debounce","preloadedState","migrateDeprecatedSettings","load","store","createStore","reducers","applyMiddleware","ReduxThunk","isLocalhost","hostname","registerValidSW","swUrl","register","onupdatefound","installingWorker","installing","onstatechange","controller","log","onUpdate","onSuccess","L","Icon","Default","prototype","_getIconUrl","mergeOptions","iconRetinaUrl","marker2x","iconUrl","marker","shadowUrl","markerShadow","render","basename","getElementById","process","origin","fetch","contentType","indexOf","ready","unregister","checkValidServiceWorker","registerServiceWorker","versionToMatch","matchesMinVersion","compare","versionIsValidSemVer","defaultValue","createElement","visibility","appendChild","removeChild","blob","Blob"],"mappings":"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","file":"static/js/main.5083eae8.chunk.js","sourcesContent":["import { MAIN_COLOR } from '../../utils/theme';\n\nexport interface ShlinkLogoProps {\n color?: string;\n className?: string;\n}\n\nexport const ShlinkLogo = ({ color = MAIN_COLOR, className }: ShlinkLogoProps) => (\n \n \n \n \n \n \n \n \n);\n","import { FC, useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport Message from '../../utils/Message';\nimport { isNotFoundServer, SelectedServer } from '../data';\nimport { NoMenuLayout } from '../../common/NoMenuLayout';\n\ninterface WithSelectedServerProps {\n selectServer: (serverId: string) => void;\n selectedServer: SelectedServer;\n}\n\nexport function withSelectedServer(WrappedComponent: FC, ServerError: FC) {\n return (props: WithSelectedServerProps & T) => {\n const params = useParams<{ serverId: string }>();\n const { selectServer, selectedServer } = props;\n\n useEffect(() => {\n params.serverId && selectServer(params.serverId);\n }, [ params.serverId ]);\n\n if (!selectedServer) {\n return (\n \n \n \n );\n }\n\n if (isNotFoundServer(selectedServer)) {\n return ;\n }\n\n return ;\n };\n}\n","import { FC } from 'react';\nimport { Link } from 'react-router-dom';\nimport { SimpleCard } from '../utils/SimpleCard';\n\ninterface NotFoundProps {\n to?: string;\n}\n\nconst NotFound: FC = ({ to = '/', children = 'Home' }) => (\n
\n \n

Oops! We could not find requested route.

\n

\n Use your browser's back button to navigate to the page you have previously come from, or just press this\n button.\n

\n
\n {children}\n
\n
\n);\n\nexport default NotFound;\n","import { FC } from 'react';\nimport { ListGroup, ListGroupItem } from 'reactstrap';\nimport { Link } from 'react-router-dom';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronRight as chevronIcon } from '@fortawesome/free-solid-svg-icons';\nimport { ServerWithId } from './data';\nimport './ServersListGroup.scss';\n\ninterface ServersListGroupProps {\n servers: ServerWithId[];\n embedded?: boolean;\n}\n\nconst ServerListItem = ({ id, name }: { id: string; name: string }) => (\n \n {name}\n \n \n);\n\nconst ServersListGroup: FC = ({ servers, children, embedded = false }) => (\n <>\n {children &&
{children}
}\n {servers.length > 0 && (\n \n {servers.map(({ id, name }) => )}\n \n )}\n \n);\n\nexport default ServersListGroup;\n","import { useState, useRef, EffectCallback, DependencyList, useEffect } from 'react';\nimport { useSwipeable as useReactSwipeable } from 'react-swipeable';\nimport { useNavigate } from 'react-router-dom';\nimport { parseQuery, stringifyQuery } from './query';\n\nconst DEFAULT_DELAY = 2000;\n\nexport type StateFlagTimeout = (initialValue?: boolean, delay?: number) => [ boolean, () => void ];\n\nexport const useStateFlagTimeout = (\n setTimeout: (callback: Function, timeout: number) => number,\n clearTimeout: (timer: number) => void,\n): StateFlagTimeout => (initialValue = false, delay = DEFAULT_DELAY) => {\n const [ flag, setFlag ] = useState(initialValue);\n const timeout = useRef(undefined);\n const callback = () => {\n setFlag(!initialValue);\n\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n\n timeout.current = setTimeout(() => setFlag(initialValue), delay);\n };\n\n return [ flag, callback ];\n};\n\ntype ToggleResult = [ boolean, () => void, () => void, () => void ];\n\nexport const useToggle = (initialValue = false): ToggleResult => {\n const [ flag, setFlag ] = useState(initialValue);\n\n return [ flag, () => setFlag(!flag), () => setFlag(true), () => setFlag(false) ];\n};\n\nexport const useSwipeable = (showSidebar: () => void, hideSidebar: () => void) => {\n const swipeMenuIfNoModalExists = (callback: () => void) => (e: any) => {\n const swippedOnVisitsTable = (e.event.composedPath() as HTMLElement[]).some( // eslint-disable-line @typescript-eslint/no-unsafe-call\n ({ classList }) => classList?.contains('visits-table'),\n );\n\n if (swippedOnVisitsTable || document.querySelector('.modal')) {\n return;\n }\n\n callback();\n };\n\n return useReactSwipeable({\n delta: 40,\n onSwipedLeft: swipeMenuIfNoModalExists(hideSidebar),\n onSwipedRight: swipeMenuIfNoModalExists(showSidebar),\n });\n};\n\nexport const useQueryState = (paramName: string, initialState: T): [ T, (newValue: T) => void ] => {\n const [ value, setValue ] = useState(initialState);\n const setValueWithLocation = (value: T) => {\n const { location, history } = window;\n const query = parseQuery(location.search);\n\n query[paramName] = value;\n history.pushState(null, '', `${location.pathname}?${stringifyQuery(query)}`);\n setValue(value);\n };\n\n return [ value, setValueWithLocation ];\n};\n\nexport const useEffectExceptFirstTime = (callback: EffectCallback, deps: DependencyList): void => {\n const isFirstLoad = useRef(true);\n\n useEffect(() => {\n !isFirstLoad.current && callback();\n isFirstLoad.current = false;\n }, deps);\n};\n\nexport const useGoBack = () => {\n const navigate = useNavigate();\n\n return () => navigate(-1);\n};\n","import axios from 'axios';\nimport Bottle from 'bottlejs';\nimport ScrollToTop from '../ScrollToTop';\nimport MainHeader from '../MainHeader';\nimport Home from '../Home';\nimport MenuLayout from '../MenuLayout';\nimport AsideMenu from '../AsideMenu';\nimport ErrorHandler from '../ErrorHandler';\nimport ShlinkVersionsContainer from '../ShlinkVersionsContainer';\nimport { ConnectDecorator } from '../../container/types';\nimport { withoutSelectedServer } from '../../servers/helpers/withoutSelectedServer';\nimport { ImageDownloader } from './ImageDownloader';\n\nconst provideServices = (bottle: Bottle, connect: ConnectDecorator) => {\n // Services\n bottle.constant('window', (global as any).window);\n bottle.constant('console', global.console);\n bottle.constant('axios', axios);\n\n bottle.service('ImageDownloader', ImageDownloader, 'axios', 'window');\n\n // Components\n bottle.serviceFactory('ScrollToTop', ScrollToTop);\n\n bottle.serviceFactory('MainHeader', MainHeader, 'ServersDropdown');\n\n bottle.serviceFactory('Home', () => Home);\n bottle.decorator('Home', withoutSelectedServer);\n bottle.decorator('Home', connect([ 'servers' ], [ 'resetSelectedServer' ]));\n\n bottle.serviceFactory(\n 'MenuLayout',\n MenuLayout,\n 'TagsList',\n 'ShortUrlsList',\n 'AsideMenu',\n 'CreateShortUrl',\n 'ShortUrlVisits',\n 'TagVisits',\n 'OrphanVisits',\n 'NonOrphanVisits',\n 'ServerError',\n 'Overview',\n 'EditShortUrl',\n 'ManageDomains',\n );\n bottle.decorator('MenuLayout', connect([ 'selectedServer' ], [ 'selectServer' ]));\n\n bottle.serviceFactory('AsideMenu', AsideMenu, 'DeleteServerButton');\n\n bottle.serviceFactory('ShlinkVersionsContainer', () => ShlinkVersionsContainer);\n bottle.decorator('ShlinkVersionsContainer', connect([ 'selectedServer' ]));\n\n bottle.serviceFactory('ErrorHandler', ErrorHandler, 'window', 'console');\n};\n\nexport default provideServices;\n","import { FC, useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nconst ScrollToTop = (): FC => ({ children }) => {\n const location = useLocation();\n\n useEffect(() => {\n scrollTo(0, 0);\n }, [ location ]);\n\n return <>{children};\n};\n\nexport default ScrollToTop;\n","import { Component, ReactNode } from 'react';\nimport { Button } from 'reactstrap';\nimport { SimpleCard } from '../utils/SimpleCard';\n\ninterface ErrorHandlerState {\n hasError: boolean;\n}\n\nconst ErrorHandler = (\n { location }: Window,\n { error }: Console,\n) => class ErrorHandler extends Component {\n public constructor(props: object) {\n super(props);\n this.state = { hasError: false };\n }\n\n public static getDerivedStateFromError(): ErrorHandlerState {\n return { hasError: true };\n }\n\n public componentDidCatch(e: Error): void {\n if (process.env.NODE_ENV !== 'development') {\n error(e);\n }\n }\n\n public render(): ReactNode {\n if (this.state.hasError) {\n return (\n
\n \n

Oops! This is awkward :S

\n

It seems that something went wrong. Try refreshing the page or just click this button.

\n
\n \n
\n
\n );\n }\n\n return this.props.children;\n }\n};\n\nexport default ErrorHandler;\n","import { AxiosInstance } from 'axios';\nimport { saveUrl } from '../../utils/helpers/files';\n\nexport class ImageDownloader {\n public constructor(private readonly axios: AxiosInstance, private readonly window: Window) {}\n\n public async saveImage(imgUrl: string, filename: string): Promise {\n const { data } = await this.axios.get(imgUrl, { responseType: 'blob' });\n const url = URL.createObjectURL(data);\n\n saveUrl(this.window, url, filename);\n }\n}\n","import Bottle from 'bottlejs';\nimport { useStateFlagTimeout } from '../helpers/hooks';\nimport LocalStorage from './LocalStorage';\nimport ColorGenerator from './ColorGenerator';\n\nconst provideServices = (bottle: Bottle) => {\n bottle.constant('localStorage', (global as any).localStorage);\n bottle.service('Storage', LocalStorage, 'localStorage');\n bottle.service('ColorGenerator', ColorGenerator, 'Storage');\n\n bottle.constant('setTimeout', global.setTimeout);\n bottle.constant('clearTimeout', global.clearTimeout);\n bottle.serviceFactory('useStateFlagTimeout', useStateFlagTimeout, 'setTimeout', 'clearTimeout');\n};\n\nexport default provideServices;\n","const PREFIX = 'shlink';\nconst buildPath = (path: string) => `${PREFIX}.${path}`;\n\nexport default class LocalStorage {\n public constructor(private readonly localStorage: Storage) {}\n\n public readonly get = (key: string): T | undefined => {\n const item = this.localStorage.getItem(buildPath(key));\n\n return item ? JSON.parse(item) as T : undefined;\n };\n\n public readonly set = (key: string, value: any) => this.localStorage.setItem(buildPath(key), JSON.stringify(value));\n}\n","import { isNil } from 'ramda';\nimport { rangeOf } from '../utils';\nimport LocalStorage from './LocalStorage';\n\nconst HEX_COLOR_LENGTH = 6;\nconst HEX_DIGITS = '0123456789ABCDEF';\nconst LIGHTNESS_BREAKPOINT = 128;\n\nconst { floor, random, sqrt, round } = Math;\nconst buildRandomColor = () =>\n `#${rangeOf(HEX_COLOR_LENGTH, () => HEX_DIGITS[floor(random() * HEX_DIGITS.length)]).join('')}`;\nconst normalizeKey = (key: string) => key.toLowerCase().trim();\nconst hexColorToRgbArray = (colorHex: string): number[] =>\n (colorHex.match(/../g) ?? []).map((hex) => parseInt(hex, 16) || 0);\n// HSP by Darel Rex Finley https://alienryderflex.com/hsp.html\nconst perceivedLightness = (r = 0, g = 0, b = 0) => round(sqrt(0.299 * r ** 2 + 0.587 * g ** 2 + 0.114 * b ** 2));\n\nexport default class ColorGenerator {\n private readonly colors: Record;\n private readonly lights: Record;\n\n public constructor(private readonly storage: LocalStorage) {\n this.colors = this.storage.get>('colors') ?? {};\n this.lights = {};\n }\n\n public readonly getColorForKey = (key: string) => {\n const normalizedKey = normalizeKey(key);\n const color = this.colors[normalizedKey];\n\n // If a color has not been set yet, generate a random one and save it\n if (!color) {\n return this.setColorForKey(normalizedKey, buildRandomColor());\n }\n\n return color;\n };\n\n public readonly setColorForKey = (key: string, color: string) => {\n const normalizedKey = normalizeKey(key);\n\n this.colors[normalizedKey] = color;\n this.storage.set('colors', this.colors);\n\n return color;\n };\n\n public readonly isColorLightForKey = (key: string): boolean => {\n const colorHex = this.getColorForKey(key).substring(1);\n\n if (isNil(this.lights[colorHex])) {\n const rgb = hexColorToRgbArray(colorHex);\n\n this.lights[colorHex] = perceivedLightness(...rgb) >= LIGHTNESS_BREAKPOINT;\n }\n\n return this.lights[colorHex];\n };\n}\n","import { omit } from 'ramda';\nimport { SemVer } from '../../utils/helpers/version';\n\nexport interface ServerData {\n name: string;\n url: string;\n apiKey: string;\n}\n\nexport interface ServerWithId extends ServerData {\n id: string;\n autoConnect?: boolean;\n}\n\nexport interface ReachableServer extends ServerWithId {\n version: SemVer;\n printableVersion: string;\n}\n\nexport interface NonReachableServer extends ServerWithId {\n serverNotReachable: true;\n}\n\nexport interface NotFoundServer {\n serverNotFound: true;\n}\n\nexport type RegularServer = ReachableServer | NonReachableServer;\n\nexport type SelectedServer = RegularServer | NotFoundServer | null;\n\nexport type ServersMap = Record;\n\nexport const hasServerData = (server: SelectedServer | ServerData): server is ServerData =>\n !!(server as ServerData)?.url && !!(server as ServerData)?.apiKey;\n\nexport const isServerWithId = (server: SelectedServer | ServerWithId): server is ServerWithId =>\n !!server?.hasOwnProperty('id');\n\nexport const isReachableServer = (server: SelectedServer): server is ReachableServer =>\n !!server?.hasOwnProperty('version');\n\nexport const isNotFoundServer = (server: SelectedServer): server is NotFoundServer =>\n !!server?.hasOwnProperty('serverNotFound');\n\nexport const getServerId = (server: SelectedServer) => isServerWithId(server) ? server.id : '';\n\nexport const serverWithIdToServerData = (server: ServerWithId): ServerData =>\n omit([ 'id', 'autoConnect' ], server);\n","import { pipe } from 'ramda';\nimport { ExternalLink } from 'react-external-link';\nimport { versionToPrintable, versionToSemVer } from '../utils/helpers/version';\nimport { isReachableServer } from '../servers/data';\nimport { ShlinkVersionsContainerProps } from './ShlinkVersionsContainer';\n\nconst SHLINK_WEB_CLIENT_VERSION = '%_VERSION_%';\nconst normalizeVersion = pipe(versionToSemVer(), versionToPrintable);\n\nexport interface ShlinkVersionsProps extends ShlinkVersionsContainerProps {\n clientVersion?: string;\n}\n\nconst VersionLink = ({ project, version }: { project: 'shlink' | 'shlink-web-client'; version: string }) => (\n \n {version}\n \n);\n\nconst ShlinkVersions = ({ selectedServer, clientVersion = SHLINK_WEB_CLIENT_VERSION }: ShlinkVersionsProps) => {\n const normalizedClientVersion = normalizeVersion(clientVersion);\n\n return (\n \n {isReachableServer(selectedServer) &&\n <>Server: - \n }\n Client: \n \n );\n};\n\nexport default ShlinkVersions;\n","import classNames from 'classnames';\nimport { isReachableServer, SelectedServer } from '../servers/data';\nimport ShlinkVersions from './ShlinkVersions';\nimport './ShlinkVersionsContainer.scss';\n\nexport interface ShlinkVersionsContainerProps {\n selectedServer: SelectedServer;\n}\n\nconst ShlinkVersionsContainer = ({ selectedServer }: ShlinkVersionsContainerProps) => {\n const classes = classNames('text-center', {\n 'shlink-versions-container--with-server': isReachableServer(selectedServer),\n });\n\n return (\n
\n \n
\n );\n};\n\nexport default ShlinkVersionsContainer;\n","import { faChevronDown as arrowIcon, faCogs as cogsIcon } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { FC, useEffect } from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport { Collapse, Nav, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink } from 'reactstrap';\nimport classNames from 'classnames';\nimport { useToggle } from '../utils/helpers/hooks';\nimport { ShlinkLogo } from './img/ShlinkLogo';\nimport './MainHeader.scss';\n\nconst MainHeader = (ServersDropdown: FC) => () => {\n const [ isOpen, toggleOpen, , close ] = useToggle();\n const location = useLocation();\n const { pathname } = location;\n\n useEffect(close, [ location ]);\n\n const settingsPath = '/settings';\n const toggleClass = classNames('main-header__toggle-icon', { 'main-header__toggle-icon--opened': isOpen });\n\n return (\n \n \n Shlink\n \n\n \n \n \n\n \n \n \n \n );\n};\n\nexport default MainHeader;\n","import { useEffect } from 'react';\nimport { isEmpty, values } from 'ramda';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { Card, Row } from 'reactstrap';\nimport { ExternalLink } from 'react-external-link';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faExternalLinkAlt, faPlus } from '@fortawesome/free-solid-svg-icons';\nimport ServersListGroup from '../servers/ServersListGroup';\nimport { ServersMap } from '../servers/data';\nimport { ShlinkLogo } from './img/ShlinkLogo';\nimport './Home.scss';\n\nexport interface HomeProps {\n servers: ServersMap;\n}\n\nconst Home = ({ servers }: HomeProps) => {\n const navigate = useNavigate();\n const serversList = values(servers);\n const hasServers = !isEmpty(serversList);\n\n useEffect(() => {\n // Try to redirect to the first server marked as auto-connect\n const autoConnectServer = serversList.find(({ autoConnect }) => autoConnect);\n\n autoConnectServer && navigate(`/server/${autoConnectServer.id}`);\n }, []);\n\n return (\n
\n \n \n
\n
\n
\n \n
\n
\n
\n
\n
\n

Welcome!

\n
\n \n {!hasServers && (\n
\n

This application will help you manage your Shlink servers.

\n

\n \n Add a server\n \n

\n

\n \n \n Learn more about Shlink \n \n \n

\n
\n )}\n
\n
\n
\n
\n
\n );\n};\n\nexport default Home;\n","import { FC, useEffect } from 'react';\nimport { Navigate, Route, Routes, useLocation } from 'react-router-dom';\nimport { faBars as burgerIcon } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport classNames from 'classnames';\nimport { withSelectedServer } from '../servers/helpers/withSelectedServer';\nimport { useSwipeable, useToggle } from '../utils/helpers/hooks';\nimport { supportsDomainRedirects, supportsNonOrphanVisits, supportsOrphanVisits } from '../utils/helpers/features';\nimport { isReachableServer } from '../servers/data';\nimport NotFound from './NotFound';\nimport { AsideMenuProps } from './AsideMenu';\nimport './MenuLayout.scss';\n\nconst MenuLayout = (\n TagsList: FC,\n ShortUrlsList: FC,\n AsideMenu: FC,\n CreateShortUrl: FC,\n ShortUrlVisits: FC,\n TagVisits: FC,\n OrphanVisits: FC,\n NonOrphanVisits: FC,\n ServerError: FC,\n Overview: FC,\n EditShortUrl: FC,\n ManageDomains: FC,\n) => withSelectedServer(({ selectedServer }) => {\n const location = useLocation();\n const [ sidebarVisible, toggleSidebar, showSidebar, hideSidebar ] = useToggle();\n\n useEffect(() => hideSidebar(), [ location ]);\n\n if (!isReachableServer(selectedServer)) {\n return ;\n }\n\n const addOrphanVisitsRoute = supportsOrphanVisits(selectedServer);\n const addNonOrphanVisitsRoute = supportsNonOrphanVisits(selectedServer);\n const addManageDomainsRoute = supportsDomainRedirects(selectedServer);\n const burgerClasses = classNames('menu-layout__burger-icon', { 'menu-layout__burger-icon--active': sidebarVisible });\n const swipeableProps = useSwipeable(showSidebar, hideSidebar);\n\n return (\n <>\n \n\n
\n
\n \n
hideSidebar()}>\n
\n \n } />\n } />\n } />\n } />\n } />\n } />\n } />\n {addOrphanVisitsRoute && } />}\n {addNonOrphanVisitsRoute && } />}\n } />\n {addManageDomainsRoute && } />}\n List short URLs}\n />\n \n
\n
\n
\n
\n \n );\n}, ServerError);\n\nexport default MenuLayout;\n","import {\n faList as listIcon,\n faLink as createIcon,\n faTags as tagsIcon,\n faPen as editIcon,\n faHome as overviewIcon,\n faGlobe as domainsIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { FC } from 'react';\nimport { NavLink, NavLinkProps, useLocation } from 'react-router-dom';\nimport classNames from 'classnames';\nimport { DeleteServerButtonProps } from '../servers/DeleteServerButton';\nimport { isServerWithId, SelectedServer } from '../servers/data';\nimport { supportsDomainRedirects } from '../utils/helpers/features';\nimport './AsideMenu.scss';\n\nexport interface AsideMenuProps {\n selectedServer: SelectedServer;\n className?: string;\n showOnMobile?: boolean;\n}\n\ninterface AsideMenuItemProps extends NavLinkProps {\n to: string;\n}\n\nconst AsideMenuItem: FC = ({ children, to, className, ...rest }) => (\n classNames('aside-menu__item', className, { 'aside-menu__item--selected': isActive })}\n to={to}\n {...rest}\n >\n {children}\n \n);\n\nconst AsideMenu = (DeleteServerButton: FC) => (\n { selectedServer, showOnMobile = false }: AsideMenuProps,\n) => {\n const hasId = isServerWithId(selectedServer);\n const serverId = hasId ? selectedServer.id : '';\n const { pathname } = useLocation();\n const addManageDomainsLink = supportsDomainRedirects(selectedServer);\n const asideClass = classNames('aside-menu', {\n 'aside-menu--hidden': !showOnMobile,\n });\n const buildPath = (suffix: string) => `/server/${serverId}${suffix}`;\n\n return (\n \n );\n};\n\nexport default AsideMenu;\n","import { isEmpty, isNil, pipe, range } from 'ramda';\nimport { SyntheticEvent } from 'react';\n\nexport const rangeOf = (size: number, mappingFn: (value: number) => T, startAt = 1): T[] =>\n range(startAt, size + 1).map(mappingFn);\n\nexport type Empty = null | undefined | '' | never[];\n\nexport const hasValue = (value: T | Empty): value is T => !isNil(value) && !isEmpty(value);\n\nexport const handleEventPreventingDefault = (handler: () => T) => pipe(\n (e: SyntheticEvent) => e.preventDefault(),\n handler,\n);\n\nexport type Nullable = {\n [P in keyof T]: T[P] | null\n};\n\ntype Optional = T | null | undefined;\n\nexport type OptionalString = Optional;\n\nexport type RecursivePartial = {\n [P in keyof T]?: RecursivePartial;\n};\n\nexport const nonEmptyValueOrNull = (value: T): T | null => isEmpty(value) ? null : value;\n\nexport const capitalize = (value: T): string => `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n","import { Card, CardBody, CardHeader, CardProps } from 'reactstrap';\nimport { ReactNode } from 'react';\n\ninterface SimpleCardProps extends Omit {\n title?: ReactNode;\n bodyClassName?: string;\n}\n\nexport const SimpleCard = ({ title, children, bodyClassName, ...rest }: SimpleCardProps) => (\n \n {title && {title}}\n {children}\n \n);\n","import { isReachableServer, SelectedServer } from '../../servers/data';\nimport { versionMatch, Versions } from './version';\n\nconst serverMatchesVersions = (versions: Versions) => (selectedServer: SelectedServer): boolean =>\n isReachableServer(selectedServer) && versionMatch(selectedServer.version, versions);\n\nexport const supportsQrCodeSizeInQuery = serverMatchesVersions({ minVersion: '2.5.0' });\n\nexport const supportsShortUrlTitle = serverMatchesVersions({ minVersion: '2.6.0' });\n\nexport const supportsOrphanVisits = supportsShortUrlTitle;\n\nexport const supportsQrCodeMargin = supportsShortUrlTitle;\n\nexport const supportsTagsInPatch = supportsShortUrlTitle;\n\nexport const supportsBotVisits = serverMatchesVersions({ minVersion: '2.7.0' });\n\nexport const supportsCrawlableVisits = supportsBotVisits;\n\nexport const supportsQrErrorCorrection = serverMatchesVersions({ minVersion: '2.8.0' });\n\nexport const supportsDomainRedirects = supportsQrErrorCorrection;\n\nexport const supportsForwardQuery = serverMatchesVersions({ minVersion: '2.9.0' });\n\nexport const supportsDefaultDomainRedirectsEdition = serverMatchesVersions({ minVersion: '2.10.0' });\n\nexport const supportsNonOrphanVisits = serverMatchesVersions({ minVersion: '3.0.0' });\n\nexport const supportsAllTagsFiltering = supportsNonOrphanVisits;\n","export const MAIN_COLOR = '#4696e5';\n\nexport const MAIN_COLOR_ALPHA = 'rgba(70, 150, 229, 0.4)';\n\nexport const HIGHLIGHTED_COLOR = '#f77f28';\n\nexport const HIGHLIGHTED_COLOR_ALPHA = 'rgba(247, 127, 40, 0.4)';\n\nexport const PRIMARY_LIGHT_COLOR = 'white';\n\nexport const PRIMARY_DARK_COLOR = '#161b22';\n\nexport type Theme = 'dark' | 'light';\n\nexport const changeThemeInMarkup = (theme: Theme) =>\n document.getElementsByTagName('html')?.[0]?.setAttribute('data-theme', theme);\n\nexport const isDarkThemeEnabled = (): boolean =>\n document.getElementsByTagName('html')?.[0]?.getAttribute('data-theme') === 'dark';\n","import qs from 'qs';\n\nexport const parseQuery = (search: string) => qs.parse(search, { ignoreQueryPrefix: true }) as unknown as T;\n\nexport const stringifyQuery = (query: any): string => qs.stringify(query, { arrayFormat: 'brackets' });\n","import { FC } from 'react';\nimport { Card, Row } from 'reactstrap';\nimport classNames from 'classnames';\nimport { faCircleNotch as preloader } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\ntype MessageType = 'default' | 'error';\n\nconst getClassForType = (type: MessageType) => {\n const map: Record = {\n error: 'border-danger',\n default: '',\n };\n\n return map[type];\n};\nconst getTextClassForType = (type: MessageType) => {\n const map: Record = {\n error: 'text-danger',\n default: 'text-muted',\n };\n\n return map[type];\n};\n\nexport interface MessageProps {\n className?: string;\n loading?: boolean;\n fullWidth?: boolean;\n type?: MessageType;\n}\n\nconst Message: FC = ({ className, children, loading = false, type = 'default', fullWidth = false }) => {\n const classes = classNames({\n 'col-md-12': fullWidth,\n 'col-md-10 offset-md-1': !fullWidth,\n });\n\n return (\n \n
\n \n

\n {loading && }\n {loading && {children ?? 'Loading...'}}\n {!loading && children}\n

\n
\n
\n
\n );\n};\n\nexport default Message;\n","import { useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSearch as searchIcon } from '@fortawesome/free-solid-svg-icons';\nimport classNames from 'classnames';\nimport './SearchField.scss';\n\nconst DEFAULT_SEARCH_INTERVAL = 500;\nlet timer: NodeJS.Timeout | null;\n\ninterface SearchFieldProps {\n onChange: (value: string) => void;\n className?: string;\n large?: boolean;\n noBorder?: boolean;\n initialValue?: string;\n}\n\nconst SearchField = ({ onChange, className, large = true, noBorder = false, initialValue = '' }: SearchFieldProps) => {\n const [ searchTerm, setSearchTerm ] = useState(initialValue);\n\n const resetTimer = () => {\n timer && clearTimeout(timer);\n timer = null;\n };\n const searchTermChanged = (newSearchTerm: string, timeout = DEFAULT_SEARCH_INTERVAL) => {\n setSearchTerm(newSearchTerm);\n\n resetTimer();\n\n timer = setTimeout(() => {\n onChange(newSearchTerm);\n resetTimer();\n }, timeout);\n };\n\n return (\n
\n searchTermChanged(e.target.value)}\n />\n \n
\n \n );\n};\n\nexport default SearchField;\n","export type OrderDir = 'ASC' | 'DESC' | undefined;\n\nexport interface Order {\n field?: Fields;\n dir?: OrderDir;\n}\n\nexport const determineOrderDir = (\n currentField: T,\n newField?: T,\n currentOrderDir?: OrderDir,\n): OrderDir => {\n if (currentField !== newField) {\n return 'ASC';\n }\n\n const newOrderMap: Record<'ASC' | 'DESC', OrderDir> = {\n ASC: 'DESC',\n DESC: undefined,\n };\n\n return currentOrderDir ? newOrderMap[currentOrderDir] : 'ASC';\n};\n\nexport const sortList = (list: List[], { field, dir }: Order>) => !field || !dir\n ? list\n : list.sort((a, b) => {\n const greaterThan = dir === 'ASC' ? 1 : -1;\n const smallerThan = dir === 'ASC' ? -1 : 1;\n\n return a[field] > b[field] ? greaterThan : smallerThan;\n });\n\nexport const orderToString = (order: Order): string | undefined =>\n order.dir ? `${order.field}-${order.dir}` : undefined;\n\nexport const stringToOrder = (order: string): Order => {\n const [ field, dir ] = order.split('-') as [ T | undefined, OrderDir | undefined ];\n\n return { field, dir };\n};\n","import { isEmpty, isNil, reject } from 'ramda';\nimport { AxiosInstance, AxiosResponse, Method } from 'axios';\nimport { ShortUrl, ShortUrlData } from '../../short-urls/data';\nimport { OptionalString } from '../../utils/utils';\nimport {\n ShlinkHealth,\n ShlinkMercureInfo,\n ShlinkShortUrlsResponse,\n ShlinkTags,\n ShlinkTagsResponse,\n ShlinkVisits,\n ShlinkVisitsParams,\n ShlinkShortUrlData,\n ShlinkDomainsResponse,\n ShlinkVisitsOverview,\n ShlinkEditDomainRedirects,\n ShlinkDomainRedirects,\n ShlinkShortUrlsListParams,\n ShlinkShortUrlsListNormalizedParams,\n} from '../types';\nimport { stringifyQuery } from '../../utils/helpers/query';\nimport { orderToString } from '../../utils/helpers/ordering';\n\nconst buildShlinkBaseUrl = (url: string) => url ? `${url}/rest/v2` : '';\nconst rejectNilProps = reject(isNil);\nconst normalizeOrderByInParams = (params: ShlinkShortUrlsListParams): ShlinkShortUrlsListNormalizedParams => {\n const { orderBy = {}, ...rest } = params;\n\n return { ...rest, orderBy: orderToString(orderBy) };\n};\n\nexport default class ShlinkApiClient {\n public constructor(\n private readonly axios: AxiosInstance,\n private readonly baseUrl: string,\n private readonly apiKey: string,\n ) {\n }\n\n public readonly listShortUrls = async (params: ShlinkShortUrlsListParams = {}): Promise =>\n this.performRequest<{ shortUrls: ShlinkShortUrlsResponse }>('/short-urls', 'GET', normalizeOrderByInParams(params))\n .then(({ data }) => data.shortUrls);\n\n public readonly createShortUrl = async (options: ShortUrlData): Promise => {\n const filteredOptions = reject((value) => isEmpty(value) || isNil(value), options as any);\n\n return this.performRequest('/short-urls', 'POST', {}, filteredOptions)\n .then((resp) => resp.data);\n };\n\n public readonly getShortUrlVisits = async (shortCode: string, query?: ShlinkVisitsParams): Promise =>\n this.performRequest<{ visits: ShlinkVisits }>(`/short-urls/${shortCode}/visits`, 'GET', query)\n .then(({ data }) => data.visits);\n\n public readonly getTagVisits = async (tag: string, query?: Omit): Promise =>\n this.performRequest<{ visits: ShlinkVisits }>(`/tags/${tag}/visits`, 'GET', query)\n .then(({ data }) => data.visits);\n\n public readonly getOrphanVisits = async (query?: Omit): Promise =>\n this.performRequest<{ visits: ShlinkVisits }>('/visits/orphan', 'GET', query)\n .then(({ data }) => data.visits);\n\n public readonly getNonOrphanVisits = async (query?: Omit): Promise =>\n this.performRequest<{ visits: ShlinkVisits }>('/visits/non-orphan', 'GET', query)\n .then(({ data }) => data.visits);\n\n public readonly getVisitsOverview = async (): Promise =>\n this.performRequest<{ visits: ShlinkVisitsOverview }>('/visits', 'GET')\n .then(({ data }) => data.visits);\n\n public readonly getShortUrl = async (shortCode: string, domain?: OptionalString): Promise =>\n this.performRequest(`/short-urls/${shortCode}`, 'GET', { domain })\n .then(({ data }) => data);\n\n public readonly deleteShortUrl = async (shortCode: string, domain?: OptionalString): Promise =>\n this.performRequest(`/short-urls/${shortCode}`, 'DELETE', { domain })\n .then(() => {});\n\n // eslint-disable-next-line valid-jsdoc\n /**\n * @deprecated. If using Shlink 2.6.0 or greater, use updateShortUrl instead\n */\n public readonly updateShortUrlTags = async (\n shortCode: string,\n domain: OptionalString,\n tags: string[],\n ): Promise =>\n this.performRequest<{ tags: string[] }>(`/short-urls/${shortCode}/tags`, 'PUT', { domain }, { tags })\n .then(({ data }) => data.tags);\n\n public readonly updateShortUrl = async (\n shortCode: string,\n domain: OptionalString,\n data: ShlinkShortUrlData,\n ): Promise =>\n this.performRequest(`/short-urls/${shortCode}`, 'PATCH', { domain }, data)\n .then(({ data }) => data);\n\n public readonly listTags = async (): Promise =>\n this.performRequest<{ tags: ShlinkTagsResponse }>('/tags', 'GET', { withStats: 'true' })\n .then((resp) => resp.data.tags)\n .then(({ data, stats }) => ({ tags: data, stats }));\n\n public readonly deleteTags = async (tags: string[]): Promise<{ tags: string[] }> =>\n this.performRequest('/tags', 'DELETE', { tags })\n .then(() => ({ tags }));\n\n public readonly editTag = async (oldName: string, newName: string): Promise<{ oldName: string; newName: string }> =>\n this.performRequest('/tags', 'PUT', {}, { oldName, newName })\n .then(() => ({ oldName, newName }));\n\n public readonly health = async (): Promise =>\n this.performRequest('/health', 'GET')\n .then((resp) => resp.data);\n\n public readonly mercureInfo = async (): Promise =>\n this.performRequest('/mercure-info', 'GET')\n .then((resp) => resp.data);\n\n public readonly listDomains = async (): Promise =>\n this.performRequest<{ domains: ShlinkDomainsResponse }>('/domains', 'GET').then(({ data }) => data.domains);\n\n public readonly editDomainRedirects = async (\n domainRedirects: ShlinkEditDomainRedirects,\n ): Promise =>\n this.performRequest('/domains/redirects', 'PATCH', {}, domainRedirects).then(({ data }) => data);\n\n private readonly performRequest = async (url: string, method: Method = 'GET', query = {}, body = {}): Promise> =>\n this.axios({\n method,\n url: `${buildShlinkBaseUrl(this.baseUrl)}${url}`,\n headers: { 'X-Api-Key': this.apiKey },\n params: rejectNilProps(query),\n data: body,\n paramsSerializer: stringifyQuery,\n });\n}\n","import { AxiosInstance } from 'axios';\nimport { prop } from 'ramda';\nimport { hasServerData, SelectedServer, ServerWithId } from '../../servers/data';\nimport { GetState } from '../../container/types';\nimport ShlinkApiClient from './ShlinkApiClient';\n\nconst apiClients: Record = {};\n\nconst isGetState = (getStateOrSelectedServer: GetState | ServerWithId): getStateOrSelectedServer is GetState =>\n typeof getStateOrSelectedServer === 'function';\nconst getSelectedServerFromState = (getState: GetState): SelectedServer => prop('selectedServer', getState());\n\nexport type ShlinkApiClientBuilder = (getStateOrSelectedServer: GetState | ServerWithId) => ShlinkApiClient;\n\nconst buildShlinkApiClient = (axios: AxiosInstance): ShlinkApiClientBuilder => (\n getStateOrSelectedServer: GetState | ServerWithId,\n) => {\n const server = isGetState(getStateOrSelectedServer)\n ? getSelectedServerFromState(getStateOrSelectedServer)\n : getStateOrSelectedServer;\n\n if (!hasServerData(server)) {\n throw new Error('There\\'s no selected server or it is not found');\n }\n\n const { url, apiKey } = server;\n const clientKey = `${url}_${apiKey}`;\n\n if (!apiClients[clientKey]) {\n apiClients[clientKey] = new ShlinkApiClient(axios, url, apiKey);\n }\n\n return apiClients[clientKey];\n};\n\nexport default buildShlinkApiClient;\n","import Bottle from 'bottlejs';\nimport buildShlinkApiClient from './ShlinkApiClientBuilder';\n\nconst provideServices = (bottle: Bottle) => {\n bottle.serviceFactory('buildShlinkApiClient', buildShlinkApiClient, 'axios');\n};\n\nexport default provideServices;\n","import { FC, MouseEventHandler } from 'react';\nimport classNames from 'classnames';\nimport ColorGenerator from '../../utils/services/ColorGenerator';\nimport './Tag.scss';\n\ninterface TagProps {\n colorGenerator: ColorGenerator;\n text: string;\n className?: string;\n clearable?: boolean;\n onClick?: MouseEventHandler;\n onClose?: MouseEventHandler;\n}\n\nconst Tag: FC = ({ text, children, clearable, className = '', colorGenerator, onClick, onClose }) => (\n \n {children ?? text}\n {clearable && ×}\n \n);\n\nexport default Tag;\n","import { FC } from 'react';\nimport { Dropdown, DropdownMenu, DropdownToggle } from 'reactstrap';\nimport { useToggle } from './helpers/hooks';\nimport './DropdownBtn.scss';\n\nexport interface DropdownBtnProps {\n text: string;\n disabled?: boolean;\n className?: string;\n dropdownClassName?: string;\n right?: boolean;\n minWidth?: number;\n}\n\nexport const DropdownBtn: FC = (\n { text, disabled = false, className = '', children, dropdownClassName, right = false, minWidth },\n) => {\n const [ isOpen, toggle ] = useToggle();\n const toggleClasses = `dropdown-btn__toggle btn-block ${className}`;\n const style = { minWidth: minWidth && `${minWidth}px` };\n\n return (\n \n {text}\n {children}\n \n );\n};\n","import { format, formatISO, isBefore, isEqual, isWithinInterval, parse, parseISO as stdParseISO } from 'date-fns';\nimport { OptionalString } from '../utils';\n\nexport type DateOrString = Date | string;\n\ntype NullableDate = DateOrString | null;\n\nexport const isDateObject = (date: DateOrString): date is Date => typeof date !== 'string';\n\nconst formatDateFromFormat = (date?: NullableDate, theFormat?: string): OptionalString => {\n if (!date || !isDateObject(date)) {\n return date;\n }\n\n return theFormat ? format(date, theFormat) : formatISO(date);\n};\n\nexport const formatDate = (format = 'yyyy-MM-dd') => (date?: NullableDate) => formatDateFromFormat(date, format);\n\nexport const formatIsoDate = (date?: NullableDate) => formatDateFromFormat(date, undefined);\n\nexport const formatInternational = formatDate();\n\nexport const parseDate = (date: string, format: string) => parse(date, format, new Date());\n\nexport const parseISO = (date: DateOrString): Date => isDateObject(date) ? date : stdParseISO(date);\n\nexport const isBetween = (date: DateOrString, start?: DateOrString, end?: DateOrString): boolean => {\n try {\n return isWithinInterval(parseISO(date), { start: parseISO(start ?? date), end: parseISO(end ?? date) });\n } catch (e) {\n return false;\n }\n};\n\nexport const isBeforeOrEqual = (date: Date | number, dateToCompare: Date | number) =>\n isEqual(date, dateToCompare) || isBefore(date, dateToCompare);\n","import { subDays, startOfDay, endOfDay } from 'date-fns';\nimport { cond, filter, isEmpty, T } from 'ramda';\nimport { DateOrString, formatInternational, isBeforeOrEqual, parseISO } from '../../helpers/date';\n\nexport interface DateRange {\n startDate?: Date | null;\n endDate?: Date | null;\n}\n\nexport type DateInterval = 'all' | 'today' | 'yesterday' | 'last7Days' | 'last30Days' | 'last90Days' | 'last180Days' | 'last365Days';\n\nexport const dateRangeIsEmpty = (dateRange?: DateRange): boolean => dateRange === undefined\n || isEmpty(filter(Boolean, dateRange as any));\n\nexport const rangeIsInterval = (range?: DateRange | DateInterval): range is DateInterval =>\n typeof range === 'string';\n\nconst INTERVAL_TO_STRING_MAP: Record = {\n today: 'Today',\n yesterday: 'Yesterday',\n last7Days: 'Last 7 days',\n last30Days: 'Last 30 days',\n last90Days: 'Last 90 days',\n last180Days: 'Last 180 days',\n last365Days: 'Last 365 days',\n all: undefined,\n};\n\nexport const DATE_INTERVALS = Object.keys(INTERVAL_TO_STRING_MAP).filter((value) => value !== 'all') as DateInterval[];\n\nconst dateRangeToString = (range?: DateRange): string | undefined => {\n if (!range || dateRangeIsEmpty(range)) {\n return undefined;\n }\n\n if (range.startDate && !range.endDate) {\n return `Since ${formatInternational(range.startDate)}`;\n }\n\n if (!range.startDate && range.endDate) {\n return `Until ${formatInternational(range.endDate)}`;\n }\n\n return `${formatInternational(range.startDate)} - ${formatInternational(range.endDate)}`;\n};\n\nexport const rangeOrIntervalToString = (range?: DateRange | DateInterval): string | undefined => {\n if (!range || range === 'all') {\n return undefined;\n }\n\n if (!rangeIsInterval(range)) {\n return dateRangeToString(range);\n }\n\n return INTERVAL_TO_STRING_MAP[range];\n};\n\nconst startOfDaysAgo = (daysAgo: number) => startOfDay(subDays(new Date(), daysAgo));\nconst endingToday = (startDate: Date): DateRange => ({ startDate, endDate: endOfDay(new Date()) });\n\nexport const intervalToDateRange = (dateInterval?: DateInterval): DateRange => {\n if (!dateInterval || dateInterval === 'all') {\n return {};\n }\n\n switch (dateInterval) {\n case 'today':\n return endingToday(startOfDay(new Date()));\n case 'yesterday':\n return { startDate: startOfDaysAgo(1), endDate: endOfDay(subDays(new Date(), 1)) };\n case 'last7Days':\n return endingToday(startOfDaysAgo(7));\n case 'last30Days':\n return endingToday(startOfDaysAgo(30));\n case 'last90Days':\n return endingToday(startOfDaysAgo(90));\n case 'last180Days':\n return endingToday(startOfDaysAgo(180));\n case 'last365Days':\n return endingToday(startOfDaysAgo(365));\n }\n\n return {};\n};\n\nexport const dateToMatchingInterval = (date: DateOrString): DateInterval => {\n const theDate: Date = parseISO(date);\n\n return cond([\n [ () => isBeforeOrEqual(startOfDay(new Date()), theDate), () => 'today' ],\n [ () => isBeforeOrEqual(startOfDaysAgo(1), theDate), () => 'yesterday' ],\n [ () => isBeforeOrEqual(startOfDaysAgo(7), theDate), () => 'last7Days' ],\n [ () => isBeforeOrEqual(startOfDaysAgo(30), theDate), () => 'last30Days' ],\n [ () => isBeforeOrEqual(startOfDaysAgo(90), theDate), () => 'last90Days' ],\n [ () => isBeforeOrEqual(startOfDaysAgo(180), theDate), () => 'last180Days' ],\n [ () => isBeforeOrEqual(startOfDaysAgo(365), theDate), () => 'last365Days' ],\n [ T, () => 'all' ],\n ])();\n};\n","import { useRef } from 'react';\nimport { isNil } from 'ramda';\nimport DatePicker, { ReactDatePickerProps } from 'react-datepicker';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCalendarAlt as calendarIcon } from '@fortawesome/free-regular-svg-icons';\nimport classNames from 'classnames';\nimport './DateInput.scss';\n\nexport type DateInputProps = ReactDatePickerProps;\n\nconst DateInput = (props: DateInputProps) => {\n const { className, isClearable, selected } = props;\n const showCalendarIcon = !isClearable || isNil(selected);\n const ref = useRef<{ input: HTMLInputElement }>();\n\n return (\n
\n \n {showCalendarIcon && (\n ref.current?.input.focus()}\n />\n )}\n
\n );\n};\n\nexport default DateInput;\n","import DateInput from '../DateInput';\nimport { DateRange } from './types';\n\ninterface DateRangeRowProps extends DateRange {\n onStartDateChange: (date: Date | null) => void;\n onEndDateChange: (date: Date | null) => void;\n disabled?: boolean;\n}\n\nconst DateRangeRow = (\n { startDate = null, endDate = null, disabled = false, onStartDateChange, onEndDateChange }: DateRangeRowProps,\n) => (\n
\n
\n \n
\n
\n \n
\n
\n);\n\nexport default DateRangeRow;\n","import { DropdownItem } from 'reactstrap';\nimport { FC } from 'react';\nimport { DATE_INTERVALS, DateInterval, rangeOrIntervalToString } from './types';\n\nexport interface DateIntervalDropdownProps {\n active?: DateInterval;\n allText: string;\n onChange: (interval: DateInterval) => void;\n}\n\nexport const DateIntervalDropdownItems: FC = ({ active, allText, onChange }) => (\n <>\n onChange('all')}>\n {allText}\n \n \n {DATE_INTERVALS.map(\n (interval) => (\n onChange(interval)}>\n {rangeOrIntervalToString(interval)}\n \n ),\n )}\n \n);\n","import { useState } from 'react';\nimport { DropdownItem } from 'reactstrap';\nimport { DropdownBtn } from '../DropdownBtn';\nimport { useEffectExceptFirstTime } from '../helpers/hooks';\nimport {\n DateInterval,\n DateRange,\n rangeOrIntervalToString,\n intervalToDateRange,\n rangeIsInterval,\n dateRangeIsEmpty,\n} from './types';\nimport DateRangeRow from './DateRangeRow';\nimport { DateIntervalDropdownItems } from './DateIntervalDropdownItems';\n\nexport interface DateRangeSelectorProps {\n initialDateRange?: DateInterval | DateRange;\n disabled?: boolean;\n onDatesChange: (dateRange: DateRange) => void;\n defaultText: string;\n updatable?: boolean;\n}\n\nexport const DateRangeSelector = (\n { onDatesChange, initialDateRange, defaultText, disabled, updatable = false }: DateRangeSelectorProps,\n) => {\n const initialIntervalIsRange = rangeIsInterval(initialDateRange);\n const [ activeInterval, setActiveInterval ] = useState(initialIntervalIsRange ? initialDateRange : undefined);\n const [ activeDateRange, setActiveDateRange ] = useState(initialIntervalIsRange ? undefined : initialDateRange);\n\n const updateDateRange = (dateRange: DateRange) => {\n setActiveInterval(dateRangeIsEmpty(dateRange) ? 'all' : undefined);\n setActiveDateRange(dateRange);\n onDatesChange(dateRange);\n };\n const updateInterval = (dateInterval: DateInterval) => {\n setActiveInterval(dateInterval);\n setActiveDateRange(undefined);\n onDatesChange(intervalToDateRange(dateInterval));\n };\n\n updatable && useEffectExceptFirstTime(() => {\n const isDateInterval = rangeIsInterval(initialDateRange);\n\n isDateInterval && updateInterval(initialDateRange);\n initialDateRange && !isDateInterval && updateDateRange(initialDateRange);\n }, [ initialDateRange ]);\n\n return (\n \n \n \n Custom:\n \n updateDateRange({ ...activeDateRange, startDate })}\n onEndDateChange={(endDate) => updateDateRange({ ...activeDateRange, endDate })}\n />\n \n \n );\n};\n","import { ChangeEvent, FC, useRef } from 'react';\nimport classNames from 'classnames';\nimport { v4 as uuid } from 'uuid';\nimport { identity } from 'ramda';\n\nexport interface BooleanControlProps {\n checked?: boolean;\n onChange?: (checked: boolean, e: ChangeEvent) => void;\n className?: string;\n inline?: boolean;\n}\n\ninterface BooleanControlWithTypeProps extends BooleanControlProps {\n type: 'switch' | 'checkbox';\n}\n\nconst BooleanControl: FC = (\n { checked = false, onChange = identity, className, children, type, inline = false },\n) => {\n const { current: id } = useRef(uuid());\n const onChecked = (e: ChangeEvent) => onChange(e.target.checked, e);\n const typeClasses = {\n 'form-switch': type === 'switch',\n 'form-checkbox': type === 'checkbox',\n };\n const style = inline ? { display: 'inline-block' } : {};\n\n return (\n \n \n \n \n );\n};\n\nexport default BooleanControl;\n","import { FC } from 'react';\nimport BooleanControl, { BooleanControlProps } from './BooleanControl';\n\nconst ToggleSwitch: FC = (props) => ;\n\nexport default ToggleSwitch;\n","import { FC, useRef } from 'react';\nimport { UncontrolledTooltip, UncontrolledTooltipProps } from 'reactstrap';\nimport { BooleanControlProps } from './BooleanControl';\nimport ToggleSwitch from './ToggleSwitch';\n\nexport type TooltipToggleSwitchProps = BooleanControlProps & { tooltip?: Omit };\n\nexport const TooltipToggleSwitch: FC = ({ children, tooltip = {}, ...rest }) => {\n const ref = useRef();\n\n return (\n <>\n {\n ref.current = el ?? undefined;\n }}\n >\n \n \n ref.current) as any} {...tooltip}>{children}\n \n );\n};\n","import { useParams, useLocation, useNavigate } from 'react-router-dom';\nimport { useMemo } from 'react';\nimport { isEmpty, pipe } from 'ramda';\nimport { parseQuery, stringifyQuery } from '../../utils/helpers/query';\nimport { ShortUrlsOrder, ShortUrlsOrderableFields } from '../data';\nimport { orderToString, stringToOrder } from '../../utils/helpers/ordering';\nimport { TagsFilteringMode } from '../../api/types';\n\ntype ToFirstPage = (extra: Partial) => void;\n\nexport interface ShortUrlListRouteParams {\n page: string;\n serverId: string;\n}\n\ninterface ShortUrlsQueryCommon {\n tags?: string;\n search?: string;\n startDate?: string;\n endDate?: string;\n tagsMode?: TagsFilteringMode;\n}\n\ninterface ShortUrlsQuery extends ShortUrlsQueryCommon {\n orderBy?: string;\n}\n\ninterface ShortUrlsFiltering extends ShortUrlsQueryCommon {\n orderBy?: ShortUrlsOrder;\n}\n\nexport const useShortUrlsQuery = (): [ShortUrlsFiltering, ToFirstPage] => {\n const navigate = useNavigate();\n const location = useLocation();\n const params = useParams<{ serverId: string }>();\n\n const query = useMemo(\n pipe(\n () => parseQuery(location.search),\n ({ orderBy, ...rest }: ShortUrlsQuery): ShortUrlsFiltering => !orderBy ? rest : {\n ...rest,\n orderBy: stringToOrder(orderBy),\n },\n ),\n [ location.search ],\n );\n const toFirstPageWithExtra = (extra: Partial) => {\n const { orderBy, ...mergedQuery } = { ...query, ...extra };\n const normalizedQuery: ShortUrlsQuery = { ...mergedQuery, orderBy: orderBy && orderToString(orderBy) };\n const evolvedQuery = stringifyQuery(normalizedQuery);\n const queryString = isEmpty(evolvedQuery) ? '' : `?${evolvedQuery}`;\n\n navigate(`/server/${params.serverId}/list-short-urls/1${queryString}`);\n };\n\n return [ query, toFirstPageWithExtra ];\n};\n","import { faTags as tagsIcon } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { isEmpty, pipe } from 'ramda';\nimport { parseISO } from 'date-fns';\nimport SearchField from '../utils/SearchField';\nimport Tag from '../tags/helpers/Tag';\nimport { DateRangeSelector } from '../utils/dates/DateRangeSelector';\nimport { formatIsoDate } from '../utils/helpers/date';\nimport ColorGenerator from '../utils/services/ColorGenerator';\nimport { DateRange } from '../utils/dates/types';\nimport { supportsAllTagsFiltering } from '../utils/helpers/features';\nimport { SelectedServer } from '../servers/data';\nimport { TooltipToggleSwitch } from '../utils/TooltipToggleSwitch';\nimport { useShortUrlsQuery } from './helpers/hooks';\nimport './ShortUrlsFilteringBar.scss';\n\ninterface ShortUrlsFilteringProps {\n selectedServer: SelectedServer;\n}\n\nconst dateOrNull = (date?: string) => date ? parseISO(date) : null;\n\nconst ShortUrlsFilteringBar = (colorGenerator: ColorGenerator) => ({ selectedServer }: ShortUrlsFilteringProps) => {\n const [{ search, tags, startDate, endDate, tagsMode = 'any' }, toFirstPage ] = useShortUrlsQuery();\n const selectedTags = tags?.split(',') ?? [];\n const setDates = pipe(\n ({ startDate, endDate }: DateRange) => ({\n startDate: formatIsoDate(startDate) ?? undefined,\n endDate: formatIsoDate(endDate) ?? undefined,\n }),\n toFirstPage,\n );\n const setSearch = pipe(\n (searchTerm: string) => isEmpty(searchTerm) ? undefined : searchTerm,\n (search) => toFirstPage({ search }),\n );\n const removeTag = pipe(\n (tag: string) => selectedTags.filter((selectedTag) => selectedTag !== tag),\n (tagsList) => tagsList.length === 0 ? undefined : tagsList.join(','),\n (tags) => toFirstPage({ tags }),\n );\n const canChangeTagsMode = supportsAllTagsFiltering(selectedServer);\n const toggleTagsMode = pipe(\n () => tagsMode === 'any' ? 'all' : 'any',\n (tagsMode) => toFirstPage({ tagsMode }),\n );\n\n return (\n
\n \n\n
\n
\n
\n \n
\n
\n
\n\n {selectedTags.length > 0 && (\n

\n {canChangeTagsMode && selectedTags.length > 1 && (\n
\n \n {tagsMode === 'all' ? 'Short URLs including all tags.' : 'Short URLs including any tag.'}\n \n
\n )}\n \n {selectedTags.map((tag) =>\n removeTag(tag)} />)}\n

\n )}\n
\n );\n};\n\nexport default ShortUrlsFilteringBar;\n","import { UncontrolledDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\nimport { toPairs } from 'ramda';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSortAmountUp as sortAscIcon, faSortAmountDown as sortDescIcon } from '@fortawesome/free-solid-svg-icons';\nimport classNames from 'classnames';\nimport { determineOrderDir, Order, OrderDir } from './helpers/ordering';\nimport './OrderingDropdown.scss';\n\nexport interface OrderingDropdownProps {\n items: Record;\n order: Order;\n onChange: (orderField?: T, orderDir?: OrderDir) => void;\n isButton?: boolean;\n right?: boolean;\n}\n\nexport function OrderingDropdown(\n { items, order, onChange, isButton = true, right = false }: OrderingDropdownProps,\n) {\n const handleItemClick = (fieldKey: T) => () => {\n const newOrderDir = determineOrderDir(fieldKey, order.field, order.dir);\n\n onChange(newOrderDir ? fieldKey : undefined, newOrderDir);\n };\n\n return (\n \n \n {!isButton && <>Order by}\n {isButton && !order.field && <>Order by...}\n {isButton && order.field && `Order by: \"${items[order.field]}\" - \"${order.dir ?? 'DESC'}\"`}\n \n \n {toPairs(items).map(([ fieldKey, fieldValue ]) => (\n \n {fieldValue}\n {order.field === fieldKey && (\n \n )}\n \n ))}\n \n onChange()}>\n Clear selection\n \n \n \n );\n}\n","import { FC, useEffect } from 'react';\nimport { pipe } from 'ramda';\nimport { useParams } from 'react-router-dom';\nimport { CreateVisit } from '../../visits/types';\nimport { MercureInfo } from '../reducers/mercureInfo';\nimport { bindToMercureTopic } from './index';\n\nexport interface MercureBoundProps {\n createNewVisits: (createdVisits: CreateVisit[]) => void;\n loadMercureInfo: () => void;\n mercureInfo: MercureInfo;\n}\n\nexport function boundToMercureHub(\n WrappedComponent: FC,\n getTopicsForProps: (props: T, routeParams: any) => string[],\n) {\n const pendingUpdates = new Set();\n\n return (props: MercureBoundProps & T) => {\n const { createNewVisits, loadMercureInfo, mercureInfo } = props;\n const { interval } = mercureInfo;\n const params = useParams();\n\n useEffect(() => {\n const onMessage = (visit: CreateVisit) => interval ? pendingUpdates.add(visit) : createNewVisits([ visit ]);\n const topics = getTopicsForProps(props, params);\n const closeEventSource = bindToMercureTopic(mercureInfo, topics, onMessage, loadMercureInfo);\n\n if (!interval) {\n return closeEventSource;\n }\n\n const timer = setInterval(() => {\n createNewVisits([ ...pendingUpdates ]);\n pendingUpdates.clear();\n }, interval * 1000 * 60);\n\n return pipe(() => clearInterval(timer), () => closeEventSource?.());\n }, [ mercureInfo ]);\n\n return ;\n };\n}\n","import { EventSourcePolyfill as EventSource } from 'event-source-polyfill';\nimport { MercureInfo } from '../reducers/mercureInfo';\n\nexport const bindToMercureTopic = (mercureInfo: MercureInfo, topics: string[], onMessage: (message: T) => void, onTokenExpired: () => void) => { // eslint-disable-line max-len\n const { mercureHubUrl, token, loading, error } = mercureInfo;\n\n if (loading || error || !mercureHubUrl) {\n return undefined;\n }\n\n const onEventSourceMessage = ({ data }: { data: string }) => onMessage(JSON.parse(data) as T);\n const onEventSourceError = ({ status }: { status: number }) => status === 401 && onTokenExpired();\n\n const subscriptions = topics.map((topic) => {\n const hubUrl = new URL(mercureHubUrl);\n\n hubUrl.searchParams.append('topic', topic);\n const es = new EventSource(hubUrl, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n es.onmessage = onEventSourceMessage;\n es.onerror = onEventSourceError;\n\n return es;\n });\n\n return () => subscriptions.forEach((es) => es.close());\n};\n","export class Topics {\n public static readonly visits = 'https://shlink.io/new-visit';\n\n public static readonly orphanVisits = 'https://shlink.io/new-orphan-visit';\n\n public static readonly shortUrlVisits = (shortCode: string) => `https://shlink.io/new-visit/${shortCode}`;\n}\n","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCaretDown as caretDownIcon, faCaretUp as caretUpIcon } from '@fortawesome/free-solid-svg-icons';\nimport { Order } from '../helpers/ordering';\n\ninterface TableOrderIconProps {\n currentOrder: Order;\n field: T;\n className?: string;\n}\n\nexport function TableOrderIcon(\n { currentOrder, field, className = 'ms-1' }: TableOrderIconProps,\n) {\n if (!currentOrder.dir || currentOrder.field !== field) {\n return null;\n }\n\n return ;\n}\n","import { isEmpty, propEq, values } from 'ramda';\nimport { useState, useEffect, useMemo, FC, useRef } from 'react';\nimport { Button, Progress, Row } from 'reactstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCalendarAlt, faMapMarkedAlt, faList, faChartPie, faFileDownload } from '@fortawesome/free-solid-svg-icons';\nimport { IconDefinition } from '@fortawesome/fontawesome-common-types';\nimport { Route, Routes, Navigate } from 'react-router-dom';\nimport classNames from 'classnames';\nimport { DateRangeSelector } from '../utils/dates/DateRangeSelector';\nimport Message from '../utils/Message';\nimport { DateInterval, DateRange, intervalToDateRange } from '../utils/dates/types';\nimport { Result } from '../utils/Result';\nimport { ShlinkApiError } from '../api/ShlinkApiError';\nimport { Settings } from '../settings/reducers/settings';\nimport { SelectedServer } from '../servers/data';\nimport { supportsBotVisits } from '../utils/helpers/features';\nimport { prettify } from '../utils/helpers/numbers';\nimport { NavPillItem, NavPills } from '../utils/NavPills';\nimport LineChartCard from './charts/LineChartCard';\nimport VisitsTable from './VisitsTable';\nimport { NormalizedOrphanVisit, NormalizedVisit, VisitsFilter, VisitsInfo, VisitsParams } from './types';\nimport OpenMapModalBtn from './helpers/OpenMapModalBtn';\nimport { normalizeVisits, processStatsFromVisits } from './services/VisitsParser';\nimport { VisitsFilterDropdown } from './helpers/VisitsFilterDropdown';\nimport { HighlightableProps, highlightedVisitsToStats } from './types/helpers';\nimport { DoughnutChartCard } from './charts/DoughnutChartCard';\nimport { SortableBarChartCard } from './charts/SortableBarChartCard';\n\nexport interface VisitsStatsProps {\n getVisits: (params: VisitsParams, doIntervalFallback?: boolean) => void;\n visitsInfo: VisitsInfo;\n settings: Settings;\n selectedServer: SelectedServer;\n cancelGetVisits: () => void;\n domain?: string;\n exportCsv: (visits: NormalizedVisit[]) => void;\n isOrphanVisits?: boolean;\n}\n\ninterface VisitsNavLinkProps {\n title: string;\n subPath: string;\n icon: IconDefinition;\n}\n\ntype Section = 'byTime' | 'byContext' | 'byLocation' | 'list';\n\nconst sections: Record = {\n byTime: { title: 'By time', subPath: 'by-time', icon: faCalendarAlt },\n byContext: { title: 'By context', subPath: 'by-context', icon: faChartPie },\n byLocation: { title: 'By location', subPath: 'by-location', icon: faMapMarkedAlt },\n list: { title: 'List', subPath: 'list', icon: faList },\n};\n\nlet selectedBar: string | undefined;\n\nconst VisitsStats: FC = ({\n children,\n visitsInfo,\n getVisits,\n cancelGetVisits,\n domain,\n settings,\n exportCsv,\n selectedServer,\n isOrphanVisits = false,\n}) => {\n const { visits, loading, loadingLarge, error, errorData, progress, fallbackInterval } = visitsInfo;\n const [ initialInterval, setInitialInterval ] = useState(\n fallbackInterval ?? settings.visits?.defaultInterval ?? 'last30Days',\n );\n const [ dateRange, setDateRange ] = useState(intervalToDateRange(initialInterval));\n const [ highlightedVisits, setHighlightedVisits ] = useState([]);\n const [ highlightedLabel, setHighlightedLabel ] = useState();\n const [ visitsFilter, setVisitsFilter ] = useState({});\n const botsSupported = supportsBotVisits(selectedServer);\n const isFirstLoad = useRef(true);\n\n const buildSectionUrl = (subPath?: string) => {\n const query = domain ? `?domain=${domain}` : '';\n\n return !subPath ? `${query}` : `${subPath}${query}`;\n };\n const normalizedVisits = useMemo(() => normalizeVisits(visits), [ visits ]);\n const { os, browsers, referrers, countries, cities, citiesForMap, visitedUrls } = useMemo(\n () => processStatsFromVisits(normalizedVisits),\n [ normalizedVisits ],\n );\n const mapLocations = values(citiesForMap);\n\n const setSelectedVisits = (selectedVisits: NormalizedVisit[]) => {\n selectedBar = undefined;\n setHighlightedVisits(selectedVisits);\n };\n const highlightVisitsForProp = (prop: HighlightableProps) => (value: string) => {\n const newSelectedBar = `${prop}_${value}`;\n\n if (selectedBar === newSelectedBar) {\n setHighlightedVisits([]);\n setHighlightedLabel(undefined);\n selectedBar = undefined;\n } else {\n setHighlightedVisits((normalizedVisits as NormalizedOrphanVisit[]).filter(propEq(prop, value)));\n setHighlightedLabel(value);\n selectedBar = newSelectedBar;\n }\n };\n\n useEffect(() => cancelGetVisits, []);\n useEffect(() => {\n getVisits({ dateRange, filter: visitsFilter }, isFirstLoad.current);\n isFirstLoad.current = false;\n }, [ dateRange, visitsFilter ]);\n useEffect(() => {\n fallbackInterval && setInitialInterval(fallbackInterval);\n }, [ fallbackInterval ]);\n\n const renderVisitsContent = () => {\n if (loadingLarge) {\n return (\n \n This is going to take a while... :S\n \n \n );\n }\n\n if (loading) {\n return ;\n }\n\n if (error) {\n return (\n \n \n \n );\n }\n\n if (isEmpty(visits)) {\n return There are no visits matching current filter :(;\n }\n\n return (\n <>\n \n {Object.values(sections).map(({ title, icon, subPath }, index) => (\n \n \n {title}\n \n ))}\n \n \n \n \n \n \n )}\n />\n\n \n
\n \n
\n
\n \n
\n
\n \n
\n {isOrphanVisits && (\n
\n \n
\n )}\n \n )}\n />\n\n \n
\n \n
\n
\n \n mapLocations.length > 0 &&\n \n }\n sortingItems={{\n name: 'City name',\n amount: 'Visits amount',\n }}\n onClick={highlightVisitsForProp('city')}\n />\n
\n \n )}\n />\n\n \n \n \n )}\n />\n\n } />\n
\n
\n \n );\n };\n\n return (\n <>\n {children}\n\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n {visits.length > 0 && (\n
\n
\n setSelectedVisits([])}\n >\n Clear selection {highlightedVisits.length > 0 && <>({prettify(highlightedVisits.length)})}\n \n exportCsv(normalizedVisits)}\n >\n Export ({prettify(normalizedVisits.length)})\n \n
\n
\n )}\n
\n
\n\n
\n {renderVisitsContent()}\n
\n \n );\n};\n\nexport default VisitsStats;\n","import { Action } from 'redux';\n\ntype ActionHandler = (currentState: State, action: AT) => State;\ntype ActionHandlerMap = Record>;\n\nexport const buildReducer = (map: ActionHandlerMap, initialState: State) => (\n state: State | undefined,\n action: AT,\n): State => {\n const { type } = action;\n const actionHandler = map[type];\n const currentState = state ?? initialState;\n\n return actionHandler ? actionHandler(currentState, action) : currentState;\n};\n\nexport const buildActionCreator = (type: T) => (): Action => ({ type });\n","import { Action } from 'redux';\nimport { dissoc, mergeDeepRight } from 'ramda';\nimport { buildReducer } from '../../utils/helpers/redux';\nimport { RecursivePartial } from '../../utils/utils';\nimport { Theme } from '../../utils/theme';\nimport { DateInterval } from '../../utils/dates/types';\nimport { TagsOrder } from '../../tags/data/TagsListChildrenProps';\nimport { ShortUrlsOrder } from '../../short-urls/data';\n\nexport const SET_SETTINGS = 'shlink/realTimeUpdates/SET_SETTINGS';\n\nexport const DEFAULT_SHORT_URLS_ORDERING: ShortUrlsOrder = {\n field: 'dateCreated',\n dir: 'DESC',\n};\n\n/**\n * Important! When adding new props in the main Settings interface or any of the nested props, they have to be set as\n * optional, as old instances of the app will load partial objects from local storage until it is saved again.\n */\n\nexport interface RealTimeUpdatesSettings {\n enabled: boolean;\n interval?: number;\n}\n\nexport type TagFilteringMode = 'startsWith' | 'includes';\n\nexport interface ShortUrlCreationSettings {\n validateUrls: boolean;\n tagFilteringMode?: TagFilteringMode;\n forwardQuery?: boolean;\n}\n\nexport type TagsMode = 'cards' | 'list';\n\nexport interface UiSettings {\n theme: Theme;\n}\n\nexport interface VisitsSettings {\n defaultInterval: DateInterval;\n}\n\nexport interface TagsSettings {\n defaultOrdering?: TagsOrder;\n defaultMode?: TagsMode;\n}\n\nexport interface ShortUrlsListSettings {\n defaultOrdering?: ShortUrlsOrder;\n}\n\nexport interface Settings {\n realTimeUpdates: RealTimeUpdatesSettings;\n shortUrlCreation?: ShortUrlCreationSettings;\n shortUrlsList?: ShortUrlsListSettings;\n ui?: UiSettings;\n visits?: VisitsSettings;\n tags?: TagsSettings;\n}\n\nconst initialState: Settings = {\n realTimeUpdates: {\n enabled: true,\n },\n shortUrlCreation: {\n validateUrls: false,\n },\n ui: {\n theme: 'light',\n },\n visits: {\n defaultInterval: 'last30Days',\n },\n shortUrlsList: {\n defaultOrdering: DEFAULT_SHORT_URLS_ORDERING,\n },\n};\n\ntype SettingsAction = Action & Settings;\n\ntype PartialSettingsAction = Action & RecursivePartial;\n\nexport default buildReducer({\n [SET_SETTINGS]: (state, action) => mergeDeepRight(state, dissoc('type', action)),\n}, initialState);\n\nexport const toggleRealTimeUpdates = (enabled: boolean): PartialSettingsAction => ({\n type: SET_SETTINGS,\n realTimeUpdates: { enabled },\n});\n\nexport const setRealTimeUpdatesInterval = (interval: number): PartialSettingsAction => ({\n type: SET_SETTINGS,\n realTimeUpdates: { interval },\n});\n\nexport const setShortUrlCreationSettings = (settings: ShortUrlCreationSettings): PartialSettingsAction => ({\n type: SET_SETTINGS,\n shortUrlCreation: settings,\n});\n\nexport const setShortUrlsListSettings = (settings: ShortUrlsListSettings): PartialSettingsAction => ({\n type: SET_SETTINGS,\n shortUrlsList: settings,\n});\n\nexport const setUiSettings = (settings: UiSettings): PartialSettingsAction => ({\n type: SET_SETTINGS,\n ui: settings,\n});\n\nexport const setVisitsSettings = (settings: VisitsSettings): PartialSettingsAction => ({\n type: SET_SETTINGS,\n visits: settings,\n});\n\nexport const setTagsSettings = (settings: TagsSettings): PartialSettingsAction => ({\n type: SET_SETTINGS,\n tags: settings,\n});\n","const TEN_ROUNDING_NUMBER = 10;\nconst { ceil } = Math;\nconst formatter = new Intl.NumberFormat('en-US');\n\nexport const prettify = (number: number | string) => formatter.format(Number(number));\n\nexport const roundTen = (number: number) => ceil(number / TEN_ROUNDING_NUMBER) * TEN_ROUNDING_NUMBER;\n","import { max, min, range } from 'ramda';\nimport { prettify } from './numbers';\n\nconst DELTA = 2;\n\nexport const ELLIPSIS = '...';\n\ntype Ellipsis = typeof ELLIPSIS;\n\nexport type NumberOrEllipsis = number | Ellipsis;\n\nexport const progressivePagination = (currentPage: number, pageCount: number): NumberOrEllipsis[] => {\n const pages: NumberOrEllipsis[] = range(\n max(DELTA, currentPage - DELTA),\n min(pageCount - 1, currentPage + DELTA) + 1,\n );\n\n if (currentPage - DELTA > DELTA) {\n pages.unshift(ELLIPSIS);\n }\n if (currentPage + DELTA < pageCount - 1) {\n pages.push(ELLIPSIS);\n }\n\n pages.unshift(1);\n pages.push(pageCount);\n\n return pages;\n};\n\nexport const pageIsEllipsis = (pageNumber: NumberOrEllipsis): pageNumber is Ellipsis => pageNumber === ELLIPSIS;\n\nexport const prettifyPageNumber = (pageNumber: NumberOrEllipsis): string =>\n pageIsEllipsis(pageNumber) ? pageNumber : prettify(pageNumber);\n\nexport const keyForPage = (pageNumber: NumberOrEllipsis, index: number) => !pageIsEllipsis(pageNumber) ? `${pageNumber}` : `${pageNumber}_${index}`;\n","import { Link } from 'react-router-dom';\nimport { Pagination, PaginationItem, PaginationLink } from 'reactstrap';\nimport {\n pageIsEllipsis,\n keyForPage,\n progressivePagination,\n prettifyPageNumber,\n NumberOrEllipsis,\n} from '../utils/helpers/pagination';\nimport { ShlinkPaginator } from '../api/types';\n\ninterface PaginatorProps {\n paginator?: ShlinkPaginator;\n serverId: string;\n currentQueryString?: string;\n}\n\nconst Paginator = ({ paginator, serverId, currentQueryString = '' }: PaginatorProps) => {\n const { currentPage = 0, pagesCount = 0 } = paginator ?? {};\n const urlForPage = (pageNumber: NumberOrEllipsis) =>\n `/server/${serverId}/list-short-urls/${pageNumber}${currentQueryString}`;\n\n if (pagesCount <= 1) {\n return null;\n }\n\n const renderPages = () =>\n progressivePagination(currentPage, pagesCount).map((pageNumber, index) => (\n \n \n {prettifyPageNumber(pageNumber)}\n \n \n ));\n\n return (\n \n \n \n \n {renderPages()}\n = pagesCount}>\n \n \n \n );\n};\n\nexport default Paginator;\n","import { Nullable, OptionalString } from '../../utils/utils';\nimport { Order } from '../../utils/helpers/ordering';\n\nexport interface EditShortUrlData {\n longUrl?: string;\n tags?: string[];\n title?: string | null;\n validSince?: Date | string | null;\n validUntil?: Date | string | null;\n maxVisits?: number | null;\n validateUrl?: boolean;\n crawlable?: boolean;\n forwardQuery?: boolean;\n}\n\nexport interface ShortUrlData extends EditShortUrlData {\n longUrl: string;\n customSlug?: string;\n shortCodeLength?: number;\n domain?: string;\n findIfExists?: boolean;\n}\n\nexport interface ShortUrl {\n shortCode: string;\n shortUrl: string;\n longUrl: string;\n dateCreated: string;\n visitsCount: number;\n meta: Required>;\n tags: string[];\n domain: string | null;\n title?: string | null;\n crawlable?: boolean;\n forwardQuery?: boolean;\n}\n\nexport interface ShortUrlMeta {\n validSince?: string;\n validUntil?: string;\n maxVisits?: number;\n}\n\nexport interface ShortUrlModalProps {\n shortUrl: ShortUrl;\n isOpen: boolean;\n toggle: () => void;\n}\n\nexport interface ShortUrlIdentifier {\n shortCode: string;\n domain: OptionalString;\n}\n\nexport const SHORT_URLS_ORDERABLE_FIELDS = {\n dateCreated: 'Created at',\n shortCode: 'Short URL',\n longUrl: 'Long URL',\n title: 'Title',\n visits: 'Visits',\n};\n\nexport type ShortUrlsOrderableFields = keyof typeof SHORT_URLS_ORDERABLE_FIELDS;\n\nexport type ShortUrlsOrder = Order;\n","import { pipe } from 'ramda';\nimport { FC, useEffect, useMemo, useState } from 'react';\nimport { Card } from 'reactstrap';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { OrderingDropdown } from '../utils/OrderingDropdown';\nimport { determineOrderDir, OrderDir } from '../utils/helpers/ordering';\nimport { getServerId, SelectedServer } from '../servers/data';\nimport { boundToMercureHub } from '../mercure/helpers/boundToMercureHub';\nimport { Topics } from '../mercure/helpers/Topics';\nimport { TableOrderIcon } from '../utils/table/TableOrderIcon';\nimport { ShlinkShortUrlsListParams } from '../api/types';\nimport { DEFAULT_SHORT_URLS_ORDERING, Settings } from '../settings/reducers/settings';\nimport { ShortUrlsList as ShortUrlsListState } from './reducers/shortUrlsList';\nimport { ShortUrlsTableProps } from './ShortUrlsTable';\nimport Paginator from './Paginator';\nimport { useShortUrlsQuery } from './helpers/hooks';\nimport { ShortUrlsOrderableFields, SHORT_URLS_ORDERABLE_FIELDS } from './data';\n\ninterface ShortUrlsListProps {\n selectedServer: SelectedServer;\n shortUrlsList: ShortUrlsListState;\n listShortUrls: (params: ShlinkShortUrlsListParams) => void;\n settings: Settings;\n}\n\nconst ShortUrlsList = (ShortUrlsTable: FC, ShortUrlsFilteringBar: FC) => boundToMercureHub(({\n listShortUrls,\n shortUrlsList,\n selectedServer,\n settings,\n}: ShortUrlsListProps) => {\n const serverId = getServerId(selectedServer);\n const { page } = useParams();\n const location = useLocation();\n const [{ tags, search, startDate, endDate, orderBy, tagsMode }, toFirstPage ] = useShortUrlsQuery();\n const [ actualOrderBy, setActualOrderBy ] = useState(\n // This separated state handling is needed to be able to fall back to settings value, but only once when loaded\n orderBy ?? settings.shortUrlsList?.defaultOrdering ?? DEFAULT_SHORT_URLS_ORDERING,\n );\n const selectedTags = useMemo(() => tags?.split(',') ?? [], [ tags ]);\n const { pagination } = shortUrlsList?.shortUrls ?? {};\n const handleOrderBy = (field?: ShortUrlsOrderableFields, dir?: OrderDir) => {\n toFirstPage({ orderBy: { field, dir } });\n setActualOrderBy({ field, dir });\n };\n const orderByColumn = (field: ShortUrlsOrderableFields) => () =>\n handleOrderBy(field, determineOrderDir(field, actualOrderBy.field, actualOrderBy.dir));\n const renderOrderIcon = (field: ShortUrlsOrderableFields) =>\n ;\n const addTag = pipe(\n (newTag: string) => [ ...new Set([ ...selectedTags, newTag ]) ].join(','),\n (tags) => toFirstPage({ tags }),\n );\n\n useEffect(() => {\n listShortUrls({\n page,\n searchTerm: search,\n tags: selectedTags,\n startDate,\n endDate,\n orderBy: actualOrderBy,\n tagsMode,\n });\n }, [ page, search, selectedTags, startDate, endDate, actualOrderBy, tagsMode ]);\n\n return (\n <>\n
\n
\n \n
\n \n \n \n \n \n );\n}, () => [ Topics.visits ]);\n\nexport default ShortUrlsList;\n","import { FC } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCopy as copyIcon } from '@fortawesome/free-regular-svg-icons';\nimport CopyToClipboard from 'react-copy-to-clipboard';\nimport './CopyToClipboardIcon.scss';\n\ninterface CopyToClipboardIconProps {\n text: string;\n onCopy?: (text: string, result: boolean) => void;\n}\n\nexport const CopyToClipboardIcon: FC = ({ text, onCopy }) => (\n \n \n \n);\n","import { parseISO, format as formatDate, getUnixTime, formatDistance } from 'date-fns';\nimport { isDateObject } from './helpers/date';\n\nexport interface DateProps {\n date: Date | string;\n format?: string;\n relative?: boolean;\n}\n\nexport const Time = ({ date, format = 'yyyy-MM-dd HH:mm', relative = false }: DateProps) => {\n const dateObject = isDateObject(date) ? date : parseISO(date);\n\n return (\n \n );\n};\n","import { FC } from 'react';\nimport { Link } from 'react-router-dom';\nimport { isServerWithId, SelectedServer, ServerWithId } from '../../servers/data';\nimport { ShortUrl } from '../data';\n\nexport type LinkSuffix = 'visits' | 'edit';\n\nexport interface ShortUrlDetailLinkProps {\n shortUrl?: ShortUrl | null;\n selectedServer?: SelectedServer;\n suffix: LinkSuffix;\n}\n\nconst buildUrl = ({ id }: ServerWithId, { shortCode, domain }: ShortUrl, suffix: LinkSuffix) => {\n const query = domain ? `?domain=${domain}` : '';\n\n return `/server/${id}/short-code/${shortCode}/${suffix}${query}`;\n};\n\nconst ShortUrlDetailLink: FC> = (\n { selectedServer, shortUrl, suffix, children, ...rest },\n) => {\n if (!selectedServer || !isServerWithId(selectedServer) || !shortUrl) {\n return {children};\n }\n\n return {children};\n};\n\nexport default ShortUrlDetailLink;\n","import { useRef } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faInfoCircle as infoIcon } from '@fortawesome/free-solid-svg-icons';\nimport { UncontrolledTooltip } from 'reactstrap';\nimport classNames from 'classnames';\nimport { prettify } from '../../utils/helpers/numbers';\nimport { ShortUrl } from '../data';\nimport { SelectedServer } from '../../servers/data';\nimport ShortUrlDetailLink from './ShortUrlDetailLink';\nimport './ShortUrlVisitsCount.scss';\n\ninterface ShortUrlVisitsCountProps {\n shortUrl?: ShortUrl | null;\n selectedServer?: SelectedServer;\n visitsCount: number;\n active?: boolean;\n}\n\nconst ShortUrlVisitsCount = ({ visitsCount, shortUrl, selectedServer, active = false }: ShortUrlVisitsCountProps) => {\n const maxVisits = shortUrl?.meta?.maxVisits;\n const visitsLink = (\n \n \n {prettify(visitsCount)}\n \n \n );\n\n if (!maxVisits) {\n return visitsLink;\n }\n\n const prettifiedMaxVisits = prettify(maxVisits);\n const tooltipRef = useRef();\n\n return (\n <>\n \n {visitsLink}\n {\n tooltipRef.current = el;\n }}\n >\n {' '}/ {prettifiedMaxVisits}{' '}\n \n \n \n \n \n tooltipRef.current) as any} placement=\"bottom\">\n This short URL will not accept more than {prettifiedMaxVisits} visits.\n \n \n );\n};\n\nexport default ShortUrlVisitsCount;\n","import { FC, useEffect, useRef } from 'react';\nimport { isEmpty } from 'ramda';\nimport { ExternalLink } from 'react-external-link';\nimport ColorGenerator from '../../utils/services/ColorGenerator';\nimport { StateFlagTimeout } from '../../utils/helpers/hooks';\nimport Tag from '../../tags/helpers/Tag';\nimport { SelectedServer } from '../../servers/data';\nimport { CopyToClipboardIcon } from '../../utils/CopyToClipboardIcon';\nimport { ShortUrl } from '../data';\nimport { Time } from '../../utils/Time';\nimport ShortUrlVisitsCount from './ShortUrlVisitsCount';\nimport { ShortUrlsRowMenuProps } from './ShortUrlsRowMenu';\nimport './ShortUrlsRow.scss';\n\nexport interface ShortUrlsRowProps {\n onTagClick?: (tag: string) => void;\n selectedServer: SelectedServer;\n shortUrl: ShortUrl;\n}\n\nconst ShortUrlsRow = (\n ShortUrlsRowMenu: FC,\n colorGenerator: ColorGenerator,\n useStateFlagTimeout: StateFlagTimeout,\n) => ({ shortUrl, selectedServer, onTagClick }: ShortUrlsRowProps) => {\n const [ copiedToClipboard, setCopiedToClipboard ] = useStateFlagTimeout();\n const [ active, setActive ] = useStateFlagTimeout(false, 500);\n const isFirstRun = useRef(true);\n\n const renderTags = (tags: string[]) => {\n if (isEmpty(tags)) {\n return No tags;\n }\n\n return tags.map((tag) => (\n onTagClick?.(tag)}\n />\n ));\n };\n\n useEffect(() => {\n if (isFirstRun.current) {\n isFirstRun.current = false;\n } else {\n setActive();\n }\n }, [ shortUrl.visitsCount ]);\n\n return (\n \n \n
\n \n \n setShortUrlCreationSettings({ ...shortUrlCreation, forwardQuery })}\n >\n Make all new short URLs forward their query params to the long URL.\n \n The initial state of the Forward query params on redirect checkbox will\n be {shortUrlCreation.forwardQuery ?? true ? 'checked' : 'unchecked'}.\n \n \n \n \n \n \n {tagFilteringModeText('startsWith')}\n
\n \n {tagFilteringModeText('includes')}\n
\n \n {tagFilteringModeHint(shortUrlCreation.tagFilteringMode)}\n \n \n );\n};\n","import { FC } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSun, faMoon } from '@fortawesome/free-solid-svg-icons';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport ToggleSwitch from '../utils/ToggleSwitch';\nimport { changeThemeInMarkup, Theme } from '../utils/theme';\nimport { Settings, UiSettings } from './reducers/settings';\nimport './UserInterfaceSettings.scss';\n\ninterface UserInterfaceProps {\n settings: Settings;\n setUiSettings: (settings: UiSettings) => void;\n}\n\nexport const UserInterfaceSettings: FC = ({ settings: { ui }, setUiSettings }) => (\n \n \n {\n const theme: Theme = useDarkTheme ? 'dark' : 'light';\n\n setUiSettings({ ...ui, theme });\n changeThemeInMarkup(theme);\n }}\n >\n Use dark theme.\n \n \n);\n","import { FC } from 'react';\nimport { DropdownBtn } from '../DropdownBtn';\nimport { rangeOrIntervalToString } from './types';\nimport { DateIntervalDropdownItems, DateIntervalDropdownProps } from './DateIntervalDropdownItems';\n\nexport const DateIntervalSelector: FC = ({ onChange, active, allText }) => (\n \n \n \n);\n","import { FC } from 'react';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport { DateIntervalSelector } from '../utils/dates/DateIntervalSelector';\nimport { LabeledFormGroup } from '../utils/forms/LabeledFormGroup';\nimport { Settings, VisitsSettings as VisitsSettingsConfig } from './reducers/settings';\n\ninterface VisitsProps {\n settings: Settings;\n setVisitsSettings: (settings: VisitsSettingsConfig) => void;\n}\n\nexport const VisitsSettings: FC = ({ settings, setVisitsSettings }) => (\n \n \n setVisitsSettings({ defaultInterval })}\n />\n \n \n);\n","import { FC } from 'react';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport { TagsModeDropdown } from '../tags/TagsModeDropdown';\nimport { capitalize } from '../utils/utils';\nimport { OrderingDropdown } from '../utils/OrderingDropdown';\nimport { TAGS_ORDERABLE_FIELDS } from '../tags/data/TagsListChildrenProps';\nimport { FormText } from '../utils/forms/FormText';\nimport { LabeledFormGroup } from '../utils/forms/LabeledFormGroup';\nimport { Settings, TagsSettings as TagsSettingsOptions } from './reducers/settings';\n\ninterface TagsProps {\n settings: Settings;\n setTagsSettings: (settings: TagsSettingsOptions) => void;\n}\n\nexport const TagsSettings: FC = ({ settings: { tags }, setTagsSettings }) => (\n \n \n capitalize(tagsMode)}\n onChange={(defaultMode) => setTagsSettings({ ...tags, defaultMode })}\n />\n Tags will be displayed as {tags?.defaultMode ?? 'cards'}.\n \n \n setTagsSettings({ ...tags, defaultOrdering: { field, dir } })}\n />\n \n \n);\n","import { FC } from 'react';\nimport { OrderingDropdown } from '../utils/OrderingDropdown';\nimport { SHORT_URLS_ORDERABLE_FIELDS } from '../short-urls/data';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport { LabeledFormGroup } from '../utils/forms/LabeledFormGroup';\nimport { DEFAULT_SHORT_URLS_ORDERING, Settings, ShortUrlsListSettings as ShortUrlsSettings } from './reducers/settings';\n\ninterface ShortUrlsListProps {\n settings: Settings;\n setShortUrlsListSettings: (settings: ShortUrlsSettings) => void;\n}\n\nexport const ShortUrlsListSettings: FC = (\n { settings: { shortUrlsList }, setShortUrlsListSettings },\n) => (\n \n \n setShortUrlsListSettings({ defaultOrdering: { field, dir } })}\n />\n \n \n);\n","import Bottle from 'bottlejs';\nimport RealTimeUpdatesSettings from '../RealTimeUpdatesSettings';\nimport Settings from '../Settings';\nimport {\n setRealTimeUpdatesInterval,\n setShortUrlCreationSettings,\n setShortUrlsListSettings,\n setTagsSettings,\n setUiSettings,\n setVisitsSettings,\n toggleRealTimeUpdates,\n} from '../reducers/settings';\nimport { ConnectDecorator } from '../../container/types';\nimport { withoutSelectedServer } from '../../servers/helpers/withoutSelectedServer';\nimport { ShortUrlCreationSettings } from '../ShortUrlCreationSettings';\nimport { UserInterfaceSettings } from '../UserInterfaceSettings';\nimport { VisitsSettings } from '../VisitsSettings';\nimport { TagsSettings } from '../TagsSettings';\nimport { ShortUrlsListSettings } from '../ShortUrlsListSettings';\n\nconst provideServices = (bottle: Bottle, connect: ConnectDecorator) => {\n // Components\n bottle.serviceFactory(\n 'Settings',\n Settings,\n 'RealTimeUpdatesSettings',\n 'ShortUrlCreationSettings',\n 'ShortUrlsListSettings',\n 'UserInterfaceSettings',\n 'VisitsSettings',\n 'TagsSettings',\n );\n bottle.decorator('Settings', withoutSelectedServer);\n bottle.decorator('Settings', connect(null, [ 'resetSelectedServer' ]));\n\n bottle.serviceFactory('RealTimeUpdatesSettings', () => RealTimeUpdatesSettings);\n bottle.decorator(\n 'RealTimeUpdatesSettings',\n connect([ 'settings' ], [ 'toggleRealTimeUpdates', 'setRealTimeUpdatesInterval' ]),\n );\n\n bottle.serviceFactory('ShortUrlCreationSettings', () => ShortUrlCreationSettings);\n bottle.decorator('ShortUrlCreationSettings', connect([ 'settings' ], [ 'setShortUrlCreationSettings' ]));\n\n bottle.serviceFactory('UserInterfaceSettings', () => UserInterfaceSettings);\n bottle.decorator('UserInterfaceSettings', connect([ 'settings' ], [ 'setUiSettings' ]));\n\n bottle.serviceFactory('VisitsSettings', () => VisitsSettings);\n bottle.decorator('VisitsSettings', connect([ 'settings' ], [ 'setVisitsSettings' ]));\n\n bottle.serviceFactory('TagsSettings', () => TagsSettings);\n bottle.decorator('TagsSettings', connect([ 'settings' ], [ 'setTagsSettings' ]));\n\n bottle.serviceFactory('ShortUrlsListSettings', () => ShortUrlsListSettings);\n bottle.decorator('ShortUrlsListSettings', connect([ 'settings' ], [ 'setShortUrlsListSettings' ]));\n\n // Actions\n bottle.serviceFactory('toggleRealTimeUpdates', () => toggleRealTimeUpdates);\n bottle.serviceFactory('setRealTimeUpdatesInterval', () => setRealTimeUpdatesInterval);\n bottle.serviceFactory('setShortUrlCreationSettings', () => setShortUrlCreationSettings);\n bottle.serviceFactory('setShortUrlsListSettings', () => setShortUrlsListSettings);\n bottle.serviceFactory('setUiSettings', () => setUiSettings);\n bottle.serviceFactory('setVisitsSettings', () => setVisitsSettings);\n bottle.serviceFactory('setTagsSettings', () => setTagsSettings);\n};\n\nexport default provideServices;\n","export const replaceAuthorityFromUri = (uri: string, newAuthority: string): string => {\n const [ schema, rest ] = uri.split('://');\n const [ , ...pathParts ] = rest.split('/');\n const normalizedPath = pathParts.length ? `/${pathParts.join('/')}` : '';\n\n return `${schema}://${newAuthority}${normalizedPath}`;\n};\n","import { Action, Dispatch } from 'redux';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\nimport { ShlinkDomainRedirects } from '../../api/types';\nimport { GetState } from '../../container/types';\nimport { ApiErrorAction } from '../../api/types/actions';\nimport { parseApiError } from '../../api/utils';\n\n/* eslint-disable padding-line-between-statements */\nexport const EDIT_DOMAIN_REDIRECTS_START = 'shlink/domainRedirects/EDIT_DOMAIN_REDIRECTS_START';\nexport const EDIT_DOMAIN_REDIRECTS_ERROR = 'shlink/domainRedirects/EDIT_DOMAIN_REDIRECTS_ERROR';\nexport const EDIT_DOMAIN_REDIRECTS = 'shlink/domainRedirects/EDIT_DOMAIN_REDIRECTS';\n/* eslint-enable padding-line-between-statements */\n\nexport interface EditDomainRedirectsAction extends Action {\n domain: string;\n redirects: ShlinkDomainRedirects;\n}\n\nexport const editDomainRedirects = (buildShlinkApiClient: ShlinkApiClientBuilder) => (\n domain: string,\n domainRedirects: Partial,\n) => async (dispatch: Dispatch, getState: GetState) => {\n dispatch({ type: EDIT_DOMAIN_REDIRECTS_START });\n const { editDomainRedirects } = buildShlinkApiClient(getState);\n\n try {\n const redirects = await editDomainRedirects({ domain, ...domainRedirects });\n\n dispatch({ type: EDIT_DOMAIN_REDIRECTS, domain, redirects });\n } catch (e: any) {\n dispatch({ type: EDIT_DOMAIN_REDIRECTS_ERROR, errorData: parseApiError(e) });\n }\n};\n","import { Action, Dispatch } from 'redux';\nimport { ProblemDetailsError, ShlinkDomainRedirects } from '../../api/types';\nimport { buildReducer } from '../../utils/helpers/redux';\nimport { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';\nimport { GetState } from '../../container/types';\nimport { parseApiError } from '../../api/utils';\nimport { ApiErrorAction } from '../../api/types/actions';\nimport { Domain, DomainStatus } from '../data';\nimport { hasServerData } from '../../servers/data';\nimport { replaceAuthorityFromUri } from '../../utils/helpers/uri';\nimport { EDIT_DOMAIN_REDIRECTS, EditDomainRedirectsAction } from './domainRedirects';\n\n/* eslint-disable padding-line-between-statements */\nexport const LIST_DOMAINS_START = 'shlink/domainsList/LIST_DOMAINS_START';\nexport const LIST_DOMAINS_ERROR = 'shlink/domainsList/LIST_DOMAINS_ERROR';\nexport const LIST_DOMAINS = 'shlink/domainsList/LIST_DOMAINS';\nexport const FILTER_DOMAINS = 'shlink/domainsList/FILTER_DOMAINS';\nexport const VALIDATE_DOMAIN = 'shlink/domainsList/VALIDATE_DOMAIN';\n/* eslint-enable padding-line-between-statements */\n\nexport interface DomainsList {\n domains: Domain[];\n filteredDomains: Domain[];\n defaultRedirects?: ShlinkDomainRedirects;\n loading: boolean;\n error: boolean;\n errorData?: ProblemDetailsError;\n}\n\nexport interface ListDomainsAction extends Action {\n domains: Domain[];\n defaultRedirects?: ShlinkDomainRedirects;\n}\n\ninterface FilterDomainsAction extends Action {\n searchTerm: string;\n}\n\ninterface ValidateDomain extends Action {\n domain: string;\n status: DomainStatus;\n}\n\nconst initialState: DomainsList = {\n domains: [],\n filteredDomains: [],\n loading: false,\n error: false,\n};\n\nexport type DomainsCombinedAction = ListDomainsAction\n& ApiErrorAction\n& FilterDomainsAction\n& EditDomainRedirectsAction\n& ValidateDomain;\n\nexport const replaceRedirectsOnDomain = (domain: string, redirects: ShlinkDomainRedirects) =>\n (d: Domain): Domain => d.domain !== domain ? d : { ...d, redirects };\n\nexport const replaceStatusOnDomain = (domain: string, status: DomainStatus) =>\n (d: Domain): Domain => d.domain !== domain ? d : { ...d, status };\n\nexport default buildReducer({\n [LIST_DOMAINS_START]: () => ({ ...initialState, loading: true }),\n [LIST_DOMAINS_ERROR]: ({ errorData }) => ({ ...initialState, error: true, errorData }),\n [LIST_DOMAINS]: (_, { domains, defaultRedirects }) =>\n ({ ...initialState, domains, filteredDomains: domains, defaultRedirects }),\n [FILTER_DOMAINS]: (state, { searchTerm }) => ({\n ...state,\n filteredDomains: state.domains.filter(({ domain }) => domain.toLowerCase().match(searchTerm)),\n }),\n [EDIT_DOMAIN_REDIRECTS]: (state, { domain, redirects }) => ({\n ...state,\n domains: state.domains.map(replaceRedirectsOnDomain(domain, redirects)),\n filteredDomains: state.filteredDomains.map(replaceRedirectsOnDomain(domain, redirects)),\n }),\n [VALIDATE_DOMAIN]: (state, { domain, status }) => ({\n ...state,\n domains: state.domains.map(replaceStatusOnDomain(domain, status)),\n filteredDomains: state.filteredDomains.map(replaceStatusOnDomain(domain, status)),\n }),\n}, initialState);\n\nexport const listDomains = (buildShlinkApiClient: ShlinkApiClientBuilder) => () => async (\n dispatch: Dispatch,\n getState: GetState,\n) => {\n dispatch({ type: LIST_DOMAINS_START });\n const { listDomains } = buildShlinkApiClient(getState);\n\n try {\n const { domains, defaultRedirects } = await listDomains().then(({ data, defaultRedirects }) => ({\n domains: data.map((domain): Domain => ({ ...domain, status: 'validating' })),\n defaultRedirects,\n }));\n\n dispatch({ type: LIST_DOMAINS, domains, defaultRedirects });\n } catch (e: any) {\n dispatch({ type: LIST_DOMAINS_ERROR, errorData: parseApiError(e) });\n }\n};\n\nexport const filterDomains = (searchTerm: string): FilterDomainsAction => ({ type: FILTER_DOMAINS, searchTerm });\n\nexport const checkDomainHealth = (buildShlinkApiClient: ShlinkApiClientBuilder) => (domain: string) => async (\n dispatch: Dispatch,\n getState: GetState,\n) => {\n const { selectedServer } = getState();\n\n if (!hasServerData(selectedServer)) {\n dispatch({ type: VALIDATE_DOMAIN, domain, status: 'invalid' });\n\n return;\n }\n\n try {\n const { url, ...rest } = selectedServer;\n const { health } = buildShlinkApiClient({\n ...rest,\n url: replaceAuthorityFromUri(url, domain),\n });\n\n const { status } = await health();\n\n dispatch({ type: VALIDATE_DOMAIN, domain, status: status === 'pass' ? 'valid' : 'invalid' });\n } catch (e) {\n dispatch({ type: VALIDATE_DOMAIN, domain, status: 'invalid' });\n }\n};\n","import { useEffect } from 'react';\nimport { Button, DropdownItem, Input, InputGroup, UncontrolledTooltip, InputProps } from 'reactstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faUndo } from '@fortawesome/free-solid-svg-icons';\nimport { isEmpty, pipe } from 'ramda';\nimport { DropdownBtn } from '../utils/DropdownBtn';\nimport { useToggle } from '../utils/helpers/hooks';\nimport { DomainsList } from './reducers/domainsList';\nimport './DomainSelector.scss';\n\nexport interface DomainSelectorProps extends Omit {\n value?: string;\n onChange: (domain: string) => void;\n}\n\ninterface DomainSelectorConnectProps extends DomainSelectorProps {\n listDomains: Function;\n domainsList: DomainsList;\n}\n\nexport const DomainSelector = ({ listDomains, value, domainsList, onChange }: DomainSelectorConnectProps) => {\n const [ inputDisplayed,, showInput, hideInput ] = useToggle();\n const { domains } = domainsList;\n const valueIsEmpty = isEmpty(value);\n const unselectDomain = () => onChange('');\n\n useEffect(() => {\n listDomains();\n }, []);\n\n return inputDisplayed ? (\n \n onChange(e.target.value)}\n />\n \n \n \n \n Existing domains\n \n \n ) : (\n \n {domains.map(({ domain, isDefault }) => (\n onChange(domain)}\n >\n {domain}\n {isDefault && default}\n \n ))}\n \n \n New domain\n \n \n );\n};\n","import { FC, useState } from 'react';\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';\nimport { ShlinkDomain, ShlinkDomainRedirects } from '../../api/types';\nimport { InputFormGroup, InputFormGroupProps } from '../../utils/forms/InputFormGroup';\nimport { handleEventPreventingDefault, nonEmptyValueOrNull } from '../../utils/utils';\nimport { InfoTooltip } from '../../utils/InfoTooltip';\n\ninterface EditDomainRedirectsModalProps {\n domain: ShlinkDomain;\n isOpen: boolean;\n toggle: () => void;\n editDomainRedirects: (domain: string, redirects: Partial) => Promise;\n}\n\nconst FormGroup: FC = ({ isLast, ...rest }) => (\n \n);\n\nexport const EditDomainRedirectsModal: FC = (\n { isOpen, toggle, domain, editDomainRedirects },\n) => {\n const [ baseUrlRedirect, setBaseUrlRedirect ] = useState(domain.redirects?.baseUrlRedirect ?? '');\n const [ regular404Redirect, setRegular404Redirect ] = useState(domain.redirects?.regular404Redirect ?? '');\n const [ invalidShortUrlRedirect, setInvalidShortUrlRedirect ] = useState(\n domain.redirects?.invalidShortUrlRedirect ?? '',\n );\n const handleSubmit = handleEventPreventingDefault(async () => editDomainRedirects(domain.domain, {\n baseUrlRedirect: nonEmptyValueOrNull(baseUrlRedirect),\n regular404Redirect: nonEmptyValueOrNull(regular404Redirect),\n invalidShortUrlRedirect: nonEmptyValueOrNull(invalidShortUrlRedirect),\n }).then(toggle));\n\n return (\n \n
\n Edit redirects for {domain.domain}\n \n \n \n Visitors accessing the base url, as in https://{domain.domain}/, will be redirected to this URL.\n \n Base URL\n \n \n \n Visitors accessing a url not matching a short URL pattern, as in https://{domain.domain}/???/[...],\n will be redirected to this URL.\n \n Regular 404\n \n \n \n Visitors accessing a url matching a short URL pattern, but not matching an existing short code, will be\n redirected to this URL.\n \n Invalid short URL\n \n \n \n \n \n \n
\n
\n );\n};\n","import { FC, useEffect, useRef, useState } from 'react';\nimport { UncontrolledTooltip } from 'reactstrap';\nimport { ExternalLink } from 'react-external-link';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faTimes as invalidIcon,\n faCheck as checkIcon,\n faCircleNotch as loadingStatusIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { MediaMatcher } from '../../utils/types';\nimport { DomainStatus } from '../data';\n\ninterface DomainStatusIconProps {\n status: DomainStatus;\n matchMedia?: MediaMatcher;\n}\n\nexport const DomainStatusIcon: FC = ({ status, matchMedia = window.matchMedia }) => {\n const ref = useRef();\n const matchesMobile = () => matchMedia('(max-width: 991px)').matches;\n const [ isMobile, setIsMobile ] = useState(matchesMobile());\n\n useEffect(() => {\n const listener = () => setIsMobile(matchesMobile());\n\n window.addEventListener('resize', listener);\n\n return () => window.removeEventListener('resize', listener);\n }, []);\n\n if (status === 'validating') {\n return ;\n }\n\n return (\n <>\n {\n ref.current = el;\n }}\n >\n {status === 'valid'\n ? \n : }\n \n ref.current) as any}\n placement={isMobile ? 'top-start' : 'left'}\n autohide={status === 'valid'}\n >\n {status === 'valid' ? 'Congratulations! This domain is properly configured.' : (\n \n Oops! There is some missing configuration, and short URLs shared with this domain will not work.\n
\n Check the documentation in order to\n find out what is missing.\n
\n )}\n \n \n );\n};\n","import { FC, useEffect } from 'react';\nimport { Button, UncontrolledTooltip } from 'reactstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faBan as forbiddenIcon,\n faDotCircle as defaultDomainIcon,\n faEdit as editIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { ShlinkDomainRedirects } from '../api/types';\nimport { useToggle } from '../utils/helpers/hooks';\nimport { OptionalString } from '../utils/utils';\nimport { SelectedServer } from '../servers/data';\nimport { supportsDefaultDomainRedirectsEdition } from '../utils/helpers/features';\nimport { EditDomainRedirectsModal } from './helpers/EditDomainRedirectsModal';\nimport { Domain } from './data';\nimport { DomainStatusIcon } from './helpers/DomainStatusIcon';\n\ninterface DomainRowProps {\n domain: Domain;\n defaultRedirects?: ShlinkDomainRedirects;\n editDomainRedirects: (domain: string, redirects: Partial) => Promise;\n checkDomainHealth: (domain: string) => void;\n selectedServer: SelectedServer;\n}\n\nconst Nr: FC<{ fallback: OptionalString }> = ({ fallback }) => (\n \n {!fallback && No redirect}\n {fallback && <>{fallback} (as fallback)}\n \n);\nconst DefaultDomain: FC = () => (\n <>\n \n Default domain\n \n);\n\nexport const DomainRow: FC = (\n { domain, editDomainRedirects, checkDomainHealth, defaultRedirects, selectedServer },\n) => {\n const [ isOpen, toggle ] = useToggle();\n const { domain: authority, isDefault, redirects, status } = domain;\n const canEditDomain = !isDefault || supportsDefaultDomainRedirectsEdition(selectedServer);\n\n useEffect(() => {\n checkDomainHealth(domain.domain);\n }, []);\n\n return (\n \n {isDefault && }\n {authority}\n \n {redirects?.baseUrlRedirect ?? }\n \n \n {redirects?.regular404Redirect ?? }\n \n \n {redirects?.invalidShortUrlRedirect ?? }\n \n \n \n \n \n \n \n \n {!canEditDomain && (\n \n Redirects for default domain cannot be edited here.\n
\n Use config options or env vars directly on the server.\n
\n )}\n \n \n \n );\n};\n","import { FC, useEffect } from 'react';\nimport Message from '../utils/Message';\nimport { Result } from '../utils/Result';\nimport { ShlinkApiError } from '../api/ShlinkApiError';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport SearchField from '../utils/SearchField';\nimport { ShlinkDomainRedirects } from '../api/types';\nimport { SelectedServer } from '../servers/data';\nimport { DomainsList } from './reducers/domainsList';\nimport { DomainRow } from './DomainRow';\n\ninterface ManageDomainsProps {\n listDomains: Function;\n filterDomains: (searchTerm: string) => void;\n editDomainRedirects: (domain: string, redirects: Partial) => Promise;\n checkDomainHealth: (domain: string) => void;\n domainsList: DomainsList;\n selectedServer: SelectedServer;\n}\n\nconst headers = [ '', 'Domain', 'Base path redirect', 'Regular 404 redirect', 'Invalid short URL redirect', '', '' ];\n\nexport const ManageDomains: FC = (\n { listDomains, domainsList, filterDomains, editDomainRedirects, checkDomainHealth, selectedServer },\n) => {\n const { filteredDomains: domains, defaultRedirects, loading, error, errorData } = domainsList;\n const resolvedDefaultRedirects = defaultRedirects ?? domains.find(({ isDefault }) => isDefault)?.redirects;\n\n useEffect(() => {\n listDomains();\n }, []);\n\n if (loading) {\n return ;\n }\n\n const renderContent = () => {\n if (error) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n {headers.map((column, index) => )}\n \n \n {domains.length < 1 && }\n {domains.map((domain) => (\n \n ))}\n \n
{column}
No results found
\n
\n );\n };\n\n return (\n <>\n \n {renderContent()}\n \n );\n};\n","import Bottle from 'bottlejs';\nimport { ConnectDecorator } from '../../container/types';\nimport { checkDomainHealth, filterDomains, listDomains } from '../reducers/domainsList';\nimport { DomainSelector } from '../DomainSelector';\nimport { ManageDomains } from '../ManageDomains';\nimport { editDomainRedirects } from '../reducers/domainRedirects';\n\nconst provideServices = (bottle: Bottle, connect: ConnectDecorator) => {\n // Components\n bottle.serviceFactory('DomainSelector', () => DomainSelector);\n bottle.decorator('DomainSelector', connect([ 'domainsList' ], [ 'listDomains' ]));\n\n bottle.serviceFactory('ManageDomains', () => ManageDomains);\n bottle.decorator('ManageDomains', connect(\n [ 'domainsList', 'selectedServer' ],\n [ 'listDomains', 'filterDomains', 'editDomainRedirects', 'checkDomainHealth' ],\n ));\n\n // Actions\n bottle.serviceFactory('listDomains', listDomains, 'buildShlinkApiClient');\n bottle.serviceFactory('filterDomains', () => filterDomains);\n bottle.serviceFactory('editDomainRedirects', editDomainRedirects, 'buildShlinkApiClient');\n bottle.serviceFactory('checkDomainHealth', checkDomainHealth, 'buildShlinkApiClient');\n};\n\nexport default provideServices;\n","import { Action } from 'redux';\nimport { buildActionCreator, buildReducer } from '../../utils/helpers/redux';\n\n/* eslint-disable padding-line-between-statements */\nexport const APP_UPDATE_AVAILABLE = 'shlink/appUpdates/APP_UPDATE_AVAILABLE';\nexport const RESET_APP_UPDATE = 'shlink/appUpdates/RESET_APP_UPDATE';\n/* eslint-enable padding-line-between-statements */\n\nconst initialState = false;\n\nexport default buildReducer>({\n [APP_UPDATE_AVAILABLE]: () => true,\n [RESET_APP_UPDATE]: () => false,\n}, initialState);\n\nexport const appUpdateAvailable = buildActionCreator(APP_UPDATE_AVAILABLE);\n\nexport const resetAppUpdate = buildActionCreator(RESET_APP_UPDATE);\n","import { FC, MouseEventHandler } from 'react';\nimport { Alert, Button } from 'reactstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSyncAlt as reloadIcon } from '@fortawesome/free-solid-svg-icons';\nimport { SimpleCard } from '../utils/SimpleCard';\nimport { useToggle } from '../utils/helpers/hooks';\nimport './AppUpdateBanner.scss';\n\ninterface AppUpdateBannerProps {\n isOpen: boolean;\n toggle: MouseEventHandler;\n forceUpdate: Function;\n}\n\nexport const AppUpdateBanner: FC = ({ isOpen, toggle, forceUpdate }) => {\n const [ isUpdating,, setUpdating ] = useToggle();\n const update = () => {\n setUpdating();\n forceUpdate();\n };\n\n return (\n \n

This app has just been updated!

\n

\n Restart it to enjoy the new features.\n \n

\n
\n );\n};\n","export const forceUpdate = async () => {\n const registrations = await navigator.serviceWorker?.getRegistrations() ?? [];\n\n for (const registration of registrations) {\n const { waiting } = registration;\n\n waiting?.addEventListener('statechange', (event) => {\n if ((event.target as any)?.state === 'activated') {\n window.location.reload();\n }\n });\n\n // The logic that makes skipWaiting to be called when this message is posted is in service-worker.ts\n waiting?.postMessage({ type: 'SKIP_WAITING' });\n }\n};\n","import { useEffect, FC } from 'react';\nimport { Route, Routes, useLocation } from 'react-router-dom';\nimport classNames from 'classnames';\nimport NotFound from '../common/NotFound';\nimport { ServersMap } from '../servers/data';\nimport { Settings } from '../settings/reducers/settings';\nimport { changeThemeInMarkup } from '../utils/theme';\nimport { AppUpdateBanner } from '../common/AppUpdateBanner';\nimport { forceUpdate } from '../utils/helpers/sw';\nimport './App.scss';\n\ninterface AppProps {\n fetchServers: () => void;\n servers: ServersMap;\n settings: Settings;\n resetAppUpdate: () => void;\n appUpdated: boolean;\n}\n\nconst App = (\n MainHeader: FC,\n Home: FC,\n MenuLayout: FC,\n CreateServer: FC,\n EditServer: FC,\n Settings: FC,\n ManageServers: FC,\n ShlinkVersionsContainer: FC,\n) => ({ fetchServers, servers, settings, appUpdated, resetAppUpdate }: AppProps) => {\n const location = useLocation();\n const isHome = location.pathname === '/';\n\n useEffect(() => {\n // On first load, try to fetch the remote servers if the list is empty\n if (Object.keys(servers).length === 0) {\n fetchServers();\n }\n\n changeThemeInMarkup(settings.ui?.theme ?? 'light');\n }, []);\n\n return (\n
\n \n\n
\n
\n \n } />\n } />\n } />\n } />\n } />\n } />\n } />\n \n
\n\n
\n \n
\n
\n\n \n
\n );\n};\n\nexport default App;\n","import Bottle from 'bottlejs';\nimport { appUpdateAvailable, resetAppUpdate } from '../reducers/appUpdates';\nimport App from '../App';\nimport { ConnectDecorator } from '../../container/types';\n\nconst provideServices = (bottle: Bottle, connect: ConnectDecorator) => {\n // Components\n bottle.serviceFactory(\n 'App',\n App,\n 'MainHeader',\n 'Home',\n 'MenuLayout',\n 'CreateServer',\n 'EditServer',\n 'Settings',\n 'ManageServers',\n 'ShlinkVersionsContainer',\n );\n bottle.decorator('App', connect([ 'servers', 'settings', 'appUpdated' ], [ 'fetchServers', 'resetAppUpdate' ]));\n\n // Actions\n bottle.serviceFactory('appUpdateAvailable', () => appUpdateAvailable);\n bottle.serviceFactory('resetAppUpdate', () => resetAppUpdate);\n};\n\nexport default provideServices;\n","import Bottle, { IContainer } from 'bottlejs';\nimport { connect as reduxConnect } from 'react-redux';\nimport { pick } from 'ramda';\nimport provideApiServices from '../api/services/provideServices';\nimport provideCommonServices from '../common/services/provideServices';\nimport provideShortUrlsServices from '../short-urls/services/provideServices';\nimport provideServersServices from '../servers/services/provideServices';\nimport provideVisitsServices from '../visits/services/provideServices';\nimport provideTagsServices from '../tags/services/provideServices';\nimport provideUtilsServices from '../utils/services/provideServices';\nimport provideMercureServices from '../mercure/services/provideServices';\nimport provideSettingsServices from '../settings/services/provideServices';\nimport provideDomainsServices from '../domains/services/provideServices';\nimport provideAppServices from '../app/services/provideServices';\nimport { ConnectDecorator } from './types';\n\ntype LazyActionMap = Record;\n\nconst bottle = new Bottle();\n\nexport const { container } = bottle;\n\nconst lazyService = (container: IContainer, serviceName: string) =>\n (...args: any[]) => (container[serviceName] as T)(...args) as K;\nconst mapActionService = (map: LazyActionMap, actionName: string): LazyActionMap => ({\n ...map,\n // Wrap actual action service in a function so that it is lazily created the first time it is called\n [actionName]: lazyService(container, actionName),\n});\nconst connect: ConnectDecorator = (propsFromState: string[] | null, actionServiceNames: string[] = []) =>\n reduxConnect(\n propsFromState ? pick(propsFromState) : null,\n actionServiceNames.reduce(mapActionService, {}),\n );\n\nprovideAppServices(bottle, connect);\nprovideCommonServices(bottle, connect);\nprovideApiServices(bottle);\nprovideShortUrlsServices(bottle, connect);\nprovideServersServices(bottle, connect);\nprovideTagsServices(bottle, connect);\nprovideVisitsServices(bottle, connect);\nprovideUtilsServices(bottle);\nprovideMercureServices(bottle);\nprovideSettingsServices(bottle, connect);\nprovideDomainsServices(bottle, connect);\n","import { combineReducers } from 'redux';\nimport serversReducer from '../servers/reducers/servers';\nimport selectedServerReducer from '../servers/reducers/selectedServer';\nimport shortUrlsListReducer from '../short-urls/reducers/shortUrlsList';\nimport shortUrlCreationReducer from '../short-urls/reducers/shortUrlCreation';\nimport shortUrlDeletionReducer from '../short-urls/reducers/shortUrlDeletion';\nimport shortUrlEditionReducer from '../short-urls/reducers/shortUrlEdition';\nimport shortUrlVisitsReducer from '../visits/reducers/shortUrlVisits';\nimport tagVisitsReducer from '../visits/reducers/tagVisits';\nimport orphanVisitsReducer from '../visits/reducers/orphanVisits';\nimport nonOrphanVisitsReducer from '../visits/reducers/nonOrphanVisits';\nimport shortUrlDetailReducer from '../short-urls/reducers/shortUrlDetail';\nimport tagsListReducer from '../tags/reducers/tagsList';\nimport tagDeleteReducer from '../tags/reducers/tagDelete';\nimport tagEditReducer from '../tags/reducers/tagEdit';\nimport mercureInfoReducer from '../mercure/reducers/mercureInfo';\nimport settingsReducer from '../settings/reducers/settings';\nimport domainsListReducer from '../domains/reducers/domainsList';\nimport visitsOverviewReducer from '../visits/reducers/visitsOverview';\nimport appUpdatesReducer from '../app/reducers/appUpdates';\nimport { ShlinkState } from '../container/types';\n\nexport default combineReducers({\n servers: serversReducer,\n selectedServer: selectedServerReducer,\n shortUrlsList: shortUrlsListReducer,\n shortUrlCreationResult: shortUrlCreationReducer,\n shortUrlDeletion: shortUrlDeletionReducer,\n shortUrlEdition: shortUrlEditionReducer,\n shortUrlVisits: shortUrlVisitsReducer,\n tagVisits: tagVisitsReducer,\n orphanVisits: orphanVisitsReducer,\n nonOrphanVisits: nonOrphanVisitsReducer,\n shortUrlDetail: shortUrlDetailReducer,\n tagsList: tagsListReducer,\n tagDelete: tagDeleteReducer,\n tagEdit: tagEditReducer,\n mercureInfo: mercureInfoReducer,\n settings: settingsReducer,\n domainsList: domainsListReducer,\n visitsOverview: visitsOverviewReducer,\n appUpdated: appUpdatesReducer,\n});\n","import ReduxThunk from 'redux-thunk';\nimport { applyMiddleware, compose, createStore } from 'redux';\nimport { save, load, RLSOptions } from 'redux-localstorage-simple';\nimport reducers from '../reducers';\nimport { migrateDeprecatedSettings } from '../settings/helpers';\nimport { ShlinkState } from './types';\n\nconst isProduction = process.env.NODE_ENV !== 'production';\nconst composeEnhancers: Function = !isProduction && (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n\nconst localStorageConfig: RLSOptions = {\n states: [ 'settings', 'servers' ],\n namespace: 'shlink',\n namespaceSeparator: '.',\n debounce: 300,\n};\nconst preloadedState = migrateDeprecatedSettings(load(localStorageConfig) as ShlinkState);\n\nexport const store = createStore(reducers, preloadedState, composeEnhancers(\n applyMiddleware(save(localStorageConfig), ReduxThunk),\n));\n","import { ShlinkState } from '../../container/types';\n\nexport const migrateDeprecatedSettings = (state: Partial): Partial => {\n if (!state.settings) {\n return state;\n }\n\n // The \"last180Days\" interval had a typo, with a lowercase d\n if ((state.settings.visits?.defaultInterval as any) === 'last180days') {\n state.settings.visits && (state.settings.visits.defaultInterval = 'last180Days');\n }\n\n // The \"tags display mode\" option has been moved from \"ui\" to \"tags\"\n state.settings.tags = {\n ...state.settings.tags,\n defaultMode: state.settings.tags?.defaultMode ?? (state.settings.ui as any)?.tagsMode,\n };\n state.settings.ui && delete (state.settings.ui as any).tagsMode;\n\n return state;\n};\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://cra.link/PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL ?? '', window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://cra.link/PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://cra.link/PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import L from 'leaflet';\nimport marker2x from 'leaflet/dist/images/marker-icon-2x.png';\nimport marker from 'leaflet/dist/images/marker-icon.png';\nimport markerShadow from 'leaflet/dist/images/marker-shadow.png';\n\nexport const fixLeafletIcons = () => {\n delete (L.Icon.Default.prototype as any)._getIconUrl;\n\n L.Icon.Default.mergeOptions({\n iconRetinaUrl: marker2x,\n iconUrl: marker,\n shadowUrl: markerShadow,\n });\n};\n","import { render } from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { BrowserRouter } from 'react-router-dom';\nimport { homepage } from '../package.json';\nimport { container } from './container';\nimport { store } from './container/store';\nimport { fixLeafletIcons } from './utils/helpers/leaflet';\nimport { register as registerServiceWorker } from './serviceWorkerRegistration';\nimport 'react-datepicker/dist/react-datepicker.css';\nimport 'leaflet/dist/leaflet.css';\nimport './index.scss';\n\n// This overwrites icons used for leaflet maps, fixing some issues caused by webpack while processing the CSS\nfixLeafletIcons();\n\nconst { App, ScrollToTop, ErrorHandler, appUpdateAvailable } = container;\n\nrender(\n \n \n \n \n \n \n \n \n ,\n document.getElementById('root'),\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://cra.link/PWA\nregisterServiceWorker({\n onUpdate() {\n store.dispatch(appUpdateAvailable()); // eslint-disable-line @typescript-eslint/no-unsafe-call\n },\n});\n","import { FC } from 'react';\nimport './NoMenuLayout.scss';\n\nexport const NoMenuLayout: FC = ({ children }) =>
{children}
;\n","import { compare } from 'compare-versions';\nimport { identity, memoizeWith } from 'ramda';\nimport { Empty, hasValue } from '../utils';\n\ntype SemVerPatternFragment = `${bigint | '*'}`;\n\nexport type SemVerPattern = SemVerPatternFragment\n| `${SemVerPatternFragment}.${SemVerPatternFragment}`\n| `${SemVerPatternFragment}.${SemVerPatternFragment}.${SemVerPatternFragment}`;\n\nexport interface Versions {\n maxVersion?: SemVerPattern;\n minVersion?: SemVerPattern;\n}\n\nexport type SemVer = `${bigint}.${bigint}.${bigint}` | 'latest';\n\nexport const versionMatch = (versionToMatch: SemVer | Empty, { maxVersion, minVersion }: Versions): boolean => {\n if (!hasValue(versionToMatch)) {\n return false;\n }\n\n const matchesMinVersion = !minVersion || compare(versionToMatch, minVersion, '>=');\n const matchesMaxVersion = !maxVersion || compare(versionToMatch, maxVersion, '<=');\n\n return matchesMaxVersion && matchesMinVersion;\n};\n\nconst versionIsValidSemVer = memoizeWith(identity, (version: string): version is SemVer => {\n try {\n return compare(version, version, '=');\n } catch (e) {\n return false;\n }\n});\n\nexport const versionToPrintable = (version: string) => !versionIsValidSemVer(version) ? version : `v${version}`;\n\nexport const versionToSemVer = (defaultValue: SemVer = 'latest') =>\n (version: string): SemVer => versionIsValidSemVer(version) ? version : defaultValue;\n","import { FC, useEffect } from 'react';\n\ninterface WithoutSelectedServerProps {\n resetSelectedServer: Function;\n}\n\nexport function withoutSelectedServer(WrappedComponent: FC) {\n return (props: WithoutSelectedServerProps & T) => {\n useEffect(() => {\n props.resetSelectedServer();\n }, []);\n\n return ;\n };\n}\n","export const saveUrl = ({ document }: Window, url: string, filename: string) => {\n const link = document.createElement('a');\n\n link.setAttribute('href', url);\n link.setAttribute('download', filename);\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\nexport const saveCsv = (window: Window, csv: string, filename: string) => {\n const blob = new Blob([ csv ], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n\n saveUrl(window, url, filename);\n};\n"],"sourceRoot":""} \ No newline at end of file