From 2ad0df4a75f5d62523a2447830e1415e50b24283 Mon Sep 17 00:00:00 2001 From: David Miller Date: Mon, 16 Mar 2020 18:07:13 -0400 Subject: [PATCH 001/161] v6 reorganization and dev environment update moved to cdn for third party assets, changed project structure to have src and dist directoires, moved to npm scripts based dev environment dropping the gulp dependencies --- .browserslistrc | 13 - .gitignore | 3 +- .travis.yml | 1 - LICENSE | 2 +- css/freelancer.min.css | 10 - {img => dist/assets/img}/avataaars.svg | 0 {img => dist/assets/img}/portfolio/cabin.png | Bin {img => dist/assets/img}/portfolio/cake.png | Bin {img => dist/assets/img}/portfolio/circus.png | Bin {img => dist/assets/img}/portfolio/game.png | Bin {img => dist/assets/img}/portfolio/safe.png | Bin .../assets/img}/portfolio/submarine.png | Bin {js => dist/assets/mail}/contact_me.js | 2 +- {mail => dist/assets/mail}/contact_me.php | 2 +- .../assets/mail}/jqBootstrapValidation.js | 0 css/freelancer.css => dist/css/styles.css | 3108 +++-- dist/index.html | 401 + dist/js/scripts.js | 69 + gulpfile.js | 135 - index.html | 575 - js/contact_me.min.js | 7 - js/freelancer.js | 63 - js/freelancer.min.js | 7 - js/jqBootstrapValidation.min.js | 7 - package-lock.json | 4238 ++---- package.json | 39 +- scripts/build-assets.js | 5 + scripts/build-pug.js | 19 + scripts/build-scripts.js | 5 + scripts/build-scss.js | 5 + scripts/clean.js | 7 + scripts/render-assets.js | 11 + scripts/render-pug.js | 34 + scripts/render-scripts.js | 25 + scripts/render-scss.js | 42 + scripts/sb-watch.js | 86 + scripts/start-debug.js | 24 + scripts/start.js | 24 + scss/base/_page.scss | 14 - scss/freelancer.scss | 19 - src/assets/img/avataaars.svg | 248 + src/assets/img/portfolio/cabin.png | Bin 0 -> 36514 bytes src/assets/img/portfolio/cake.png | Bin 0 -> 17068 bytes src/assets/img/portfolio/circus.png | Bin 0 -> 27984 bytes src/assets/img/portfolio/game.png | Bin 0 -> 25896 bytes src/assets/img/portfolio/safe.png | Bin 0 -> 19240 bytes src/assets/img/portfolio/submarine.png | Bin 0 -> 24330 bytes src/assets/mail/contact_me.js | 75 + src/assets/mail/contact_me.php | 22 + src/assets/mail/jqBootstrapValidation.js | 912 ++ src/js/scripts.js | 64 + src/pug/index.pug | 394 + {scss/components => src/scss}/_buttons.scss | 2 +- {scss/layout => src/scss}/_contact.scss | 2 - {scss/components => src/scss}/_divider.scss | 0 {scss/layout => src/scss}/_footer.scss | 0 src/scss/_global.scss | 15 + {scss/layout => src/scss}/_masthead.scss | 0 {scss/layout => src/scss}/_navbar.scss | 0 {scss/layout => src/scss}/_portfolio.scss | 0 {scss/base => src/scss}/_variables.scss | 0 src/scss/styles.scss | 15 + vendor/bootstrap/js/bootstrap.bundle.js | 7013 ---------- vendor/bootstrap/js/bootstrap.bundle.js.map | 1 - vendor/bootstrap/js/bootstrap.bundle.min.js | 7 - .../bootstrap/js/bootstrap.bundle.min.js.map | 1 - vendor/bootstrap/js/bootstrap.js | 4435 ------- vendor/bootstrap/js/bootstrap.js.map | 1 - vendor/bootstrap/js/bootstrap.min.js | 7 - vendor/bootstrap/js/bootstrap.min.js.map | 1 - vendor/fontawesome-free/css/all.css | 4396 ------- vendor/fontawesome-free/css/all.min.css | 5 - vendor/fontawesome-free/css/brands.css | 14 - vendor/fontawesome-free/css/brands.min.css | 5 - vendor/fontawesome-free/css/fontawesome.css | 4363 ------- .../fontawesome-free/css/fontawesome.min.css | 5 - vendor/fontawesome-free/css/regular.css | 15 - vendor/fontawesome-free/css/regular.min.css | 5 - vendor/fontawesome-free/css/solid.css | 16 - vendor/fontawesome-free/css/solid.min.css | 5 - vendor/fontawesome-free/css/svg-with-js.css | 371 - .../fontawesome-free/css/svg-with-js.min.css | 5 - vendor/fontawesome-free/css/v4-shims.css | 2166 ---- vendor/fontawesome-free/css/v4-shims.min.css | 5 - .../webfonts/fa-brands-400.eot | Bin 129590 -> 0 bytes .../webfonts/fa-brands-400.svg | 3449 ----- .../webfonts/fa-brands-400.ttf | Bin 129284 -> 0 bytes .../webfonts/fa-brands-400.woff | Bin 87520 -> 0 bytes .../webfonts/fa-brands-400.woff2 | Bin 74524 -> 0 bytes .../webfonts/fa-regular-400.eot | Bin 34394 -> 0 bytes .../webfonts/fa-regular-400.svg | 803 -- .../webfonts/fa-regular-400.ttf | Bin 34096 -> 0 bytes .../webfonts/fa-regular-400.woff | Bin 16804 -> 0 bytes .../webfonts/fa-regular-400.woff2 | Bin 13584 -> 0 bytes .../webfonts/fa-solid-900.eot | Bin 192122 -> 0 bytes .../webfonts/fa-solid-900.svg | 4649 ------- .../webfonts/fa-solid-900.ttf | Bin 191836 -> 0 bytes .../webfonts/fa-solid-900.woff | Bin 98016 -> 0 bytes .../webfonts/fa-solid-900.woff2 | Bin 75408 -> 0 bytes .../jquery.easing.compatibility.js | 59 - vendor/jquery-easing/jquery.easing.js | 166 - vendor/jquery-easing/jquery.easing.min.js | 1 - vendor/jquery/jquery.js | 10598 ---------------- vendor/jquery/jquery.min.js | 2 - vendor/jquery/jquery.min.map | 1 - vendor/jquery/jquery.slim.js | 8495 ------------- vendor/jquery/jquery.slim.min.js | 2 - vendor/jquery/jquery.slim.min.map | 1 - 108 files changed, 5480 insertions(+), 56339 deletions(-) delete mode 100644 .browserslistrc delete mode 100644 css/freelancer.min.css rename {img => dist/assets/img}/avataaars.svg (100%) rename {img => dist/assets/img}/portfolio/cabin.png (100%) rename {img => dist/assets/img}/portfolio/cake.png (100%) rename {img => dist/assets/img}/portfolio/circus.png (100%) rename {img => dist/assets/img}/portfolio/game.png (100%) rename {img => dist/assets/img}/portfolio/safe.png (100%) rename {img => dist/assets/img}/portfolio/submarine.png (100%) rename {js => dist/assets/mail}/contact_me.js (98%) rename {mail => dist/assets/mail}/contact_me.php (86%) rename {js => dist/assets/mail}/jqBootstrapValidation.js (100%) rename css/freelancer.css => dist/css/styles.css (84%) create mode 100644 dist/index.html create mode 100644 dist/js/scripts.js delete mode 100644 gulpfile.js delete mode 100644 index.html delete mode 100644 js/contact_me.min.js delete mode 100644 js/freelancer.js delete mode 100644 js/freelancer.min.js delete mode 100644 js/jqBootstrapValidation.min.js create mode 100644 scripts/build-assets.js create mode 100644 scripts/build-pug.js create mode 100644 scripts/build-scripts.js create mode 100644 scripts/build-scss.js create mode 100644 scripts/clean.js create mode 100644 scripts/render-assets.js create mode 100644 scripts/render-pug.js create mode 100644 scripts/render-scripts.js create mode 100644 scripts/render-scss.js create mode 100644 scripts/sb-watch.js create mode 100644 scripts/start-debug.js create mode 100644 scripts/start.js delete mode 100644 scss/base/_page.scss delete mode 100644 scss/freelancer.scss create mode 100644 src/assets/img/avataaars.svg create mode 100644 src/assets/img/portfolio/cabin.png create mode 100644 src/assets/img/portfolio/cake.png create mode 100644 src/assets/img/portfolio/circus.png create mode 100644 src/assets/img/portfolio/game.png create mode 100644 src/assets/img/portfolio/safe.png create mode 100644 src/assets/img/portfolio/submarine.png create mode 100644 src/assets/mail/contact_me.js create mode 100644 src/assets/mail/contact_me.php create mode 100644 src/assets/mail/jqBootstrapValidation.js create mode 100644 src/js/scripts.js create mode 100644 src/pug/index.pug rename {scss/components => src/scss}/_buttons.scss (93%) rename {scss/layout => src/scss}/_contact.scss (95%) rename {scss/components => src/scss}/_divider.scss (100%) rename {scss/layout => src/scss}/_footer.scss (100%) create mode 100644 src/scss/_global.scss rename {scss/layout => src/scss}/_masthead.scss (100%) rename {scss/layout => src/scss}/_navbar.scss (100%) rename {scss/layout => src/scss}/_portfolio.scss (100%) rename {scss/base => src/scss}/_variables.scss (100%) create mode 100644 src/scss/styles.scss delete mode 100644 vendor/bootstrap/js/bootstrap.bundle.js delete mode 100644 vendor/bootstrap/js/bootstrap.bundle.js.map delete mode 100644 vendor/bootstrap/js/bootstrap.bundle.min.js delete mode 100644 vendor/bootstrap/js/bootstrap.bundle.min.js.map delete mode 100644 vendor/bootstrap/js/bootstrap.js delete mode 100644 vendor/bootstrap/js/bootstrap.js.map delete mode 100644 vendor/bootstrap/js/bootstrap.min.js delete mode 100644 vendor/bootstrap/js/bootstrap.min.js.map delete mode 100644 vendor/fontawesome-free/css/all.css delete mode 100644 vendor/fontawesome-free/css/all.min.css delete mode 100644 vendor/fontawesome-free/css/brands.css delete mode 100644 vendor/fontawesome-free/css/brands.min.css delete mode 100644 vendor/fontawesome-free/css/fontawesome.css delete mode 100644 vendor/fontawesome-free/css/fontawesome.min.css delete mode 100644 vendor/fontawesome-free/css/regular.css delete mode 100644 vendor/fontawesome-free/css/regular.min.css delete mode 100644 vendor/fontawesome-free/css/solid.css delete mode 100644 vendor/fontawesome-free/css/solid.min.css delete mode 100644 vendor/fontawesome-free/css/svg-with-js.css delete mode 100644 vendor/fontawesome-free/css/svg-with-js.min.css delete mode 100644 vendor/fontawesome-free/css/v4-shims.css delete mode 100644 vendor/fontawesome-free/css/v4-shims.min.css delete mode 100644 vendor/fontawesome-free/webfonts/fa-brands-400.eot delete mode 100644 vendor/fontawesome-free/webfonts/fa-brands-400.svg delete mode 100644 vendor/fontawesome-free/webfonts/fa-brands-400.ttf delete mode 100644 vendor/fontawesome-free/webfonts/fa-brands-400.woff delete mode 100644 vendor/fontawesome-free/webfonts/fa-brands-400.woff2 delete mode 100644 vendor/fontawesome-free/webfonts/fa-regular-400.eot delete mode 100644 vendor/fontawesome-free/webfonts/fa-regular-400.svg delete mode 100644 vendor/fontawesome-free/webfonts/fa-regular-400.ttf delete mode 100644 vendor/fontawesome-free/webfonts/fa-regular-400.woff delete mode 100644 vendor/fontawesome-free/webfonts/fa-regular-400.woff2 delete mode 100644 vendor/fontawesome-free/webfonts/fa-solid-900.eot delete mode 100644 vendor/fontawesome-free/webfonts/fa-solid-900.svg delete mode 100644 vendor/fontawesome-free/webfonts/fa-solid-900.ttf delete mode 100644 vendor/fontawesome-free/webfonts/fa-solid-900.woff delete mode 100644 vendor/fontawesome-free/webfonts/fa-solid-900.woff2 delete mode 100755 vendor/jquery-easing/jquery.easing.compatibility.js delete mode 100755 vendor/jquery-easing/jquery.easing.js delete mode 100755 vendor/jquery-easing/jquery.easing.min.js delete mode 100644 vendor/jquery/jquery.js delete mode 100644 vendor/jquery/jquery.min.js delete mode 100644 vendor/jquery/jquery.min.map delete mode 100644 vendor/jquery/jquery.slim.js delete mode 100644 vendor/jquery/jquery.slim.min.js delete mode 100644 vendor/jquery/jquery.slim.min.map diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index 66df8f4f8..000000000 --- a/.browserslistrc +++ /dev/null @@ -1,13 +0,0 @@ -# https://github.com/browserslist/browserslist#readme - ->= 1% -last 1 major version -not dead -Chrome >= 60 -Firefox >= 60 -Edge >= 15.15063 -Explorer 11 -iOS >= 10 -Safari >= 10 -Android >= 6 -not ExplorerMobile <= 11 diff --git a/.gitignore b/.gitignore index b512c09d4..28f1ba756 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -node_modules \ No newline at end of file +node_modules +.DS_Store \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 9662ddf52..07b680834 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,6 @@ node_js: install: npm install script: - npm test - - gulp cache: directories: - node_modules diff --git a/LICENSE b/LICENSE index 947816433..63e30fd18 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013-2019 Blackrock Digital LLC +Copyright (c) 2013-2020 Blackrock Digital LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/css/freelancer.min.css b/css/freelancer.min.css deleted file mode 100644 index bd4620f82..000000000 --- a/css/freelancer.min.css +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * Start Bootstrap - Freelancer v5.1.3 (https://startbootstrap.com/template-overviews/freelancer) - * Copyright 2013-2019 Start Bootstrap - * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/master/LICENSE) - *//*! - * Bootstrap v4.3.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#1abc9c;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#1abc9c;--secondary:#2c3e50;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Lato",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Lato,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}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{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#1abc9c;text-decoration:none;background-color:transparent}a:hover{color:#117964;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[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}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:Montserrat,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:700;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:.125rem solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.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:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:.125rem solid #dee2e6;border-radius:.5rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.25rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:.125rem solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:.25rem solid #dee2e6}.table tbody+tbody{border-top:.25rem solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:.125rem solid #dee2e6}.table-bordered td,.table-bordered th{border:.125rem solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:.25rem}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#bfece3}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#88dccc}.table-hover .table-primary:hover{background-color:#abe6da}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#abe6da}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#c4c9ce}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#919ba4}.table-hover .table-secondary:hover{background-color:#b6bcc2}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#b6bcc2}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + .25rem);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:.125rem solid #ced4da;border-radius:.5rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#6bebd1;outline:0;box-shadow:0 0 0 .2rem rgba(26,188,156,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + .125rem);padding-bottom:calc(.375rem + .125rem);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + .125rem);padding-bottom:calc(.5rem + .125rem);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + .125rem);padding-bottom:calc(.25rem + .125rem);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:.125rem 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + .25rem);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.25rem}.form-control-lg{height:calc(1.5em + 1rem + .25rem);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.75rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.5rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.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)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;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;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.5rem}.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,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);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 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.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)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:.125rem solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.5rem;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;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(26,188,156,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#1abc9c;border-color:#1abc9c}.btn-primary:hover{color:#fff;background-color:#159a80;border-color:#148f77}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(60,198,171,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#1abc9c;border-color:#1abc9c}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#148f77;border-color:#12846e}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(60,198,171,.5)}.btn-secondary{color:#fff;background-color:#2c3e50;border-color:#2c3e50}.btn-secondary:hover{color:#fff;background-color:#1e2b37;border-color:#1a252f}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#2c3e50;border-color:#2c3e50}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#1a252f;border-color:#151e27}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#1abc9c;border-color:#1abc9c}.btn-outline-primary:hover{color:#fff;background-color:#1abc9c;border-color:#1abc9c}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(26,188,156,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#1abc9c;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#1abc9c;border-color:#1abc9c}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(26,188,156,.5)}.btn-outline-secondary{color:#2c3e50;border-color:#2c3e50}.btn-outline-secondary:hover{color:#fff;background-color:#2c3e50;border-color:#2c3e50}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#2c3e50;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#2c3e50;border-color:#2c3e50}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#1abc9c;text-decoration:none}.btn-link:hover{color:#117964;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.75rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.25rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.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;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:.125rem solid rgba(0,0,0,.15);border-radius:.5rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{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}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .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}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .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}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#1abc9c}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.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:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{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:-.125rem}.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:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .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:-.125rem}.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:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-.125rem}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-.125rem}.input-group-prepend{margin-right:-.125rem}.input-group-append{margin-left:-.125rem}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:.125rem solid #ced4da;border-radius:.5rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + .25rem)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.75rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + .25rem)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.25rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#1abc9c;background-color:#1abc9c}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(26,188,156,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#6bebd1}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#98f1df;border-color:#98f1df}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid .125rem}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.5rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#1abc9c;background-color:#1abc9c}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(26,188,156,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(26,188,156,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{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")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(26,188,156,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + .25rem);left:calc(-2.25rem + .25rem);width:calc(1rem - .5rem);height:calc(1rem - .5rem);background-color:#adb5bd;border-radius:.5rem;transition:transform .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){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(26,188,156,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + .25rem);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:.125rem solid #ced4da;border-radius:.5rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#6bebd1;outline:0;box-shadow:0 0 0 .2rem rgba(26,188,156,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + .25rem);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + .25rem);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + .25rem);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + .25rem);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#6bebd1;box-shadow:0 0 0 .2rem rgba(26,188,156,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + .25rem);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:.125rem solid #ced4da;border-radius:.5rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .5rem .5rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(26,188,156,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(26,188,156,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(26,188,156,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#1abc9c;border:0;border-radius:1rem;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){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#98f1df}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#1abc9c;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#98f1df}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#1abc9c;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){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#98f1df}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:.125rem solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-.125rem}.nav-tabs .nav-link{border:.125rem solid transparent;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;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:-.125rem;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.5rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#1abc9c}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.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:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.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;float:none}.navbar-text{display:inline-block;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:.125rem solid transparent;border-radius:.5rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row 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>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row 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>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row 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>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row 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>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.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>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.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,.5)}.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 .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.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:border-box;border:.125rem solid rgba(0,0,0,.125);border-radius:.5rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:.125rem solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.5rem - .125rem) calc(.5rem - .125rem) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:.125rem solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.5rem - .125rem) calc(.5rem - .125rem)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.5rem - .125rem)}.card-img-top{width:100%;border-top-left-radius:calc(.5rem - .125rem);border-top-right-radius:calc(.5rem - .125rem)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.5rem - .125rem);border-bottom-left-radius:calc(.5rem - .125rem)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{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-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}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-.125rem}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.5rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.5rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-.125rem;line-height:1.25;color:#1abc9c;background-color:#fff;border:.125rem solid #dee2e6}.page-link:hover{z-index:2;color:#117964;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(26,188,156,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.page-item:last-child .page-link{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#1abc9c;border-color:#1abc9c}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.5rem;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){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#1abc9c}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#148f77}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(26,188,156,.5)}.badge-secondary{color:#fff;background-color:#2c3e50}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#1a252f}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(44,62,80,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.75rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:.125rem solid transparent;border-radius:.5rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#0e6251;background-color:#d1f2eb;border-color:#bfece3}.alert-primary hr{border-top-color:#abe6da}.alert-primary .alert-link{color:#08352c}.alert-secondary{color:#17202a;background-color:#d5d8dc;border-color:#c4c9ce}.alert-secondary hr{border-top-color:#b6bcc2}.alert-secondary .alert-link{color:#050709}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.5rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#1abc9c;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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,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}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.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:.75rem 1.25rem;margin-bottom:-.125rem;background-color:#fff;border:.125rem solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.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:#1abc9c;border-color:#1abc9c}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-.125rem;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-.125rem;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-.125rem;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-.125rem;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-.125rem;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-.125rem}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#0e6251;background-color:#bfece3}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#0e6251;background-color:#abe6da}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#0e6251;border-color:#0e6251}.list-group-item-secondary{color:#17202a;background-color:#c4c9ce}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#17202a;background-color:#b6bcc2}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#17202a;border-color:#17202a}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;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-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:0 solid rgba(0,0,0,.2);border-radius:.75rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:0 solid #dee2e6;border-top-left-radius:.75rem;border-top-right-radius:.75rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:4rem 1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:4rem 1rem;border-top:0 solid #dee2e6;border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 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}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Lato,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";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 .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;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:.5rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:Lato,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";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:.125rem solid rgba(0,0,0,.2);border-radius:.75rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .75rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + .125rem) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:.125rem;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + .125rem) * -1);width:.5rem;height:1rem;margin:.75rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:.125rem;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + .125rem) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:.125rem;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-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:.125rem solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + .125rem) * -1);width:.5rem;height:1rem;margin:.75rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:.125rem;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:.125rem solid #ebebeb;border-top-left-radius:calc(.75rem - .125rem);border-top-right-radius:calc(.75rem - .125rem)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;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: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-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{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%;color:#fff;text-align:center;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:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color: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%{transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;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}.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}.bg-primary{background-color:#1abc9c!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#148f77!important}.bg-secondary{background-color:#2c3e50!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#1a252f!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:.125rem solid #dee2e6!important}.border-top{border-top:.125rem solid #dee2e6!important}.border-right{border-right:.125rem solid #dee2e6!important}.border-bottom{border-bottom:.125rem solid #dee2e6!important}.border-left{border-left:.125rem solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#1abc9c!important}.border-secondary{border-color:#2c3e50!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.25rem!important}.rounded{border-radius:.5rem!important}.rounded-top{border-top-left-radius:.5rem!important;border-top-right-radius:.5rem!important}.rounded-right{border-top-right-radius:.5rem!important;border-bottom-right-radius:.5rem!important}.rounded-bottom{border-bottom-right-radius:.5rem!important;border-bottom-left-radius:.5rem!important}.rounded-left{border-top-left-radius:.5rem!important;border-bottom-left-radius:.5rem!important}.rounded-lg{border-radius:.75rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!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}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!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}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!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}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!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}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!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}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!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}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.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-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!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}.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}.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}@media (min-width:576px){.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-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!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}.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}.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}}@media (min-width:768px){.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-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!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}.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}.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}}@media (min-width:992px){.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-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!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}.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}.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}}@media (min-width:1200px){.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-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!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}.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}.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}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!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}.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}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!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}.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}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#1abc9c!important}a.text-primary:focus,a.text-primary:hover{color:#117964!important}.text-secondary{color:#2c3e50!important}a.text-secondary:focus,a.text-secondary:hover{color:#11181f!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:.125rem solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:.125rem solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}.page-section{padding:6rem 0}.page-section .page-section-heading{font-size:2.25rem;line-height:2rem}@media (min-width:992px){.page-section .page-section-heading{font-size:3rem;line-height:2.5rem}}.divider-custom{margin:1.25rem 0 1.5rem;width:100%;display:flex;justify-content:center;align-items:center}.divider-custom .divider-custom-line{width:100%;max-width:7rem;height:.25rem;background-color:#2c3e50;border-radius:1rem;border-color:#2c3e50!important}.divider-custom .divider-custom-line:first-child{margin-right:1rem}.divider-custom .divider-custom-line:last-child{margin-left:1rem}.divider-custom .divider-custom-icon{color:#2c3e50!important;font-size:2rem}.divider-custom.divider-light .divider-custom-line{background-color:#fff}.divider-custom.divider-light .divider-custom-icon{color:#fff!important}.btn-xl{padding:1rem 1.75rem;font-size:1.25rem}.btn-social{border-radius:100%;display:inline-flex;width:3.25rem;height:3.25rem;font-size:1.25rem;justify-content:center;align-items:center}.scroll-to-top{z-index:1042;right:1rem;bottom:1rem;display:none}.scroll-to-top a{width:3.5rem;height:3.5rem;background-color:rgba(33,37,41,.5);line-height:3.1rem}#mainNav{padding-top:1rem;padding-bottom:1rem;font-family:Montserrat,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:700}#mainNav .navbar-brand{color:#fff}#mainNav .navbar-nav{margin-top:1rem}#mainNav .navbar-nav li.nav-item a.nav-link{color:#fff}#mainNav .navbar-nav li.nav-item a.nav-link:hover{color:#1abc9c}#mainNav .navbar-nav li.nav-item a.nav-link:active,#mainNav .navbar-nav li.nav-item a.nav-link:focus{color:#fff}#mainNav .navbar-nav li.nav-item a.nav-link.active{color:#1abc9c}#mainNav .navbar-toggler{font-size:80%;padding:.8rem}@media (min-width:992px){#mainNav{padding-top:1.5rem;padding-bottom:1.5rem;transition:padding-top .3s,padding-bottom .3s}#mainNav .navbar-brand{font-size:1.75em;transition:font-size .3s}#mainNav .navbar-nav{margin-top:0}#mainNav .navbar-nav>li.nav-item>a.nav-link.active{color:#fff;background:#1abc9c}#mainNav .navbar-nav>li.nav-item>a.nav-link.active:active,#mainNav .navbar-nav>li.nav-item>a.nav-link.active:focus,#mainNav .navbar-nav>li.nav-item>a.nav-link.active:hover{color:#fff;background:#1abc9c}#mainNav.navbar-shrink{padding-top:.5rem;padding-bottom:.5rem}#mainNav.navbar-shrink .navbar-brand{font-size:1.5em}}.masthead{padding-top:calc(6rem + 74px);padding-bottom:6rem}.masthead .masthead-heading{font-size:2.75rem;line-height:2.75rem}.masthead .masthead-subheading{font-size:1.25rem}.masthead .masthead-avatar{width:15rem}@media (min-width:992px){.masthead{padding-top:calc(6rem + 104px);padding-bottom:6rem}.masthead .masthead-heading{font-size:4rem;line-height:3.5rem}.masthead .masthead-subheading{font-size:1.5rem}}.portfolio{margin-bottom:-30px}.portfolio .portfolio-item{cursor:pointer;position:relative;display:block;max-width:25rem;margin-bottom:30px;border-radius:.5rem;overflow:hidden}.portfolio .portfolio-item .portfolio-item-caption{position:absolute;top:0;left:0;transition:all .2s ease-in-out;opacity:0;background-color:rgba(26,188,156,.9)}.portfolio .portfolio-item .portfolio-item-caption:hover{opacity:1}.portfolio .portfolio-item .portfolio-item-caption .portfolio-item-caption-content{font-size:1.5rem}.portfolio-modal .portfolio-modal-title{font-size:2.25rem;line-height:2rem}@media (min-width:992px){.portfolio-modal .portfolio-modal-title{font-size:3rem;line-height:2.5rem}}.portfolio-modal .close{position:absolute;z-index:1;right:1.5rem;top:1rem;font-size:3rem;line-height:3rem;color:#1abc9c;opacity:1}.floating-label-form-group{position:relative;border-bottom:1px solid #e9ecef}.floating-label-form-group input,.floating-label-form-group textarea{font-size:1.5em;position:relative;z-index:1;padding-right:0;padding-left:0;resize:none;border:none;border-radius:0;background:0 0;box-shadow:none!important}.floating-label-form-group label{font-size:.85em;line-height:1.764705882em;position:relative;z-index:0;top:2em;display:block;margin:0;transition:top .3s ease,opacity .3s ease;vertical-align:middle;vertical-align:baseline;opacity:0}.floating-label-form-group:not(:first-child){padding-left:14px;border-left:1px solid #e9ecef}.floating-label-form-group-with-value label{top:0;opacity:1}.floating-label-form-group-with-focus label{color:#1abc9c}form .row:first-child .floating-label-form-group{border-top:1px solid #e9ecef}.footer{padding-top:5rem;padding-bottom:5rem;background-color:#2c3e50;color:#fff}.copyright{background-color:#1a252f} \ No newline at end of file diff --git a/img/avataaars.svg b/dist/assets/img/avataaars.svg similarity index 100% rename from img/avataaars.svg rename to dist/assets/img/avataaars.svg diff --git a/img/portfolio/cabin.png b/dist/assets/img/portfolio/cabin.png similarity index 100% rename from img/portfolio/cabin.png rename to dist/assets/img/portfolio/cabin.png diff --git a/img/portfolio/cake.png b/dist/assets/img/portfolio/cake.png similarity index 100% rename from img/portfolio/cake.png rename to dist/assets/img/portfolio/cake.png diff --git a/img/portfolio/circus.png b/dist/assets/img/portfolio/circus.png similarity index 100% rename from img/portfolio/circus.png rename to dist/assets/img/portfolio/circus.png diff --git a/img/portfolio/game.png b/dist/assets/img/portfolio/game.png similarity index 100% rename from img/portfolio/game.png rename to dist/assets/img/portfolio/game.png diff --git a/img/portfolio/safe.png b/dist/assets/img/portfolio/safe.png similarity index 100% rename from img/portfolio/safe.png rename to dist/assets/img/portfolio/safe.png diff --git a/img/portfolio/submarine.png b/dist/assets/img/portfolio/submarine.png similarity index 100% rename from img/portfolio/submarine.png rename to dist/assets/img/portfolio/submarine.png diff --git a/js/contact_me.js b/dist/assets/mail/contact_me.js similarity index 98% rename from js/contact_me.js rename to dist/assets/mail/contact_me.js index 6e91590d1..d534819b9 100644 --- a/js/contact_me.js +++ b/dist/assets/mail/contact_me.js @@ -20,7 +20,7 @@ $(function() { $this = $("#sendMessageButton"); $this.prop("disabled", true); // Disable submit button until AJAX call is complete to prevent duplicate messages $.ajax({ - url: "././mail/contact_me.php", + url: "contact_me.php", type: "POST", data: { name: name, diff --git a/mail/contact_me.php b/dist/assets/mail/contact_me.php similarity index 86% rename from mail/contact_me.php rename to dist/assets/mail/contact_me.php index c4d18f9e6..15944a612 100644 --- a/mail/contact_me.php +++ b/dist/assets/mail/contact_me.php @@ -11,7 +11,7 @@ $message = strip_tags(htmlspecialchars($_POST['message'])); // Create the email and send the message -$to = "yourname@yourdomain.com"; // Add your email address inbetween the "" replacing yourname@yourdomain.com - This is where the form will send a message to. +$to = "yourname@yourdomain.com"; // Add your email address in between the "" replacing yourname@yourdomain.com - This is where the form will send a message to. $subject = "Website Contact Form: $name"; $body = "You have received a new message from your website contact form.\n\n"."Here are the details:\n\nName: $name\n\nEmail: $email\n\nPhone: $phone\n\nMessage:\n$message"; $header = "From: noreply@yourdomain.com\n"; // This is the email address the generated message will be from. We recommend using something like noreply@yourdomain.com. diff --git a/js/jqBootstrapValidation.js b/dist/assets/mail/jqBootstrapValidation.js similarity index 100% rename from js/jqBootstrapValidation.js rename to dist/assets/mail/jqBootstrapValidation.js diff --git a/css/freelancer.css b/dist/css/styles.css similarity index 84% rename from css/freelancer.css rename to dist/css/styles.css index 3f092ba07..19d41dcc8 100644 --- a/css/freelancer.css +++ b/dist/css/styles.css @@ -1,11 +1,11 @@ +@charset "UTF-8"; /*! - * Start Bootstrap - Freelancer v5.1.3 (https://startbootstrap.com/template-overviews/freelancer) - * Copyright 2013-2019 Start Bootstrap - * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/master/LICENSE) - */ - +* Start Bootstrap - Freelancer v6.0.0 (https://startbootstrap.com/themes/freelancer) +* Copyright 2013-2020 Start Bootstrap +* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/master/LICENSE) +*/ /*! - * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Bootstrap v4.4.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) @@ -69,7 +69,7 @@ body { background-color: #fff; } -[tabindex="-1"]:focus { +[tabindex="-1"]:focus:not(:focus-visible) { outline: 0 !important; } @@ -93,11 +93,11 @@ abbr[title], abbr[data-original-title] { text-decoration: underline; -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; + text-decoration: underline dotted; cursor: help; border-bottom: 0; -webkit-text-decoration-skip-ink: none; - text-decoration-skip-ink: none; + text-decoration-skip-ink: none; } address { @@ -125,7 +125,7 @@ dt { } dd { - margin-bottom: .5rem; + margin-bottom: 0.5rem; margin-left: 0; } @@ -151,11 +151,11 @@ sup { } sub { - bottom: -.25em; + bottom: -0.25em; } sup { - top: -.5em; + top: -0.5em; } a { @@ -163,26 +163,20 @@ a { text-decoration: none; background-color: transparent; } - a:hover { color: #117964; text-decoration: underline; } -a:not([href]):not([tabindex]) { +a:not([href]) { color: inherit; text-decoration: none; } - -a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { +a:not([href]):hover { color: inherit; text-decoration: none; } -a:not([href]):not([tabindex]):focus { - outline: 0; -} - pre, code, kbd, @@ -267,37 +261,37 @@ select { } button, -[type="button"], -[type="reset"], -[type="submit"] { +[type=button], +[type=reset], +[type=submit] { -webkit-appearance: button; } button:not(:disabled), -[type="button"]:not(:disabled), -[type="reset"]:not(:disabled), -[type="submit"]:not(:disabled) { +[type=button]:not(:disabled), +[type=reset]:not(:disabled), +[type=submit]:not(:disabled) { cursor: pointer; } button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner { padding: 0; border-style: none; } -input[type="radio"], -input[type="checkbox"] { +input[type=radio], +input[type=checkbox] { box-sizing: border-box; padding: 0; } -input[type="date"], -input[type="time"], -input[type="datetime-local"], -input[type="month"] { +input[type=date], +input[type=time], +input[type=datetime-local], +input[type=month] { -webkit-appearance: listbox; } @@ -318,7 +312,7 @@ legend { width: 100%; max-width: 100%; padding: 0; - margin-bottom: .5rem; + margin-bottom: 0.5rem; font-size: 1.5rem; line-height: inherit; color: inherit; @@ -329,17 +323,17 @@ progress { vertical-align: baseline; } -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { +[type=number]::-webkit-inner-spin-button, +[type=number]::-webkit-outer-spin-button { height: auto; } -[type="search"] { +[type=search] { outline-offset: -2px; -webkit-appearance: none; } -[type="search"]::-webkit-search-decoration { +[type=search]::-webkit-search-decoration { -webkit-appearance: none; } @@ -458,7 +452,6 @@ mark, .list-inline-item { display: inline-block; } - .list-inline-item:not(:last-child) { margin-right: 0.5rem; } @@ -478,9 +471,8 @@ mark, font-size: 80%; color: #6c757d; } - .blockquote-footer::before { - content: "\2014\00A0"; + content: "— "; } .img-fluid { @@ -514,9 +506,8 @@ mark, code { font-size: 87.5%; color: #e83e8c; - word-break: break-word; + word-wrap: break-word; } - a > code { color: inherit; } @@ -528,7 +519,6 @@ kbd { background-color: #212529; border-radius: 0.25rem; } - kbd kbd { padding: 0; font-size: 100%; @@ -540,7 +530,6 @@ pre { font-size: 87.5%; color: #212529; } - pre code { font-size: inherit; color: inherit; @@ -559,32 +548,28 @@ pre code { margin-right: auto; margin-left: auto; } - @media (min-width: 576px) { .container { max-width: 540px; } } - @media (min-width: 768px) { .container { max-width: 720px; } } - @media (min-width: 992px) { .container { max-width: 960px; } } - @media (min-width: 1200px) { .container { max-width: 1140px; } } -.container-fluid { +.container-fluid, .container-xl, .container-lg, .container-md, .container-sm { width: 100%; padding-right: 15px; padding-left: 15px; @@ -592,6 +577,26 @@ pre code { 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; + } +} .row { display: flex; flex-wrap: wrap; @@ -603,19 +608,18 @@ pre code { margin-right: 0; margin-left: 0; } - .no-gutters > .col, -.no-gutters > [class*="col-"] { +.no-gutters > [class*=col-] { padding-right: 0; padding-left: 0; } -.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, -.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, -.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, -.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, -.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, -.col-xl-auto { +.col-xl, +.col-xl-auto, .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-lg, +.col-lg-auto, .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-md, +.col-md-auto, .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-sm, +.col-sm-auto, .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col, +.col-auto, .col-12, .col-11, .col-10, .col-9, .col-8, .col-7, .col-6, .col-5, .col-4, .col-3, .col-2, .col-1 { position: relative; width: 100%; padding-right: 15px; @@ -628,6 +632,36 @@ pre code { max-width: 100%; } +.row-cols-1 > * { + flex: 0 0 100%; + max-width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 50%; + max-width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; +} + +.row-cols-4 > * { + flex: 0 0 25%; + max-width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 20%; + max-width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; +} + .col-auto { flex: 0 0 auto; width: auto; @@ -635,13 +669,13 @@ pre code { } .col-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; + flex: 0 0 8.3333333333%; + max-width: 8.3333333333%; } .col-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; } .col-3 { @@ -650,13 +684,13 @@ pre code { } .col-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; } .col-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; + flex: 0 0 41.6666666667%; + max-width: 41.6666666667%; } .col-6 { @@ -665,13 +699,13 @@ pre code { } .col-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; + flex: 0 0 58.3333333333%; + max-width: 58.3333333333%; } .col-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; + flex: 0 0 66.6666666667%; + max-width: 66.6666666667%; } .col-9 { @@ -680,13 +714,13 @@ pre code { } .col-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; + flex: 0 0 83.3333333333%; + max-width: 83.3333333333%; } .col-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; + flex: 0 0 91.6666666667%; + max-width: 91.6666666667%; } .col-12 { @@ -755,11 +789,11 @@ pre code { } .offset-1 { - margin-left: 8.33333%; + margin-left: 8.3333333333%; } .offset-2 { - margin-left: 16.66667%; + margin-left: 16.6666666667%; } .offset-3 { @@ -767,11 +801,11 @@ pre code { } .offset-4 { - margin-left: 33.33333%; + margin-left: 33.3333333333%; } .offset-5 { - margin-left: 41.66667%; + margin-left: 41.6666666667%; } .offset-6 { @@ -779,11 +813,11 @@ pre code { } .offset-7 { - margin-left: 58.33333%; + margin-left: 58.3333333333%; } .offset-8 { - margin-left: 66.66667%; + margin-left: 66.6666666667%; } .offset-9 { @@ -791,11 +825,11 @@ pre code { } .offset-10 { - margin-left: 83.33333%; + margin-left: 83.3333333333%; } .offset-11 { - margin-left: 91.66667%; + margin-left: 91.6666666667%; } @media (min-width: 576px) { @@ -804,586 +838,859 @@ pre code { flex-grow: 1; max-width: 100%; } + + .row-cols-sm-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + + .row-cols-sm-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + + .row-cols-sm-3 > * { + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; + } + + .row-cols-sm-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + + .row-cols-sm-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + + .row-cols-sm-6 > * { + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; + } + .col-sm-auto { flex: 0 0 auto; width: auto; max-width: 100%; } + .col-sm-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; + flex: 0 0 8.3333333333%; + max-width: 8.3333333333%; } + .col-sm-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; } + .col-sm-3 { flex: 0 0 25%; max-width: 25%; } + .col-sm-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; } + .col-sm-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; + flex: 0 0 41.6666666667%; + max-width: 41.6666666667%; } + .col-sm-6 { flex: 0 0 50%; max-width: 50%; } + .col-sm-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; + flex: 0 0 58.3333333333%; + max-width: 58.3333333333%; } + .col-sm-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; + flex: 0 0 66.6666666667%; + max-width: 66.6666666667%; } + .col-sm-9 { flex: 0 0 75%; max-width: 75%; } + .col-sm-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; + flex: 0 0 83.3333333333%; + max-width: 83.3333333333%; } + .col-sm-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; + flex: 0 0 91.6666666667%; + max-width: 91.6666666667%; } + .col-sm-12 { flex: 0 0 100%; max-width: 100%; } + .order-sm-first { order: -1; } + .order-sm-last { order: 13; } + .order-sm-0 { order: 0; } + .order-sm-1 { order: 1; } + .order-sm-2 { order: 2; } + .order-sm-3 { order: 3; } + .order-sm-4 { order: 4; } + .order-sm-5 { order: 5; } + .order-sm-6 { order: 6; } + .order-sm-7 { order: 7; } + .order-sm-8 { order: 8; } + .order-sm-9 { order: 9; } + .order-sm-10 { order: 10; } + .order-sm-11 { order: 11; } + .order-sm-12 { order: 12; } + .offset-sm-0 { margin-left: 0; } + .offset-sm-1 { - margin-left: 8.33333%; + margin-left: 8.3333333333%; } + .offset-sm-2 { - margin-left: 16.66667%; + margin-left: 16.6666666667%; } + .offset-sm-3 { margin-left: 25%; } + .offset-sm-4 { - margin-left: 33.33333%; + margin-left: 33.3333333333%; } + .offset-sm-5 { - margin-left: 41.66667%; + margin-left: 41.6666666667%; } + .offset-sm-6 { margin-left: 50%; } + .offset-sm-7 { - margin-left: 58.33333%; + margin-left: 58.3333333333%; } + .offset-sm-8 { - margin-left: 66.66667%; + margin-left: 66.6666666667%; } + .offset-sm-9 { margin-left: 75%; } + .offset-sm-10 { - margin-left: 83.33333%; + margin-left: 83.3333333333%; } + .offset-sm-11 { - margin-left: 91.66667%; + margin-left: 91.6666666667%; } } - @media (min-width: 768px) { .col-md { flex-basis: 0; flex-grow: 1; max-width: 100%; } + + .row-cols-md-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + + .row-cols-md-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + + .row-cols-md-3 > * { + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; + } + + .row-cols-md-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + + .row-cols-md-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + + .row-cols-md-6 > * { + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; + } + .col-md-auto { flex: 0 0 auto; width: auto; max-width: 100%; } + .col-md-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; + flex: 0 0 8.3333333333%; + max-width: 8.3333333333%; } + .col-md-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; } + .col-md-3 { flex: 0 0 25%; max-width: 25%; } + .col-md-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; } + .col-md-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; + flex: 0 0 41.6666666667%; + max-width: 41.6666666667%; } + .col-md-6 { flex: 0 0 50%; max-width: 50%; } + .col-md-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; + flex: 0 0 58.3333333333%; + max-width: 58.3333333333%; } + .col-md-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; + flex: 0 0 66.6666666667%; + max-width: 66.6666666667%; } + .col-md-9 { flex: 0 0 75%; max-width: 75%; } + .col-md-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; + flex: 0 0 83.3333333333%; + max-width: 83.3333333333%; } + .col-md-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; + flex: 0 0 91.6666666667%; + max-width: 91.6666666667%; } + .col-md-12 { flex: 0 0 100%; max-width: 100%; } + .order-md-first { order: -1; } + .order-md-last { order: 13; } + .order-md-0 { order: 0; } + .order-md-1 { order: 1; } + .order-md-2 { order: 2; } + .order-md-3 { order: 3; } + .order-md-4 { order: 4; } + .order-md-5 { order: 5; } + .order-md-6 { order: 6; } + .order-md-7 { order: 7; } + .order-md-8 { order: 8; } + .order-md-9 { order: 9; } + .order-md-10 { order: 10; } + .order-md-11 { order: 11; } + .order-md-12 { order: 12; } + .offset-md-0 { margin-left: 0; } + .offset-md-1 { - margin-left: 8.33333%; + margin-left: 8.3333333333%; } + .offset-md-2 { - margin-left: 16.66667%; + margin-left: 16.6666666667%; } + .offset-md-3 { margin-left: 25%; } + .offset-md-4 { - margin-left: 33.33333%; + margin-left: 33.3333333333%; } + .offset-md-5 { - margin-left: 41.66667%; + margin-left: 41.6666666667%; } + .offset-md-6 { margin-left: 50%; } + .offset-md-7 { - margin-left: 58.33333%; + margin-left: 58.3333333333%; } + .offset-md-8 { - margin-left: 66.66667%; + margin-left: 66.6666666667%; } + .offset-md-9 { margin-left: 75%; } + .offset-md-10 { - margin-left: 83.33333%; + margin-left: 83.3333333333%; } + .offset-md-11 { - margin-left: 91.66667%; + margin-left: 91.6666666667%; } } - @media (min-width: 992px) { .col-lg { flex-basis: 0; flex-grow: 1; max-width: 100%; } + + .row-cols-lg-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + + .row-cols-lg-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + + .row-cols-lg-3 > * { + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; + } + + .row-cols-lg-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + + .row-cols-lg-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + + .row-cols-lg-6 > * { + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; + } + .col-lg-auto { flex: 0 0 auto; width: auto; max-width: 100%; } + .col-lg-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; + flex: 0 0 8.3333333333%; + max-width: 8.3333333333%; } + .col-lg-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; } + .col-lg-3 { flex: 0 0 25%; max-width: 25%; } + .col-lg-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; } + .col-lg-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; + flex: 0 0 41.6666666667%; + max-width: 41.6666666667%; } + .col-lg-6 { flex: 0 0 50%; max-width: 50%; } + .col-lg-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; + flex: 0 0 58.3333333333%; + max-width: 58.3333333333%; } + .col-lg-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; + flex: 0 0 66.6666666667%; + max-width: 66.6666666667%; } + .col-lg-9 { flex: 0 0 75%; max-width: 75%; } + .col-lg-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; + flex: 0 0 83.3333333333%; + max-width: 83.3333333333%; } + .col-lg-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; + flex: 0 0 91.6666666667%; + max-width: 91.6666666667%; } + .col-lg-12 { flex: 0 0 100%; max-width: 100%; } + .order-lg-first { order: -1; } + .order-lg-last { order: 13; } + .order-lg-0 { order: 0; } + .order-lg-1 { order: 1; } + .order-lg-2 { order: 2; } + .order-lg-3 { order: 3; } + .order-lg-4 { order: 4; } + .order-lg-5 { order: 5; } + .order-lg-6 { order: 6; } + .order-lg-7 { order: 7; } + .order-lg-8 { order: 8; } + .order-lg-9 { order: 9; } + .order-lg-10 { order: 10; } + .order-lg-11 { order: 11; } + .order-lg-12 { order: 12; } + .offset-lg-0 { margin-left: 0; } + .offset-lg-1 { - margin-left: 8.33333%; + margin-left: 8.3333333333%; } + .offset-lg-2 { - margin-left: 16.66667%; + margin-left: 16.6666666667%; } + .offset-lg-3 { margin-left: 25%; } + .offset-lg-4 { - margin-left: 33.33333%; + margin-left: 33.3333333333%; } + .offset-lg-5 { - margin-left: 41.66667%; + margin-left: 41.6666666667%; } + .offset-lg-6 { margin-left: 50%; } + .offset-lg-7 { - margin-left: 58.33333%; + margin-left: 58.3333333333%; } + .offset-lg-8 { - margin-left: 66.66667%; + margin-left: 66.6666666667%; } + .offset-lg-9 { margin-left: 75%; } + .offset-lg-10 { - margin-left: 83.33333%; + margin-left: 83.3333333333%; } + .offset-lg-11 { - margin-left: 91.66667%; + margin-left: 91.6666666667%; } } - @media (min-width: 1200px) { .col-xl { flex-basis: 0; flex-grow: 1; max-width: 100%; } + + .row-cols-xl-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + + .row-cols-xl-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + + .row-cols-xl-3 > * { + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; + } + + .row-cols-xl-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + + .row-cols-xl-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + + .row-cols-xl-6 > * { + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; + } + .col-xl-auto { flex: 0 0 auto; width: auto; max-width: 100%; } + .col-xl-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; + flex: 0 0 8.3333333333%; + max-width: 8.3333333333%; } + .col-xl-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; } + .col-xl-3 { flex: 0 0 25%; max-width: 25%; } + .col-xl-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; } + .col-xl-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; + flex: 0 0 41.6666666667%; + max-width: 41.6666666667%; } + .col-xl-6 { flex: 0 0 50%; max-width: 50%; } + .col-xl-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; + flex: 0 0 58.3333333333%; + max-width: 58.3333333333%; } + .col-xl-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; + flex: 0 0 66.6666666667%; + max-width: 66.6666666667%; } + .col-xl-9 { flex: 0 0 75%; max-width: 75%; } + .col-xl-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; + flex: 0 0 83.3333333333%; + max-width: 83.3333333333%; } + .col-xl-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; + flex: 0 0 91.6666666667%; + max-width: 91.6666666667%; } + .col-xl-12 { flex: 0 0 100%; max-width: 100%; } + .order-xl-first { order: -1; } + .order-xl-last { order: 13; } + .order-xl-0 { order: 0; } + .order-xl-1 { order: 1; } + .order-xl-2 { order: 2; } + .order-xl-3 { order: 3; } + .order-xl-4 { order: 4; } + .order-xl-5 { order: 5; } + .order-xl-6 { order: 6; } + .order-xl-7 { order: 7; } + .order-xl-8 { order: 8; } + .order-xl-9 { order: 9; } + .order-xl-10 { order: 10; } + .order-xl-11 { order: 11; } + .order-xl-12 { order: 12; } + .offset-xl-0 { margin-left: 0; } + .offset-xl-1 { - margin-left: 8.33333%; + margin-left: 8.3333333333%; } + .offset-xl-2 { - margin-left: 16.66667%; + margin-left: 16.6666666667%; } + .offset-xl-3 { margin-left: 25%; } + .offset-xl-4 { - margin-left: 33.33333%; + margin-left: 33.3333333333%; } + .offset-xl-5 { - margin-left: 41.66667%; + margin-left: 41.6666666667%; } + .offset-xl-6 { margin-left: 50%; } + .offset-xl-7 { - margin-left: 58.33333%; + margin-left: 58.3333333333%; } + .offset-xl-8 { - margin-left: 66.66667%; + margin-left: 66.6666666667%; } + .offset-xl-9 { margin-left: 75%; } + .offset-xl-10 { - margin-left: 83.33333%; + margin-left: 83.3333333333%; } + .offset-xl-11 { - margin-left: 91.66667%; + margin-left: 91.6666666667%; } } - .table { width: 100%; margin-bottom: 1rem; color: #212529; } - .table th, .table td { padding: 0.75rem; vertical-align: top; border-top: 0.125rem solid #dee2e6; } - .table thead th { vertical-align: bottom; border-bottom: 0.25rem solid #dee2e6; } - .table tbody + tbody { border-top: 0.25rem solid #dee2e6; } @@ -1396,12 +1703,10 @@ pre code { .table-bordered { border: 0.125rem solid #dee2e6; } - .table-bordered th, .table-bordered td { border: 0.125rem solid #dee2e6; } - .table-bordered thead th, .table-bordered thead td { border-bottom-width: 0.25rem; @@ -1428,7 +1733,6 @@ pre code { .table-primary > td { background-color: #bfece3; } - .table-primary th, .table-primary td, .table-primary thead th, @@ -1439,7 +1743,6 @@ pre code { .table-hover .table-primary:hover { background-color: #abe6da; } - .table-hover .table-primary:hover > td, .table-hover .table-primary:hover > th { background-color: #abe6da; @@ -1450,7 +1753,6 @@ pre code { .table-secondary > td { background-color: #c4c9ce; } - .table-secondary th, .table-secondary td, .table-secondary thead th, @@ -1461,7 +1763,6 @@ pre code { .table-hover .table-secondary:hover { background-color: #b6bcc2; } - .table-hover .table-secondary:hover > td, .table-hover .table-secondary:hover > th { background-color: #b6bcc2; @@ -1472,7 +1773,6 @@ pre code { .table-success > td { background-color: #c3e6cb; } - .table-success th, .table-success td, .table-success thead th, @@ -1483,7 +1783,6 @@ pre code { .table-hover .table-success:hover { background-color: #b1dfbb; } - .table-hover .table-success:hover > td, .table-hover .table-success:hover > th { background-color: #b1dfbb; @@ -1494,7 +1793,6 @@ pre code { .table-info > td { background-color: #bee5eb; } - .table-info th, .table-info td, .table-info thead th, @@ -1505,7 +1803,6 @@ pre code { .table-hover .table-info:hover { background-color: #abdde5; } - .table-hover .table-info:hover > td, .table-hover .table-info:hover > th { background-color: #abdde5; @@ -1516,7 +1813,6 @@ pre code { .table-warning > td { background-color: #ffeeba; } - .table-warning th, .table-warning td, .table-warning thead th, @@ -1527,7 +1823,6 @@ pre code { .table-hover .table-warning:hover { background-color: #ffe8a1; } - .table-hover .table-warning:hover > td, .table-hover .table-warning:hover > th { background-color: #ffe8a1; @@ -1538,7 +1833,6 @@ pre code { .table-danger > td { background-color: #f5c6cb; } - .table-danger th, .table-danger td, .table-danger thead th, @@ -1549,7 +1843,6 @@ pre code { .table-hover .table-danger:hover { background-color: #f1b0b7; } - .table-hover .table-danger:hover > td, .table-hover .table-danger:hover > th { background-color: #f1b0b7; @@ -1560,7 +1853,6 @@ pre code { .table-light > td { background-color: #fdfdfe; } - .table-light th, .table-light td, .table-light thead th, @@ -1571,7 +1863,6 @@ pre code { .table-hover .table-light:hover { background-color: #ececf6; } - .table-hover .table-light:hover > td, .table-hover .table-light:hover > th { background-color: #ececf6; @@ -1582,7 +1873,6 @@ pre code { .table-dark > td { background-color: #c6c8ca; } - .table-dark th, .table-dark td, .table-dark thead th, @@ -1593,7 +1883,6 @@ pre code { .table-hover .table-dark:hover { background-color: #b9bbbe; } - .table-hover .table-dark:hover > td, .table-hover .table-dark:hover > th { background-color: #b9bbbe; @@ -1608,7 +1897,6 @@ pre code { .table-hover .table-active:hover { background-color: rgba(0, 0, 0, 0.075); } - .table-hover .table-active:hover > td, .table-hover .table-active:hover > th { background-color: rgba(0, 0, 0, 0.075); @@ -1619,7 +1907,6 @@ pre code { background-color: #343a40; border-color: #454d55; } - .table .thead-light th { color: #495057; background-color: #e9ecef; @@ -1630,21 +1917,17 @@ pre code { color: #fff; background-color: #343a40; } - .table-dark th, .table-dark td, .table-dark thead th { border-color: #454d55; } - .table-dark.table-bordered { border: 0; } - .table-dark.table-striped tbody tr:nth-of-type(odd) { background-color: rgba(255, 255, 255, 0.05); } - .table-dark.table-hover tbody tr:hover { color: #fff; background-color: rgba(255, 255, 255, 0.075); @@ -1661,7 +1944,6 @@ pre code { border: 0; } } - @media (max-width: 767.98px) { .table-responsive-md { display: block; @@ -1673,7 +1955,6 @@ pre code { border: 0; } } - @media (max-width: 991.98px) { .table-responsive-lg { display: block; @@ -1685,7 +1966,6 @@ pre code { border: 0; } } - @media (max-width: 1199.98px) { .table-responsive-xl { display: block; @@ -1697,14 +1977,12 @@ pre code { border: 0; } } - .table-responsive { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } - .table-responsive > .table-bordered { border: 0; } @@ -1712,7 +1990,7 @@ pre code { .form-control { display: block; width: 100%; - height: calc(1.5em + 0.75rem + 0.25rem); + height: calc(1.5em + 1rem); padding: 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; @@ -1724,18 +2002,19 @@ pre code { border-radius: 0.5rem; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media (prefers-reduced-motion: reduce) { .form-control { transition: none; } } - .form-control::-ms-expand { background-color: transparent; border: 0; } - +.form-control:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #495057; +} .form-control:focus { color: #495057; background-color: #fff; @@ -1743,32 +2022,26 @@ pre code { outline: 0; box-shadow: 0 0 0 0.2rem rgba(26, 188, 156, 0.25); } - .form-control::-webkit-input-placeholder { color: #6c757d; opacity: 1; } - .form-control::-moz-placeholder { color: #6c757d; opacity: 1; } - .form-control:-ms-input-placeholder { color: #6c757d; opacity: 1; } - .form-control::-ms-input-placeholder { color: #6c757d; opacity: 1; } - .form-control::placeholder { color: #6c757d; opacity: 1; } - .form-control:disabled, .form-control[readonly] { background-color: #e9ecef; opacity: 1; @@ -1786,23 +2059,23 @@ select.form-control:focus::-ms-value { } .col-form-label { - padding-top: calc(0.375rem + 0.125rem); - padding-bottom: calc(0.375rem + 0.125rem); + padding-top: 0.5rem; + padding-bottom: 0.5rem; margin-bottom: 0; font-size: inherit; line-height: 1.5; } .col-form-label-lg { - padding-top: calc(0.5rem + 0.125rem); - padding-bottom: calc(0.5rem + 0.125rem); + padding-top: 0.625rem; + padding-bottom: 0.625rem; font-size: 1.25rem; line-height: 1.5; } .col-form-label-sm { - padding-top: calc(0.25rem + 0.125rem); - padding-bottom: calc(0.25rem + 0.125rem); + padding-top: 0.375rem; + padding-bottom: 0.375rem; font-size: 0.875rem; line-height: 1.5; } @@ -1810,23 +2083,22 @@ select.form-control:focus::-ms-value { .form-control-plaintext { display: block; width: 100%; - padding-top: 0.375rem; - padding-bottom: 0.375rem; + padding: 0.375rem 0; margin-bottom: 0; + font-size: 1rem; line-height: 1.5; color: #212529; background-color: transparent; border: solid transparent; border-width: 0.125rem 0; } - .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { padding-right: 0; padding-left: 0; } .form-control-sm { - height: calc(1.5em + 0.5rem + 0.25rem); + height: calc(1.5em + 0.75rem); padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; @@ -1834,7 +2106,7 @@ select.form-control:focus::-ms-value { } .form-control-lg { - height: calc(1.5em + 1rem + 0.25rem); + height: calc(1.5em + 1.25rem); padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; @@ -1864,9 +2136,8 @@ textarea.form-control { margin-right: -5px; margin-left: -5px; } - .form-row > .col, -.form-row > [class*="col-"] { +.form-row > [class*=col-] { padding-right: 5px; padding-left: 5px; } @@ -1882,8 +2153,7 @@ textarea.form-control { margin-top: 0.3rem; margin-left: -1.25rem; } - -.form-check-input:disabled ~ .form-check-label { +.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { color: #6c757d; } @@ -1897,7 +2167,6 @@ textarea.form-control { padding-left: 0; margin-right: 0.75rem; } - .form-check-inline .form-check-input { position: static; margin-top: 0; @@ -1920,7 +2189,7 @@ textarea.form-control { display: none; max-width: 100%; padding: 0.25rem 0.5rem; - margin-top: .1rem; + margin-top: 0.1rem; font-size: 0.875rem; line-height: 1.5; color: #fff; @@ -1928,26 +2197,26 @@ textarea.form-control { border-radius: 0.5rem; } +.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: #28a745; 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='%2328a745' 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-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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: center right calc(0.375em + 0.1875rem); + 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: #28a745; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } -.was-validated .form-control:valid ~ .valid-feedback, -.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, -.form-control.is-valid ~ .valid-tooltip { - display: block; -} - .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); @@ -1955,31 +2224,17 @@ textarea.form-control { .was-validated .custom-select:valid, .custom-select.is-valid { border-color: #28a745; - padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); + padding-right: calc(0.75em + 2.3125rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } - .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { border-color: #28a745; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } -.was-validated .custom-select:valid ~ .valid-feedback, -.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback, -.custom-select.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .form-control-file:valid ~ .valid-feedback, -.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback, -.form-control-file.is-valid ~ .valid-tooltip { - display: block; -} - .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { color: #28a745; } - .was-validated .form-check-input:valid ~ .valid-feedback, .was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, .form-check-input.is-valid ~ .valid-tooltip { @@ -1989,26 +2244,16 @@ textarea.form-control { .was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { color: #28a745; } - .was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { border-color: #28a745; } - -.was-validated .custom-control-input:valid ~ .valid-feedback, -.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, -.custom-control-input.is-valid ~ .valid-tooltip { - display: block; -} - .was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { border-color: #34ce57; background-color: #34ce57; } - .was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } - .was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { border-color: #28a745; } @@ -2016,13 +2261,6 @@ textarea.form-control { .was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { border-color: #28a745; } - -.was-validated .custom-file-input:valid ~ .valid-feedback, -.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, -.custom-file-input.is-valid ~ .valid-tooltip { - display: block; -} - .was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { border-color: #28a745; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); @@ -2043,7 +2281,7 @@ textarea.form-control { display: none; max-width: 100%; padding: 0.25rem 0.5rem; - margin-top: .1rem; + margin-top: 0.1rem; font-size: 0.875rem; line-height: 1.5; color: #fff; @@ -2051,26 +2289,26 @@ textarea.form-control { border-radius: 0.5rem; } +.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' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%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: center right calc(0.375em + 0.1875rem); + 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 0.2rem rgba(220, 53, 69, 0.25); } -.was-validated .form-control:invalid ~ .invalid-feedback, -.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, -.form-control.is-invalid ~ .invalid-tooltip { - display: block; -} - .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); @@ -2078,31 +2316,17 @@ textarea.form-control { .was-validated .custom-select:invalid, .custom-select.is-invalid { border-color: #dc3545; - padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); + padding-right: calc(0.75em + 2.3125rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%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") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } - .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { border-color: #dc3545; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } -.was-validated .custom-select:invalid ~ .invalid-feedback, -.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback, -.custom-select.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .form-control-file:invalid ~ .invalid-feedback, -.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback, -.form-control-file.is-invalid ~ .invalid-tooltip { - display: block; -} - .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { color: #dc3545; } - .was-validated .form-check-input:invalid ~ .invalid-feedback, .was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, .form-check-input.is-invalid ~ .invalid-tooltip { @@ -2112,26 +2336,16 @@ textarea.form-control { .was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { color: #dc3545; } - .was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { border-color: #dc3545; } - -.was-validated .custom-control-input:invalid ~ .invalid-feedback, -.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, -.custom-control-input.is-invalid ~ .invalid-tooltip { - display: block; -} - .was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { border-color: #e4606d; background-color: #e4606d; } - .was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } - .was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { border-color: #dc3545; } @@ -2139,13 +2353,6 @@ textarea.form-control { .was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { border-color: #dc3545; } - -.was-validated .custom-file-input:invalid ~ .invalid-feedback, -.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, -.custom-file-input.is-invalid ~ .invalid-tooltip { - display: block; -} - .was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { border-color: #dc3545; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); @@ -2156,11 +2363,9 @@ textarea.form-control { flex-flow: row wrap; align-items: center; } - .form-inline .form-check { width: 100%; } - @media (min-width: 576px) { .form-inline label { display: flex; @@ -2184,7 +2389,7 @@ textarea.form-control { display: inline-block; } .form-inline .input-group, - .form-inline .custom-select { +.form-inline .custom-select { width: auto; } .form-inline .form-check { @@ -2216,10 +2421,11 @@ textarea.form-control { color: #212529; text-align: center; vertical-align: middle; + cursor: pointer; -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; background-color: transparent; border: 0.125rem solid transparent; padding: 0.375rem 0.75rem; @@ -2228,27 +2434,22 @@ textarea.form-control { border-radius: 0.5rem; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media (prefers-reduced-motion: reduce) { .btn { transition: none; } } - .btn:hover { color: #212529; text-decoration: none; } - .btn:focus, .btn.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(26, 188, 156, 0.25); } - .btn.disabled, .btn:disabled { opacity: 0.65; } - a.btn.disabled, fieldset:disabled a.btn { pointer-events: none; @@ -2259,32 +2460,28 @@ fieldset:disabled a.btn { background-color: #1abc9c; border-color: #1abc9c; } - .btn-primary:hover { color: #fff; background-color: #159a80; border-color: #148f77; } - .btn-primary:focus, .btn-primary.focus { + color: #fff; + background-color: #159a80; + border-color: #148f77; box-shadow: 0 0 0 0.2rem rgba(60, 198, 171, 0.5); } - .btn-primary.disabled, .btn-primary:disabled { color: #fff; background-color: #1abc9c; border-color: #1abc9c; } - -.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, -.show > .btn-primary.dropdown-toggle { +.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, .show > .btn-primary.dropdown-toggle { color: #fff; background-color: #148f77; border-color: #12846e; } - -.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, -.show > .btn-primary.dropdown-toggle:focus { +.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-primary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(60, 198, 171, 0.5); } @@ -2293,32 +2490,28 @@ fieldset:disabled a.btn { background-color: #2c3e50; border-color: #2c3e50; } - .btn-secondary:hover { color: #fff; background-color: #1e2b37; border-color: #1a252f; } - .btn-secondary:focus, .btn-secondary.focus { + color: #fff; + background-color: #1e2b37; + border-color: #1a252f; box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5); } - .btn-secondary.disabled, .btn-secondary:disabled { color: #fff; background-color: #2c3e50; border-color: #2c3e50; } - -.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, -.show > .btn-secondary.dropdown-toggle { +.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, .show > .btn-secondary.dropdown-toggle { color: #fff; background-color: #1a252f; border-color: #151e27; } - -.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, -.show > .btn-secondary.dropdown-toggle:focus { +.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-secondary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5); } @@ -2327,32 +2520,28 @@ fieldset:disabled a.btn { background-color: #28a745; border-color: #28a745; } - .btn-success:hover { color: #fff; background-color: #218838; border-color: #1e7e34; } - .btn-success:focus, .btn-success.focus { + color: #fff; + background-color: #218838; + border-color: #1e7e34; box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); } - .btn-success.disabled, .btn-success:disabled { color: #fff; background-color: #28a745; border-color: #28a745; } - -.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, -.show > .btn-success.dropdown-toggle { +.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, .show > .btn-success.dropdown-toggle { color: #fff; background-color: #1e7e34; border-color: #1c7430; } - -.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, -.show > .btn-success.dropdown-toggle:focus { +.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, .show > .btn-success.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); } @@ -2361,32 +2550,28 @@ fieldset:disabled a.btn { background-color: #17a2b8; border-color: #17a2b8; } - .btn-info:hover { color: #fff; background-color: #138496; border-color: #117a8b; } - .btn-info:focus, .btn-info.focus { + color: #fff; + background-color: #138496; + border-color: #117a8b; box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); } - .btn-info.disabled, .btn-info:disabled { color: #fff; background-color: #17a2b8; border-color: #17a2b8; } - -.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, -.show > .btn-info.dropdown-toggle { +.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, .show > .btn-info.dropdown-toggle { color: #fff; background-color: #117a8b; border-color: #10707f; } - -.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, -.show > .btn-info.dropdown-toggle:focus { +.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, .show > .btn-info.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); } @@ -2395,32 +2580,28 @@ fieldset:disabled a.btn { background-color: #ffc107; border-color: #ffc107; } - .btn-warning:hover { color: #212529; background-color: #e0a800; border-color: #d39e00; } - .btn-warning:focus, .btn-warning.focus { + color: #212529; + background-color: #e0a800; + border-color: #d39e00; box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); } - .btn-warning.disabled, .btn-warning:disabled { color: #212529; background-color: #ffc107; border-color: #ffc107; } - -.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, -.show > .btn-warning.dropdown-toggle { +.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, .show > .btn-warning.dropdown-toggle { color: #212529; background-color: #d39e00; border-color: #c69500; } - -.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, -.show > .btn-warning.dropdown-toggle:focus { +.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-warning.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); } @@ -2429,32 +2610,28 @@ fieldset:disabled a.btn { background-color: #dc3545; border-color: #dc3545; } - .btn-danger:hover { color: #fff; background-color: #c82333; border-color: #bd2130; } - .btn-danger:focus, .btn-danger.focus { + color: #fff; + background-color: #c82333; + border-color: #bd2130; box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); } - .btn-danger.disabled, .btn-danger:disabled { color: #fff; background-color: #dc3545; border-color: #dc3545; } - -.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, -.show > .btn-danger.dropdown-toggle { +.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, .show > .btn-danger.dropdown-toggle { color: #fff; background-color: #bd2130; border-color: #b21f2d; } - -.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, -.show > .btn-danger.dropdown-toggle:focus { +.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-danger.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); } @@ -2463,32 +2640,28 @@ fieldset:disabled a.btn { background-color: #f8f9fa; border-color: #f8f9fa; } - .btn-light:hover { color: #212529; background-color: #e2e6ea; border-color: #dae0e5; } - .btn-light:focus, .btn-light.focus { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5; box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); } - .btn-light.disabled, .btn-light:disabled { color: #212529; background-color: #f8f9fa; border-color: #f8f9fa; } - -.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, -.show > .btn-light.dropdown-toggle { +.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, .show > .btn-light.dropdown-toggle { color: #212529; background-color: #dae0e5; border-color: #d3d9df; } - -.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, -.show > .btn-light.dropdown-toggle:focus { +.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, .show > .btn-light.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); } @@ -2497,32 +2670,28 @@ fieldset:disabled a.btn { background-color: #343a40; border-color: #343a40; } - .btn-dark:hover { color: #fff; background-color: #23272b; border-color: #1d2124; } - .btn-dark:focus, .btn-dark.focus { + color: #fff; + background-color: #23272b; + border-color: #1d2124; box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } - .btn-dark.disabled, .btn-dark:disabled { color: #fff; background-color: #343a40; border-color: #343a40; } - -.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, -.show > .btn-dark.dropdown-toggle { +.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, .show > .btn-dark.dropdown-toggle { color: #fff; background-color: #1d2124; border-color: #171a1d; } - -.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, -.show > .btn-dark.dropdown-toggle:focus { +.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-dark.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } @@ -2530,31 +2699,24 @@ fieldset:disabled a.btn { color: #1abc9c; border-color: #1abc9c; } - .btn-outline-primary:hover { color: #fff; background-color: #1abc9c; border-color: #1abc9c; } - .btn-outline-primary:focus, .btn-outline-primary.focus { box-shadow: 0 0 0 0.2rem rgba(26, 188, 156, 0.5); } - .btn-outline-primary.disabled, .btn-outline-primary:disabled { color: #1abc9c; background-color: transparent; } - -.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, -.show > .btn-outline-primary.dropdown-toggle { +.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, .show > .btn-outline-primary.dropdown-toggle { color: #fff; background-color: #1abc9c; border-color: #1abc9c; } - -.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-primary.dropdown-toggle:focus { +.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-primary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(26, 188, 156, 0.5); } @@ -2562,31 +2724,24 @@ fieldset:disabled a.btn { color: #2c3e50; border-color: #2c3e50; } - .btn-outline-secondary:hover { color: #fff; background-color: #2c3e50; border-color: #2c3e50; } - .btn-outline-secondary:focus, .btn-outline-secondary.focus { box-shadow: 0 0 0 0.2rem rgba(44, 62, 80, 0.5); } - .btn-outline-secondary.disabled, .btn-outline-secondary:disabled { color: #2c3e50; background-color: transparent; } - -.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, -.show > .btn-outline-secondary.dropdown-toggle { +.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, .show > .btn-outline-secondary.dropdown-toggle { color: #fff; background-color: #2c3e50; border-color: #2c3e50; } - -.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-secondary.dropdown-toggle:focus { +.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-secondary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(44, 62, 80, 0.5); } @@ -2594,31 +2749,24 @@ fieldset:disabled a.btn { color: #28a745; border-color: #28a745; } - .btn-outline-success:hover { color: #fff; background-color: #28a745; border-color: #28a745; } - .btn-outline-success:focus, .btn-outline-success.focus { box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); } - .btn-outline-success.disabled, .btn-outline-success:disabled { color: #28a745; background-color: transparent; } - -.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, -.show > .btn-outline-success.dropdown-toggle { +.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, .show > .btn-outline-success.dropdown-toggle { color: #fff; background-color: #28a745; border-color: #28a745; } - -.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-success.dropdown-toggle:focus { +.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-success.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); } @@ -2626,31 +2774,24 @@ fieldset:disabled a.btn { color: #17a2b8; border-color: #17a2b8; } - .btn-outline-info:hover { color: #fff; background-color: #17a2b8; border-color: #17a2b8; } - .btn-outline-info:focus, .btn-outline-info.focus { box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); } - .btn-outline-info.disabled, .btn-outline-info:disabled { color: #17a2b8; background-color: transparent; } - -.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, -.show > .btn-outline-info.dropdown-toggle { +.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, .show > .btn-outline-info.dropdown-toggle { color: #fff; background-color: #17a2b8; border-color: #17a2b8; } - -.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-info.dropdown-toggle:focus { +.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-info.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); } @@ -2658,31 +2799,24 @@ fieldset:disabled a.btn { color: #ffc107; border-color: #ffc107; } - .btn-outline-warning:hover { color: #212529; background-color: #ffc107; border-color: #ffc107; } - .btn-outline-warning:focus, .btn-outline-warning.focus { box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); } - .btn-outline-warning.disabled, .btn-outline-warning:disabled { color: #ffc107; background-color: transparent; } - -.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, -.show > .btn-outline-warning.dropdown-toggle { +.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, .show > .btn-outline-warning.dropdown-toggle { color: #212529; background-color: #ffc107; border-color: #ffc107; } - -.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-warning.dropdown-toggle:focus { +.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-warning.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); } @@ -2690,31 +2824,24 @@ fieldset:disabled a.btn { color: #dc3545; border-color: #dc3545; } - .btn-outline-danger:hover { color: #fff; background-color: #dc3545; border-color: #dc3545; } - .btn-outline-danger:focus, .btn-outline-danger.focus { box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); } - .btn-outline-danger.disabled, .btn-outline-danger:disabled { color: #dc3545; background-color: transparent; } - -.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, -.show > .btn-outline-danger.dropdown-toggle { +.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, .show > .btn-outline-danger.dropdown-toggle { color: #fff; background-color: #dc3545; border-color: #dc3545; } - -.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-danger.dropdown-toggle:focus { +.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-danger.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); } @@ -2722,31 +2849,24 @@ fieldset:disabled a.btn { color: #f8f9fa; border-color: #f8f9fa; } - .btn-outline-light:hover { color: #212529; background-color: #f8f9fa; border-color: #f8f9fa; } - .btn-outline-light:focus, .btn-outline-light.focus { box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } - .btn-outline-light.disabled, .btn-outline-light:disabled { color: #f8f9fa; background-color: transparent; } - -.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, -.show > .btn-outline-light.dropdown-toggle { +.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, .show > .btn-outline-light.dropdown-toggle { color: #212529; background-color: #f8f9fa; border-color: #f8f9fa; } - -.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-light.dropdown-toggle:focus { +.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-light.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } @@ -2754,31 +2874,24 @@ fieldset:disabled a.btn { color: #343a40; border-color: #343a40; } - .btn-outline-dark:hover { color: #fff; background-color: #343a40; border-color: #343a40; } - .btn-outline-dark:focus, .btn-outline-dark.focus { box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } - .btn-outline-dark.disabled, .btn-outline-dark:disabled { color: #343a40; background-color: transparent; } - -.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, -.show > .btn-outline-dark.dropdown-toggle { +.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, .show > .btn-outline-dark.dropdown-toggle { color: #fff; background-color: #343a40; border-color: #343a40; } - -.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-dark.dropdown-toggle:focus { +.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-dark.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } @@ -2787,17 +2900,14 @@ fieldset:disabled a.btn { color: #1abc9c; text-decoration: none; } - .btn-link:hover { color: #117964; text-decoration: underline; } - .btn-link:focus, .btn-link.focus { text-decoration: underline; box-shadow: none; } - .btn-link:disabled, .btn-link.disabled { color: #6c757d; pointer-events: none; @@ -2821,27 +2931,24 @@ fieldset:disabled a.btn { display: block; width: 100%; } - .btn-block + .btn-block { margin-top: 0.5rem; } -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { +input[type=submit].btn-block, +input[type=reset].btn-block, +input[type=button].btn-block { width: 100%; } .fade { transition: opacity 0.15s linear; } - @media (prefers-reduced-motion: reduce) { .fade { transition: none; } } - .fade:not(.show) { opacity: 0; } @@ -2856,7 +2963,6 @@ input[type="button"].btn-block { overflow: hidden; transition: height 0.35s ease; } - @media (prefers-reduced-motion: reduce) { .collapsing { transition: none; @@ -2873,7 +2979,6 @@ input[type="button"].btn-block { .dropdown-toggle { white-space: nowrap; } - .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; @@ -2884,7 +2989,6 @@ input[type="button"].btn-block { border-bottom: 0; border-left: 0.3em solid transparent; } - .dropdown-toggle:empty::after { margin-left: 0; } @@ -2924,52 +3028,51 @@ input[type="button"].btn-block { right: auto; left: 0; } + .dropdown-menu-sm-right { right: 0; left: auto; } } - @media (min-width: 768px) { .dropdown-menu-md-left { right: auto; left: 0; } + .dropdown-menu-md-right { right: 0; left: auto; } } - @media (min-width: 992px) { .dropdown-menu-lg-left { right: auto; left: 0; } + .dropdown-menu-lg-right { right: 0; left: auto; } } - @media (min-width: 1200px) { .dropdown-menu-xl-left { right: auto; left: 0; } + .dropdown-menu-xl-right { right: 0; left: auto; } } - .dropup .dropdown-menu { top: auto; bottom: 100%; margin-top: 0; margin-bottom: 0.125rem; } - .dropup .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; @@ -2980,7 +3083,6 @@ input[type="button"].btn-block { border-bottom: 0.3em solid; border-left: 0.3em solid transparent; } - .dropup .dropdown-toggle:empty::after { margin-left: 0; } @@ -2992,7 +3094,6 @@ input[type="button"].btn-block { margin-top: 0; margin-left: 0.125rem; } - .dropright .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; @@ -3003,11 +3104,9 @@ input[type="button"].btn-block { border-bottom: 0.3em solid transparent; border-left: 0.3em solid; } - .dropright .dropdown-toggle:empty::after { margin-left: 0; } - .dropright .dropdown-toggle::after { vertical-align: 0; } @@ -3019,18 +3118,15 @@ input[type="button"].btn-block { margin-top: 0; margin-right: 0.125rem; } - .dropleft .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; } - .dropleft .dropdown-toggle::after { display: none; } - .dropleft .dropdown-toggle::before { display: inline-block; margin-right: 0.255em; @@ -3040,16 +3136,14 @@ input[type="button"].btn-block { border-right: 0.3em solid; border-bottom: 0.3em solid transparent; } - .dropleft .dropdown-toggle:empty::after { margin-left: 0; } - .dropleft .dropdown-toggle::before { vertical-align: 0; } -.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { +.dropdown-menu[x-placement^=top], .dropdown-menu[x-placement^=right], .dropdown-menu[x-placement^=bottom], .dropdown-menu[x-placement^=left] { right: auto; bottom: auto; } @@ -3073,19 +3167,16 @@ input[type="button"].btn-block { background-color: transparent; border: 0; } - .dropdown-item:hover, .dropdown-item:focus { color: #16181b; text-decoration: none; background-color: #f8f9fa; } - .dropdown-item.active, .dropdown-item:active { color: #fff; text-decoration: none; background-color: #1abc9c; } - .dropdown-item.disabled, .dropdown-item:disabled { color: #6c757d; pointer-events: none; @@ -3117,18 +3208,15 @@ input[type="button"].btn-block { display: inline-flex; vertical-align: middle; } - .btn-group > .btn, .btn-group-vertical > .btn { position: relative; flex: 1 1 auto; } - .btn-group > .btn:hover, .btn-group-vertical > .btn:hover { z-index: 1; } - .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:active, @@ -3141,7 +3229,6 @@ input[type="button"].btn-block { flex-wrap: wrap; justify-content: flex-start; } - .btn-toolbar .input-group { width: auto; } @@ -3150,13 +3237,11 @@ input[type="button"].btn-block { .btn-group > .btn-group:not(:first-child) { margin-left: -0.125rem; } - .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:not(:first-child), .btn-group > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; @@ -3167,13 +3252,9 @@ input[type="button"].btn-block { padding-right: 0.5625rem; padding-left: 0.5625rem; } - -.dropdown-toggle-split::after, -.dropup .dropdown-toggle-split::after, -.dropright .dropdown-toggle-split::after { +.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropright .dropdown-toggle-split::after { margin-left: 0; } - .dropleft .dropdown-toggle-split::before { margin-right: 0; } @@ -3193,23 +3274,19 @@ input[type="button"].btn-block { 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: -0.125rem; } - .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:not(:first-child), .btn-group-vertical > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; @@ -3220,11 +3297,10 @@ input[type="button"].btn-block { .btn-group-toggle > .btn-group > .btn { margin-bottom: 0; } - -.btn-group-toggle > .btn input[type="radio"], -.btn-group-toggle > .btn input[type="checkbox"], -.btn-group-toggle > .btn-group > .btn input[type="radio"], -.btn-group-toggle > .btn-group > .btn input[type="checkbox"] { +.btn-group-toggle > .btn input[type=radio], +.btn-group-toggle > .btn input[type=checkbox], +.btn-group-toggle > .btn-group > .btn input[type=radio], +.btn-group-toggle > .btn-group > .btn input[type=checkbox] { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none; @@ -3237,17 +3313,15 @@ input[type="button"].btn-block { align-items: stretch; width: 100%; } - .input-group > .form-control, .input-group > .form-control-plaintext, .input-group > .custom-select, .input-group > .custom-file { position: relative; - flex: 1 1 auto; - width: 1%; + flex: 1 1 0%; + min-width: 0; margin-bottom: 0; } - .input-group > .form-control + .form-control, .input-group > .form-control + .custom-select, .input-group > .form-control + .custom-file, @@ -3262,40 +3336,32 @@ input[type="button"].btn-block { .input-group > .custom-file + .custom-file { margin-left: -0.125rem; } - .input-group > .form-control:focus, .input-group > .custom-select:focus, .input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { z-index: 3; } - .input-group > .custom-file .custom-file-input:focus { z-index: 4; } - .input-group > .form-control:not(:last-child), .input-group > .custom-select:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } - .input-group > .form-control:not(:first-child), .input-group > .custom-select:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } - .input-group > .custom-file { display: flex; align-items: center; } - -.input-group > .custom-file:not(:last-child) .custom-file-label, -.input-group > .custom-file:not(:last-child) .custom-file-label::after { +.input-group > .custom-file:not(:last-child) .custom-file-label, .input-group > .custom-file:not(:last-child) .custom-file-label::after { border-top-right-radius: 0; border-bottom-right-radius: 0; } - .input-group > .custom-file:not(:first-child) .custom-file-label { border-top-left-radius: 0; border-bottom-left-radius: 0; @@ -3305,18 +3371,15 @@ input[type="button"].btn-block { .input-group-append { display: flex; } - .input-group-prepend .btn, .input-group-append .btn { position: relative; z-index: 2; } - .input-group-prepend .btn:focus, .input-group-append .btn:focus { z-index: 3; } - .input-group-prepend .btn + .btn, .input-group-prepend .btn + .input-group-text, .input-group-prepend .input-group-text + .input-group-text, @@ -3351,15 +3414,14 @@ input[type="button"].btn-block { border: 0.125rem solid #ced4da; border-radius: 0.5rem; } - -.input-group-text input[type="radio"], -.input-group-text input[type="checkbox"] { +.input-group-text input[type=radio], +.input-group-text input[type=checkbox] { margin-top: 0; } .input-group-lg > .form-control:not(textarea), .input-group-lg > .custom-select { - height: calc(1.5em + 1rem + 0.25rem); + height: calc(1.5em + 1.25rem); } .input-group-lg > .form-control, @@ -3376,7 +3438,7 @@ input[type="button"].btn-block { .input-group-sm > .form-control:not(textarea), .input-group-sm > .custom-select { - height: calc(1.5em + 0.5rem + 0.25rem); + height: calc(1.5em + 0.75rem); } .input-group-sm > .form-control, @@ -3430,35 +3492,32 @@ input[type="button"].btn-block { .custom-control-input { position: absolute; + left: 0; z-index: -1; + width: 1rem; + height: 1.25rem; opacity: 0; } - .custom-control-input:checked ~ .custom-control-label::before { color: #fff; border-color: #1abc9c; background-color: #1abc9c; } - .custom-control-input:focus ~ .custom-control-label::before { box-shadow: 0 0 0 0.2rem rgba(26, 188, 156, 0.25); } - .custom-control-input:focus:not(:checked) ~ .custom-control-label::before { border-color: #6bebd1; } - .custom-control-input:not(:disabled):active ~ .custom-control-label::before { color: #fff; background-color: #98f1df; border-color: #98f1df; } - -.custom-control-input:disabled ~ .custom-control-label { +.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label { color: #6c757d; } - -.custom-control-input:disabled ~ .custom-control-label::before { +.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before { background-color: #e9ecef; } @@ -3467,7 +3526,6 @@ input[type="button"].btn-block { margin-bottom: 0; vertical-align: top; } - .custom-control-label::before { position: absolute; top: 0.25rem; @@ -3480,7 +3538,6 @@ input[type="button"].btn-block { background-color: #fff; border: #adb5bd solid 0.125rem; } - .custom-control-label::after { position: absolute; top: 0.25rem; @@ -3489,30 +3546,25 @@ input[type="button"].btn-block { width: 1rem; height: 1rem; content: ""; - background: no-repeat 50% / 50% 50%; + background: no-repeat 50%/50% 50%; } .custom-checkbox .custom-control-label::before { border-radius: 0.5rem; } - .custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e"); } - .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { border-color: #1abc9c; background-color: #1abc9c; } - .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); } - .custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(26, 188, 156, 0.5); } - .custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { background-color: rgba(26, 188, 156, 0.5); } @@ -3520,11 +3572,9 @@ input[type="button"].btn-block { .custom-radio .custom-control-label::before { border-radius: 50%; } - .custom-radio .custom-control-input:checked ~ .custom-control-label::after { - 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"); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); } - .custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(26, 188, 156, 0.5); } @@ -3532,35 +3582,30 @@ input[type="button"].btn-block { .custom-switch { padding-left: 2.25rem; } - .custom-switch .custom-control-label::before { left: -2.25rem; width: 1.75rem; pointer-events: all; border-radius: 0.5rem; } - .custom-switch .custom-control-label::after { - top: calc(0.25rem + 0.25rem); - left: calc(-2.25rem + 0.25rem); - width: calc(1rem - 0.5rem); - height: calc(1rem - 0.5rem); + top: 0.5rem; + left: -2rem; + width: 0.5rem; + height: 0.5rem; background-color: #adb5bd; border-radius: 0.5rem; transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media (prefers-reduced-motion: reduce) { .custom-switch .custom-control-label::after { transition: none; } } - .custom-switch .custom-control-input:checked ~ .custom-control-label::after { background-color: #fff; transform: translateX(0.75rem); } - .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(26, 188, 156, 0.5); } @@ -3568,50 +3613,48 @@ input[type="button"].btn-block { .custom-select { display: inline-block; width: 100%; - height: calc(1.5em + 0.75rem + 0.25rem); + height: calc(1.5em + 1rem); padding: 0.375rem 1.75rem 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #495057; vertical-align: middle; - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; - background-color: #fff; + background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; border: 0.125rem solid #ced4da; border-radius: 0.5rem; -webkit-appearance: none; - -moz-appearance: none; - appearance: none; + -moz-appearance: none; + appearance: none; } - .custom-select:focus { border-color: #6bebd1; outline: 0; box-shadow: 0 0 0 0.2rem rgba(26, 188, 156, 0.25); } - .custom-select:focus::-ms-value { color: #495057; background-color: #fff; } - .custom-select[multiple], .custom-select[size]:not([size="1"]) { height: auto; padding-right: 0.75rem; background-image: none; } - .custom-select:disabled { color: #6c757d; background-color: #e9ecef; } - .custom-select::-ms-expand { display: none; } +.custom-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #495057; +} .custom-select-sm { - height: calc(1.5em + 0.5rem + 0.25rem); + height: calc(1.5em + 0.75rem); padding-top: 0.25rem; padding-bottom: 0.25rem; padding-left: 0.5rem; @@ -3619,7 +3662,7 @@ input[type="button"].btn-block { } .custom-select-lg { - height: calc(1.5em + 1rem + 0.25rem); + height: calc(1.5em + 1.25rem); padding-top: 0.5rem; padding-bottom: 0.5rem; padding-left: 1rem; @@ -3630,7 +3673,7 @@ input[type="button"].btn-block { position: relative; display: inline-block; width: 100%; - height: calc(1.5em + 0.75rem + 0.25rem); + height: calc(1.5em + 1rem); margin-bottom: 0; } @@ -3638,24 +3681,20 @@ input[type="button"].btn-block { position: relative; z-index: 2; width: 100%; - height: calc(1.5em + 0.75rem + 0.25rem); + height: calc(1.5em + 1rem); margin: 0; opacity: 0; } - .custom-file-input:focus ~ .custom-file-label { border-color: #6bebd1; box-shadow: 0 0 0 0.2rem rgba(26, 188, 156, 0.25); } - -.custom-file-input:disabled ~ .custom-file-label { +.custom-file-input[disabled] ~ .custom-file-label, .custom-file-input:disabled ~ .custom-file-label { background-color: #e9ecef; } - .custom-file-input:lang(en) ~ .custom-file-label::after { content: "Browse"; } - .custom-file-input ~ .custom-file-label[data-browse]::after { content: attr(data-browse); } @@ -3666,7 +3705,7 @@ input[type="button"].btn-block { right: 0; left: 0; z-index: 1; - height: calc(1.5em + 0.75rem + 0.25rem); + height: calc(1.5em + 1rem); padding: 0.375rem 0.75rem; font-weight: 400; line-height: 1.5; @@ -3675,7 +3714,6 @@ input[type="button"].btn-block { border: 0.125rem solid #ced4da; border-radius: 0.5rem; } - .custom-file-label::after { position: absolute; top: 0; @@ -3695,34 +3733,28 @@ input[type="button"].btn-block { .custom-range { width: 100%; - height: calc(1rem + 0.4rem); + height: 1.4rem; padding: 0; background-color: transparent; -webkit-appearance: none; - -moz-appearance: none; - appearance: none; + -moz-appearance: none; + appearance: none; } - .custom-range:focus { outline: none; } - .custom-range:focus::-webkit-slider-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(26, 188, 156, 0.25); } - .custom-range:focus::-moz-range-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(26, 188, 156, 0.25); } - .custom-range:focus::-ms-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(26, 188, 156, 0.25); } - .custom-range::-moz-focus-outer { border: 0; } - .custom-range::-webkit-slider-thumb { width: 1rem; height: 1rem; @@ -3730,21 +3762,20 @@ input[type="button"].btn-block { background-color: #1abc9c; border: 0; border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -webkit-appearance: none; - appearance: none; + appearance: none; } - @media (prefers-reduced-motion: reduce) { .custom-range::-webkit-slider-thumb { + -webkit-transition: none; transition: none; } } - .custom-range::-webkit-slider-thumb:active { background-color: #98f1df; } - .custom-range::-webkit-slider-runnable-track { width: 100%; height: 0.5rem; @@ -3754,28 +3785,26 @@ input[type="button"].btn-block { border-color: transparent; border-radius: 1rem; } - .custom-range::-moz-range-thumb { width: 1rem; height: 1rem; background-color: #1abc9c; border: 0; border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -moz-appearance: none; - appearance: none; + appearance: none; } - @media (prefers-reduced-motion: reduce) { .custom-range::-moz-range-thumb { + -moz-transition: none; transition: none; } } - .custom-range::-moz-range-thumb:active { background-color: #98f1df; } - .custom-range::-moz-range-track { width: 100%; height: 0.5rem; @@ -3785,7 +3814,6 @@ input[type="button"].btn-block { border-color: transparent; border-radius: 1rem; } - .custom-range::-ms-thumb { width: 1rem; height: 1rem; @@ -3795,20 +3823,19 @@ input[type="button"].btn-block { background-color: #1abc9c; border: 0; border-radius: 1rem; + -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } - @media (prefers-reduced-motion: reduce) { .custom-range::-ms-thumb { + -ms-transition: none; transition: none; } } - .custom-range::-ms-thumb:active { background-color: #98f1df; } - .custom-range::-ms-track { width: 100%; height: 0.5rem; @@ -3818,34 +3845,27 @@ input[type="button"].btn-block { border-color: transparent; border-width: 0.5rem; } - .custom-range::-ms-fill-lower { background-color: #dee2e6; border-radius: 1rem; } - .custom-range::-ms-fill-upper { margin-right: 15px; background-color: #dee2e6; border-radius: 1rem; } - .custom-range:disabled::-webkit-slider-thumb { background-color: #adb5bd; } - .custom-range:disabled::-webkit-slider-runnable-track { cursor: default; } - .custom-range:disabled::-moz-range-thumb { background-color: #adb5bd; } - .custom-range:disabled::-moz-range-track { cursor: default; } - .custom-range:disabled::-ms-thumb { background-color: #adb5bd; } @@ -3855,11 +3875,10 @@ input[type="button"].btn-block { .custom-select { transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media (prefers-reduced-motion: reduce) { .custom-control-label::before, - .custom-file-label, - .custom-select { +.custom-file-label, +.custom-select { transition: none; } } @@ -3876,11 +3895,9 @@ input[type="button"].btn-block { display: block; padding: 0.5rem 1rem; } - .nav-link:hover, .nav-link:focus { text-decoration: none; } - .nav-link.disabled { color: #6c757d; pointer-events: none; @@ -3890,34 +3907,28 @@ input[type="button"].btn-block { .nav-tabs { border-bottom: 0.125rem solid #dee2e6; } - .nav-tabs .nav-item { margin-bottom: -0.125rem; } - .nav-tabs .nav-link { border: 0.125rem solid transparent; border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; } - .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { border-color: #e9ecef #e9ecef #dee2e6; } - .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: -0.125rem; border-top-left-radius: 0; @@ -3927,7 +3938,6 @@ input[type="button"].btn-block { .nav-pills .nav-link { border-radius: 0.5rem; } - .nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: #fff; @@ -3948,7 +3958,6 @@ input[type="button"].btn-block { .tab-content > .tab-pane { display: none; } - .tab-content > .active { display: block; } @@ -3961,15 +3970,17 @@ input[type="button"].btn-block { justify-content: space-between; padding: 0.5rem 1rem; } - -.navbar > .container, -.navbar > .container-fluid { +.navbar .container, +.navbar .container-fluid, +.navbar .container-sm, +.navbar .container-md, +.navbar .container-lg, +.navbar .container-xl { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; } - .navbar-brand { display: inline-block; padding-top: 0.3125rem; @@ -3979,7 +3990,6 @@ input[type="button"].btn-block { line-height: inherit; white-space: nowrap; } - .navbar-brand:hover, .navbar-brand:focus { text-decoration: none; } @@ -3991,12 +4001,10 @@ input[type="button"].btn-block { margin-bottom: 0; list-style: none; } - .navbar-nav .nav-link { padding-right: 0; padding-left: 0; } - .navbar-nav .dropdown-menu { position: static; float: none; @@ -4022,7 +4030,6 @@ input[type="button"].btn-block { border: 0.125rem solid transparent; border-radius: 0.5rem; } - .navbar-toggler:hover, .navbar-toggler:focus { text-decoration: none; } @@ -4039,12 +4046,15 @@ input[type="button"].btn-block { @media (max-width: 575.98px) { .navbar-expand-sm > .container, - .navbar-expand-sm > .container-fluid { +.navbar-expand-sm > .container-fluid, +.navbar-expand-sm > .container-sm, +.navbar-expand-sm > .container-md, +.navbar-expand-sm > .container-lg, +.navbar-expand-sm > .container-xl { padding-right: 0; padding-left: 0; } } - @media (min-width: 576px) { .navbar-expand-sm { flex-flow: row nowrap; @@ -4061,7 +4071,11 @@ input[type="button"].btn-block { padding-left: 0.5rem; } .navbar-expand-sm > .container, - .navbar-expand-sm > .container-fluid { +.navbar-expand-sm > .container-fluid, +.navbar-expand-sm > .container-sm, +.navbar-expand-sm > .container-md, +.navbar-expand-sm > .container-lg, +.navbar-expand-sm > .container-xl { flex-wrap: nowrap; } .navbar-expand-sm .navbar-collapse { @@ -4072,15 +4086,17 @@ input[type="button"].btn-block { display: none; } } - @media (max-width: 767.98px) { .navbar-expand-md > .container, - .navbar-expand-md > .container-fluid { +.navbar-expand-md > .container-fluid, +.navbar-expand-md > .container-sm, +.navbar-expand-md > .container-md, +.navbar-expand-md > .container-lg, +.navbar-expand-md > .container-xl { padding-right: 0; padding-left: 0; } } - @media (min-width: 768px) { .navbar-expand-md { flex-flow: row nowrap; @@ -4097,7 +4113,11 @@ input[type="button"].btn-block { padding-left: 0.5rem; } .navbar-expand-md > .container, - .navbar-expand-md > .container-fluid { +.navbar-expand-md > .container-fluid, +.navbar-expand-md > .container-sm, +.navbar-expand-md > .container-md, +.navbar-expand-md > .container-lg, +.navbar-expand-md > .container-xl { flex-wrap: nowrap; } .navbar-expand-md .navbar-collapse { @@ -4108,15 +4128,17 @@ input[type="button"].btn-block { display: none; } } - @media (max-width: 991.98px) { .navbar-expand-lg > .container, - .navbar-expand-lg > .container-fluid { +.navbar-expand-lg > .container-fluid, +.navbar-expand-lg > .container-sm, +.navbar-expand-lg > .container-md, +.navbar-expand-lg > .container-lg, +.navbar-expand-lg > .container-xl { padding-right: 0; padding-left: 0; } } - @media (min-width: 992px) { .navbar-expand-lg { flex-flow: row nowrap; @@ -4133,7 +4155,11 @@ input[type="button"].btn-block { padding-left: 0.5rem; } .navbar-expand-lg > .container, - .navbar-expand-lg > .container-fluid { +.navbar-expand-lg > .container-fluid, +.navbar-expand-lg > .container-sm, +.navbar-expand-lg > .container-md, +.navbar-expand-lg > .container-lg, +.navbar-expand-lg > .container-xl { flex-wrap: nowrap; } .navbar-expand-lg .navbar-collapse { @@ -4144,15 +4170,17 @@ input[type="button"].btn-block { display: none; } } - @media (max-width: 1199.98px) { .navbar-expand-xl > .container, - .navbar-expand-xl > .container-fluid { +.navbar-expand-xl > .container-fluid, +.navbar-expand-xl > .container-sm, +.navbar-expand-xl > .container-md, +.navbar-expand-xl > .container-lg, +.navbar-expand-xl > .container-xl { padding-right: 0; padding-left: 0; } } - @media (min-width: 1200px) { .navbar-expand-xl { flex-flow: row nowrap; @@ -4169,7 +4197,11 @@ input[type="button"].btn-block { padding-left: 0.5rem; } .navbar-expand-xl > .container, - .navbar-expand-xl > .container-fluid { +.navbar-expand-xl > .container-fluid, +.navbar-expand-xl > .container-sm, +.navbar-expand-xl > .container-md, +.navbar-expand-xl > .container-lg, +.navbar-expand-xl > .container-xl { flex-wrap: nowrap; } .navbar-expand-xl .navbar-collapse { @@ -4180,41 +4212,41 @@ input[type="button"].btn-block { display: none; } } - .navbar-expand { flex-flow: row nowrap; justify-content: flex-start; } - .navbar-expand > .container, -.navbar-expand > .container-fluid { +.navbar-expand > .container-fluid, +.navbar-expand > .container-sm, +.navbar-expand > .container-md, +.navbar-expand > .container-lg, +.navbar-expand > .container-xl { padding-right: 0; padding-left: 0; } - .navbar-expand .navbar-nav { flex-direction: row; } - .navbar-expand .navbar-nav .dropdown-menu { position: absolute; } - .navbar-expand .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } - .navbar-expand > .container, -.navbar-expand > .container-fluid { +.navbar-expand > .container-fluid, +.navbar-expand > .container-sm, +.navbar-expand > .container-md, +.navbar-expand > .container-lg, +.navbar-expand > .container-xl { flex-wrap: nowrap; } - .navbar-expand .navbar-collapse { display: flex !important; flex-basis: auto; } - .navbar-expand .navbar-toggler { display: none; } @@ -4222,47 +4254,37 @@ input[type="button"].btn-block { .navbar-light .navbar-brand { color: rgba(0, 0, 0, 0.9); } - .navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { color: rgba(0, 0, 0, 0.9); } - .navbar-light .navbar-nav .nav-link { color: rgba(0, 0, 0, 0.5); } - .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { color: rgba(0, 0, 0, 0.7); } - .navbar-light .navbar-nav .nav-link.disabled { color: rgba(0, 0, 0, 0.3); } - .navbar-light .navbar-nav .show > .nav-link, .navbar-light .navbar-nav .active > .nav-link, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .nav-link.active { color: rgba(0, 0, 0, 0.9); } - .navbar-light .navbar-toggler { color: rgba(0, 0, 0, 0.5); border-color: rgba(0, 0, 0, 0.1); } - .navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' 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, 0.5); } - .navbar-light .navbar-text a { color: rgba(0, 0, 0, 0.9); } - .navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { color: rgba(0, 0, 0, 0.9); } @@ -4270,47 +4292,37 @@ input[type="button"].btn-block { .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, 0.5); } - .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { color: rgba(255, 255, 255, 0.75); } - .navbar-dark .navbar-nav .nav-link.disabled { color: rgba(255, 255, 255, 0.25); } - .navbar-dark .navbar-nav .show > .nav-link, .navbar-dark .navbar-nav .active > .nav-link, .navbar-dark .navbar-nav .nav-link.show, .navbar-dark .navbar-nav .nav-link.active { color: #fff; } - .navbar-dark .navbar-toggler { color: rgba(255, 255, 255, 0.5); border-color: rgba(255, 255, 255, 0.1); } - .navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' 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, 0.5); } - .navbar-dark .navbar-text a { color: #fff; } - .navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { color: #fff; } @@ -4326,17 +4338,14 @@ input[type="button"].btn-block { border: 0.125rem solid rgba(0, 0, 0, 0.125); border-radius: 0.5rem; } - .card > hr { margin-right: 0; margin-left: 0; } - .card > .list-group:first-child .list-group-item:first-child { border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; } - .card > .list-group:last-child .list-group-item:last-child { border-bottom-right-radius: 0.5rem; border-bottom-left-radius: 0.5rem; @@ -4344,6 +4353,7 @@ input[type="button"].btn-block { .card-body { flex: 1 1 auto; + min-height: 1px; padding: 1.25rem; } @@ -4363,7 +4373,6 @@ input[type="button"].btn-block { .card-link:hover { text-decoration: none; } - .card-link + .card-link { margin-left: 1.25rem; } @@ -4374,11 +4383,9 @@ input[type="button"].btn-block { background-color: rgba(0, 0, 0, 0.03); border-bottom: 0.125rem solid rgba(0, 0, 0, 0.125); } - .card-header:first-child { - border-radius: calc(0.5rem - 0.125rem) calc(0.5rem - 0.125rem) 0 0; + border-radius: 0.375rem 0.375rem 0 0; } - .card-header + .list-group .list-group-item:first-child { border-top: 0; } @@ -4388,9 +4395,8 @@ input[type="button"].btn-block { background-color: rgba(0, 0, 0, 0.03); border-top: 0.125rem solid rgba(0, 0, 0, 0.125); } - .card-footer:last-child { - border-radius: 0 0 calc(0.5rem - 0.125rem) calc(0.5rem - 0.125rem); + border-radius: 0 0 0.375rem 0.375rem; } .card-header-tabs { @@ -4414,59 +4420,49 @@ input[type="button"].btn-block { padding: 1.25rem; } -.card-img { +.card-img, +.card-img-top, +.card-img-bottom { + flex-shrink: 0; width: 100%; - border-radius: calc(0.5rem - 0.125rem); } +.card-img, .card-img-top { - width: 100%; - border-top-left-radius: calc(0.5rem - 0.125rem); - border-top-right-radius: calc(0.5rem - 0.125rem); + border-top-left-radius: 0.375rem; + border-top-right-radius: 0.375rem; } +.card-img, .card-img-bottom { - width: 100%; - border-bottom-right-radius: calc(0.5rem - 0.125rem); - border-bottom-left-radius: calc(0.5rem - 0.125rem); -} - -.card-deck { - display: flex; - flex-direction: column; + border-bottom-right-radius: 0.375rem; + border-bottom-left-radius: 0.375rem; } .card-deck .card { margin-bottom: 15px; } - @media (min-width: 576px) { .card-deck { + display: flex; flex-flow: row wrap; margin-right: -15px; margin-left: -15px; } .card-deck .card { - display: flex; flex: 1 0 0%; - flex-direction: column; margin-right: 15px; margin-bottom: 0; margin-left: 15px; } } -.card-group { - display: flex; - flex-direction: column; -} - .card-group > .card { margin-bottom: 15px; } - @media (min-width: 576px) { .card-group { + display: flex; flex-flow: row wrap; } .card-group > .card { @@ -4482,11 +4478,11 @@ input[type="button"].btn-block { border-bottom-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-top, - .card-group > .card:not(:last-child) .card-header { +.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 { +.card-group > .card:not(:last-child) .card-footer { border-bottom-right-radius: 0; } .card-group > .card:not(:first-child) { @@ -4494,11 +4490,11 @@ input[type="button"].btn-block { border-bottom-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-top, - .card-group > .card:not(:first-child) .card-header { +.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 { +.card-group > .card:not(:first-child) .card-footer { border-bottom-left-radius: 0; } } @@ -4506,13 +4502,12 @@ input[type="button"].btn-block { .card-columns .card { margin-bottom: 0.75rem; } - @media (min-width: 576px) { .card-columns { -moz-column-count: 3; - column-count: 3; + column-count: 3; -moz-column-gap: 1.25rem; - column-gap: 1.25rem; + column-gap: 1.25rem; orphans: 1; widows: 1; } @@ -4525,28 +4520,17 @@ input[type="button"].btn-block { .accordion > .card { overflow: hidden; } - -.accordion > .card:not(:first-of-type) .card-header:first-child { - border-radius: 0; -} - -.accordion > .card:not(:first-of-type):not(:last-of-type) { - border-bottom: 0; - border-radius: 0; -} - -.accordion > .card:first-of-type { +.accordion > .card:not(:last-of-type) { border-bottom: 0; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } - -.accordion > .card:last-of-type { +.accordion > .card:not(:first-of-type) { border-top-left-radius: 0; border-top-right-radius: 0; } - -.accordion > .card .card-header { +.accordion > .card > .card-header { + border-radius: 0; margin-bottom: -0.125rem; } @@ -4563,22 +4547,18 @@ input[type="button"].btn-block { .breadcrumb-item + .breadcrumb-item { padding-left: 0.5rem; } - .breadcrumb-item + .breadcrumb-item::before { display: inline-block; padding-right: 0.5rem; color: #6c757d; content: "/"; } - .breadcrumb-item + .breadcrumb-item:hover::before { text-decoration: underline; } - .breadcrumb-item + .breadcrumb-item:hover::before { text-decoration: none; } - .breadcrumb-item.active { color: #6c757d; } @@ -4600,7 +4580,6 @@ input[type="button"].btn-block { background-color: #fff; border: 0.125rem solid #dee2e6; } - .page-link:hover { z-index: 2; color: #117964; @@ -4608,9 +4587,8 @@ input[type="button"].btn-block { background-color: #e9ecef; border-color: #dee2e6; } - .page-link:focus { - z-index: 2; + z-index: 3; outline: 0; box-shadow: 0 0 0 0.2rem rgba(26, 188, 156, 0.25); } @@ -4620,19 +4598,16 @@ input[type="button"].btn-block { border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; } - .page-item:last-child .page-link { border-top-right-radius: 0.5rem; border-bottom-right-radius: 0.5rem; } - .page-item.active .page-link { - z-index: 1; + z-index: 3; color: #fff; background-color: #1abc9c; border-color: #1abc9c; } - .page-item.disabled .page-link { color: #6c757d; pointer-events: none; @@ -4646,12 +4621,10 @@ input[type="button"].btn-block { font-size: 1.25rem; line-height: 1.5; } - .pagination-lg .page-item:first-child .page-link { border-top-left-radius: 0.75rem; border-bottom-left-radius: 0.75rem; } - .pagination-lg .page-item:last-child .page-link { border-top-right-radius: 0.75rem; border-bottom-right-radius: 0.75rem; @@ -4662,12 +4635,10 @@ input[type="button"].btn-block { font-size: 0.875rem; line-height: 1.5; } - .pagination-sm .page-item:first-child .page-link { border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } - .pagination-sm .page-item:last-child .page-link { border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; @@ -4685,13 +4656,11 @@ input[type="button"].btn-block { border-radius: 0.5rem; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media (prefers-reduced-motion: reduce) { .badge { transition: none; } } - a.badge:hover, a.badge:focus { text-decoration: none; } @@ -4715,12 +4684,10 @@ a.badge:hover, a.badge:focus { color: #fff; background-color: #1abc9c; } - a.badge-primary:hover, a.badge-primary:focus { color: #fff; background-color: #148f77; } - a.badge-primary:focus, a.badge-primary.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(26, 188, 156, 0.5); @@ -4730,12 +4697,10 @@ a.badge-primary:focus, a.badge-primary.focus { color: #fff; background-color: #2c3e50; } - a.badge-secondary:hover, a.badge-secondary:focus { color: #fff; background-color: #1a252f; } - a.badge-secondary:focus, a.badge-secondary.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(44, 62, 80, 0.5); @@ -4745,12 +4710,10 @@ a.badge-secondary:focus, a.badge-secondary.focus { color: #fff; background-color: #28a745; } - a.badge-success:hover, a.badge-success:focus { color: #fff; background-color: #1e7e34; } - a.badge-success:focus, a.badge-success.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); @@ -4760,12 +4723,10 @@ a.badge-success:focus, a.badge-success.focus { color: #fff; background-color: #17a2b8; } - a.badge-info:hover, a.badge-info:focus { color: #fff; background-color: #117a8b; } - a.badge-info:focus, a.badge-info.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); @@ -4775,12 +4736,10 @@ a.badge-info:focus, a.badge-info.focus { color: #212529; background-color: #ffc107; } - a.badge-warning:hover, a.badge-warning:focus { color: #212529; background-color: #d39e00; } - a.badge-warning:focus, a.badge-warning.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); @@ -4790,12 +4749,10 @@ a.badge-warning:focus, a.badge-warning.focus { color: #fff; background-color: #dc3545; } - a.badge-danger:hover, a.badge-danger:focus { color: #fff; background-color: #bd2130; } - a.badge-danger:focus, a.badge-danger.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); @@ -4805,12 +4762,10 @@ a.badge-danger:focus, a.badge-danger.focus { color: #212529; background-color: #f8f9fa; } - a.badge-light:hover, a.badge-light:focus { color: #212529; background-color: #dae0e5; } - a.badge-light:focus, a.badge-light.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); @@ -4820,12 +4775,10 @@ a.badge-light:focus, a.badge-light.focus { color: #fff; background-color: #343a40; } - a.badge-dark:hover, a.badge-dark:focus { color: #fff; background-color: #1d2124; } - a.badge-dark:focus, a.badge-dark.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); @@ -4837,7 +4790,6 @@ a.badge-dark:focus, a.badge-dark.focus { background-color: #e9ecef; border-radius: 0.75rem; } - @media (min-width: 576px) { .jumbotron { padding: 4rem 2rem; @@ -4869,7 +4821,6 @@ a.badge-dark:focus, a.badge-dark.focus { .alert-dismissible { padding-right: 4rem; } - .alert-dismissible .close { position: absolute; top: 0; @@ -4883,11 +4834,9 @@ a.badge-dark:focus, a.badge-dark.focus { background-color: #d1f2eb; border-color: #bfece3; } - .alert-primary hr { border-top-color: #abe6da; } - .alert-primary .alert-link { color: #08352c; } @@ -4897,11 +4846,9 @@ a.badge-dark:focus, a.badge-dark.focus { background-color: #d5d8dc; border-color: #c4c9ce; } - .alert-secondary hr { border-top-color: #b6bcc2; } - .alert-secondary .alert-link { color: #050709; } @@ -4911,11 +4858,9 @@ a.badge-dark:focus, a.badge-dark.focus { background-color: #d4edda; border-color: #c3e6cb; } - .alert-success hr { border-top-color: #b1dfbb; } - .alert-success .alert-link { color: #0b2e13; } @@ -4925,11 +4870,9 @@ a.badge-dark:focus, a.badge-dark.focus { background-color: #d1ecf1; border-color: #bee5eb; } - .alert-info hr { border-top-color: #abdde5; } - .alert-info .alert-link { color: #062c33; } @@ -4939,11 +4882,9 @@ a.badge-dark:focus, a.badge-dark.focus { background-color: #fff3cd; border-color: #ffeeba; } - .alert-warning hr { border-top-color: #ffe8a1; } - .alert-warning .alert-link { color: #533f03; } @@ -4953,11 +4894,9 @@ a.badge-dark:focus, a.badge-dark.focus { background-color: #f8d7da; border-color: #f5c6cb; } - .alert-danger hr { border-top-color: #f1b0b7; } - .alert-danger .alert-link { color: #491217; } @@ -4967,11 +4906,9 @@ a.badge-dark:focus, a.badge-dark.focus { background-color: #fefefe; border-color: #fdfdfe; } - .alert-light hr { border-top-color: #ececf6; } - .alert-light .alert-link { color: #686868; } @@ -4981,11 +4918,9 @@ a.badge-dark:focus, a.badge-dark.focus { background-color: #d6d8d9; border-color: #c6c8ca; } - .alert-dark hr { border-top-color: #b9bbbe; } - .alert-dark .alert-link { color: #040505; } @@ -5007,7 +4942,6 @@ a.badge-dark:focus, a.badge-dark.focus { background-position: 0 0; } } - .progress { display: flex; height: 1rem; @@ -5021,13 +4955,13 @@ a.badge-dark:focus, a.badge-dark.focus { display: flex; flex-direction: column; justify-content: center; + overflow: hidden; color: #fff; text-align: center; white-space: nowrap; background-color: #1abc9c; transition: width 0.6s ease; } - @media (prefers-reduced-motion: reduce) { .progress-bar { transition: none; @@ -5041,13 +4975,12 @@ a.badge-dark:focus, a.badge-dark.focus { .progress-bar-animated { -webkit-animation: progress-bar-stripes 1s linear infinite; - 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; + animation: none; } } @@ -5072,14 +5005,12 @@ a.badge-dark:focus, a.badge-dark.focus { 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; @@ -5089,170 +5020,175 @@ a.badge-dark:focus, a.badge-dark.focus { position: relative; display: block; padding: 0.75rem 1.25rem; - margin-bottom: -0.125rem; background-color: #fff; border: 0.125rem solid rgba(0, 0, 0, 0.125); } - .list-group-item:first-child { border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; } - .list-group-item:last-child { - margin-bottom: 0; border-bottom-right-radius: 0.5rem; border-bottom-left-radius: 0.5rem; } - .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: #1abc9c; border-color: #1abc9c; } +.list-group-item + .list-group-item { + border-top-width: 0; +} +.list-group-item + .list-group-item.active { + margin-top: -0.125rem; + border-top-width: 0.125rem; +} .list-group-horizontal { flex-direction: row; } - -.list-group-horizontal .list-group-item { - margin-right: -0.125rem; - margin-bottom: 0; -} - .list-group-horizontal .list-group-item:first-child { - border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; border-top-right-radius: 0; } - .list-group-horizontal .list-group-item:last-child { - margin-right: 0; border-top-right-radius: 0.5rem; - border-bottom-right-radius: 0.5rem; 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: 0.125rem; + border-left-width: 0; +} +.list-group-horizontal .list-group-item + .list-group-item.active { + margin-left: -0.125rem; + border-left-width: 0.125rem; +} @media (min-width: 576px) { .list-group-horizontal-sm { flex-direction: row; } - .list-group-horizontal-sm .list-group-item { - margin-right: -0.125rem; - margin-bottom: 0; - } .list-group-horizontal-sm .list-group-item:first-child { - border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; border-top-right-radius: 0; } .list-group-horizontal-sm .list-group-item:last-child { - margin-right: 0; border-top-right-radius: 0.5rem; - border-bottom-right-radius: 0.5rem; 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: 0.125rem; + border-left-width: 0; + } + .list-group-horizontal-sm .list-group-item + .list-group-item.active { + margin-left: -0.125rem; + border-left-width: 0.125rem; + } } - @media (min-width: 768px) { .list-group-horizontal-md { flex-direction: row; } - .list-group-horizontal-md .list-group-item { - margin-right: -0.125rem; - margin-bottom: 0; - } .list-group-horizontal-md .list-group-item:first-child { - border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; border-top-right-radius: 0; } .list-group-horizontal-md .list-group-item:last-child { - margin-right: 0; border-top-right-radius: 0.5rem; - border-bottom-right-radius: 0.5rem; 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: 0.125rem; + border-left-width: 0; + } + .list-group-horizontal-md .list-group-item + .list-group-item.active { + margin-left: -0.125rem; + border-left-width: 0.125rem; + } } - @media (min-width: 992px) { .list-group-horizontal-lg { flex-direction: row; } - .list-group-horizontal-lg .list-group-item { - margin-right: -0.125rem; - margin-bottom: 0; - } .list-group-horizontal-lg .list-group-item:first-child { - border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; border-top-right-radius: 0; } .list-group-horizontal-lg .list-group-item:last-child { - margin-right: 0; border-top-right-radius: 0.5rem; - border-bottom-right-radius: 0.5rem; 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: 0.125rem; + border-left-width: 0; + } + .list-group-horizontal-lg .list-group-item + .list-group-item.active { + margin-left: -0.125rem; + border-left-width: 0.125rem; + } } - @media (min-width: 1200px) { .list-group-horizontal-xl { flex-direction: row; } - .list-group-horizontal-xl .list-group-item { - margin-right: -0.125rem; - margin-bottom: 0; - } .list-group-horizontal-xl .list-group-item:first-child { - border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; border-top-right-radius: 0; } .list-group-horizontal-xl .list-group-item:last-child { - margin-right: 0; border-top-right-radius: 0.5rem; - border-bottom-right-radius: 0.5rem; 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: 0.125rem; + border-left-width: 0; + } + .list-group-horizontal-xl .list-group-item + .list-group-item.active { + margin-left: -0.125rem; + border-left-width: 0.125rem; + } } - .list-group-flush .list-group-item { - border-right: 0; - border-left: 0; + border-right-width: 0; + border-left-width: 0; border-radius: 0; } - -.list-group-flush .list-group-item:last-child { - margin-bottom: -0.125rem; -} - -.list-group-flush:first-child .list-group-item:first-child { - border-top: 0; +.list-group-flush .list-group-item:first-child { + border-top-width: 0; } - .list-group-flush:last-child .list-group-item:last-child { - margin-bottom: 0; - border-bottom: 0; + border-bottom-width: 0; } .list-group-item-primary { color: #0e6251; background-color: #bfece3; } - .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { color: #0e6251; background-color: #abe6da; } - .list-group-item-primary.list-group-item-action.active { color: #fff; background-color: #0e6251; @@ -5263,12 +5199,10 @@ a.badge-dark:focus, a.badge-dark.focus { color: #17202a; background-color: #c4c9ce; } - .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { color: #17202a; background-color: #b6bcc2; } - .list-group-item-secondary.list-group-item-action.active { color: #fff; background-color: #17202a; @@ -5279,12 +5213,10 @@ a.badge-dark:focus, a.badge-dark.focus { color: #155724; background-color: #c3e6cb; } - .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { color: #155724; background-color: #b1dfbb; } - .list-group-item-success.list-group-item-action.active { color: #fff; background-color: #155724; @@ -5295,12 +5227,10 @@ a.badge-dark:focus, a.badge-dark.focus { color: #0c5460; background-color: #bee5eb; } - .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { color: #0c5460; background-color: #abdde5; } - .list-group-item-info.list-group-item-action.active { color: #fff; background-color: #0c5460; @@ -5311,12 +5241,10 @@ a.badge-dark:focus, a.badge-dark.focus { color: #856404; background-color: #ffeeba; } - .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { color: #856404; background-color: #ffe8a1; } - .list-group-item-warning.list-group-item-action.active { color: #fff; background-color: #856404; @@ -5327,12 +5255,10 @@ a.badge-dark:focus, a.badge-dark.focus { color: #721c24; background-color: #f5c6cb; } - .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { color: #721c24; background-color: #f1b0b7; } - .list-group-item-danger.list-group-item-action.active { color: #fff; background-color: #721c24; @@ -5343,12 +5269,10 @@ a.badge-dark:focus, a.badge-dark.focus { color: #818182; background-color: #fdfdfe; } - .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { color: #818182; background-color: #ececf6; } - .list-group-item-light.list-group-item-action.active { color: #fff; background-color: #818182; @@ -5359,12 +5283,10 @@ a.badge-dark:focus, a.badge-dark.focus { color: #1b1e21; background-color: #c6c8ca; } - .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { color: #1b1e21; background-color: #b9bbbe; } - .list-group-item-dark.list-group-item-action.active { color: #fff; background-color: #1b1e21; @@ -5378,16 +5300,14 @@ a.badge-dark:focus, a.badge-dark.focus { line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; - opacity: .5; + opacity: 0.5; } - .close:hover { color: #000; text-decoration: none; } - .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { - opacity: .75; + opacity: 0.75; } button.close { @@ -5395,8 +5315,8 @@ button.close { background-color: transparent; border: 0; -webkit-appearance: none; - -moz-appearance: none; - appearance: none; + -moz-appearance: none; + appearance: none; } a.close.disabled { @@ -5412,24 +5332,20 @@ a.close.disabled { border: 1px solid rgba(0, 0, 0, 0.1); box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); + backdrop-filter: blur(10px); opacity: 0; border-radius: 0.25rem; } - .toast:not(:last-child) { margin-bottom: 0.75rem; } - .toast.showing { opacity: 1; } - .toast.show { display: block; opacity: 1; } - .toast.hide { display: none; } @@ -5451,7 +5367,6 @@ a.close.disabled { .modal-open { overflow: hidden; } - .modal-open .modal { overflow-x: hidden; overflow-y: auto; @@ -5475,37 +5390,34 @@ a.close.disabled { margin: 0.5rem; pointer-events: none; } - .modal.fade .modal-dialog { transition: transform 0.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 { display: flex; max-height: calc(100% - 1rem); } - .modal-dialog-scrollable .modal-content { max-height: calc(100vh - 1rem); overflow: hidden; } - .modal-dialog-scrollable .modal-header, .modal-dialog-scrollable .modal-footer { flex-shrink: 0; } - .modal-dialog-scrollable .modal-body { overflow-y: auto; } @@ -5515,23 +5427,19 @@ a.close.disabled { align-items: center; min-height: calc(100% - 1rem); } - .modal-dialog-centered::before { display: block; height: calc(100vh - 1rem); content: ""; } - .modal-dialog-centered.modal-dialog-scrollable { flex-direction: column; justify-content: center; height: 100%; } - .modal-dialog-centered.modal-dialog-scrollable .modal-content { max-height: none; } - .modal-dialog-centered.modal-dialog-scrollable::before { content: none; } @@ -5558,11 +5466,9 @@ a.close.disabled { height: 100vh; background-color: #000; } - .modal-backdrop.fade { opacity: 0; } - .modal-backdrop.show { opacity: 0.5; } @@ -5576,7 +5482,6 @@ a.close.disabled { border-top-left-radius: 0.75rem; border-top-right-radius: 0.75rem; } - .modal-header .close { padding: 1rem 1rem; margin: -1rem -1rem -1rem auto; @@ -5595,20 +5500,16 @@ a.close.disabled { .modal-footer { display: flex; + flex-wrap: wrap; align-items: center; justify-content: flex-end; - padding: 4rem 1rem; + padding: 4rem 1rem-0.25rem; border-top: 0 solid #dee2e6; border-bottom-right-radius: 0.75rem; border-bottom-left-radius: 0.75rem; } - -.modal-footer > :not(:first-child) { - margin-left: .25rem; -} - -.modal-footer > :not(:last-child) { - margin-right: .25rem; +.modal-footer > * { + margin: 0.25rem; } .modal-scrollbar-measure { @@ -5624,36 +5525,36 @@ a.close.disabled { max-width: 500px; margin: 1.75rem auto; } + .modal-dialog-scrollable { max-height: calc(100% - 3.5rem); } .modal-dialog-scrollable .modal-content { max-height: calc(100vh - 3.5rem); } + .modal-dialog-centered { min-height: calc(100% - 3.5rem); } .modal-dialog-centered::before { height: calc(100vh - 3.5rem); } + .modal-sm { max-width: 300px; } } - @media (min-width: 992px) { .modal-lg, - .modal-xl { +.modal-xl { max-width: 800px; } } - @media (min-width: 1200px) { .modal-xl { max-width: 1140px; } } - .tooltip { position: absolute; z-index: 1070; @@ -5677,18 +5578,15 @@ a.close.disabled { word-wrap: break-word; opacity: 0; } - .tooltip.show { opacity: 0.9; } - .tooltip .arrow { position: absolute; display: block; width: 0.8rem; height: 0.4rem; } - .tooltip .arrow::before { position: absolute; content: ""; @@ -5696,61 +5594,53 @@ a.close.disabled { border-style: solid; } -.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { +.bs-tooltip-top, .bs-tooltip-auto[x-placement^=top] { padding: 0.4rem 0; } - -.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { +.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=top] .arrow { bottom: 0; } - -.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { +.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=top] .arrow::before { top: 0; border-width: 0.4rem 0.4rem 0; border-top-color: #000; } -.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { +.bs-tooltip-right, .bs-tooltip-auto[x-placement^=right] { padding: 0 0.4rem; } - -.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { +.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=right] .arrow { left: 0; width: 0.4rem; height: 0.8rem; } - -.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { +.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=right] .arrow::before { right: 0; border-width: 0.4rem 0.4rem 0.4rem 0; border-right-color: #000; } -.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { +.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=bottom] { padding: 0.4rem 0; } - -.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { +.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=bottom] .arrow { top: 0; } - -.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { +.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=bottom] .arrow::before { bottom: 0; border-width: 0 0.4rem 0.4rem; border-bottom-color: #000; } -.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { +.bs-tooltip-left, .bs-tooltip-auto[x-placement^=left] { padding: 0 0.4rem; } - -.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { +.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=left] .arrow { right: 0; width: 0.4rem; height: 0.8rem; } - -.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { +.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=left] .arrow::before { left: 0; border-width: 0.4rem 0 0.4rem 0.4rem; border-left-color: #000; @@ -5793,7 +5683,6 @@ a.close.disabled { border: 0.125rem solid rgba(0, 0, 0, 0.2); border-radius: 0.75rem; } - .popover .arrow { position: absolute; display: block; @@ -5801,7 +5690,6 @@ a.close.disabled { height: 0.5rem; margin: 0 0.75rem; } - .popover .arrow::before, .popover .arrow::after { position: absolute; display: block; @@ -5810,70 +5698,60 @@ a.close.disabled { border-style: solid; } -.bs-popover-top, .bs-popover-auto[x-placement^="top"] { +.bs-popover-top, .bs-popover-auto[x-placement^=top] { margin-bottom: 0.5rem; } - -.bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow { - bottom: calc((0.5rem + 0.125rem) * -1); +.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=top] > .arrow { + bottom: -0.625rem; } - -.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before { +.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=top] > .arrow::before { bottom: 0; border-width: 0.5rem 0.5rem 0; border-top-color: rgba(0, 0, 0, 0.25); } - -.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after { +.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=top] > .arrow::after { bottom: 0.125rem; border-width: 0.5rem 0.5rem 0; border-top-color: #fff; } -.bs-popover-right, .bs-popover-auto[x-placement^="right"] { +.bs-popover-right, .bs-popover-auto[x-placement^=right] { margin-left: 0.5rem; } - -.bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow { - left: calc((0.5rem + 0.125rem) * -1); +.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=right] > .arrow { + left: -0.625rem; width: 0.5rem; height: 1rem; margin: 0.75rem 0; } - -.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before { +.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=right] > .arrow::before { left: 0; border-width: 0.5rem 0.5rem 0.5rem 0; border-right-color: rgba(0, 0, 0, 0.25); } - -.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after { +.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=right] > .arrow::after { left: 0.125rem; border-width: 0.5rem 0.5rem 0.5rem 0; border-right-color: #fff; } -.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { +.bs-popover-bottom, .bs-popover-auto[x-placement^=bottom] { margin-top: 0.5rem; } - -.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow { - top: calc((0.5rem + 0.125rem) * -1); +.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=bottom] > .arrow { + top: -0.625rem; } - -.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before { +.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=bottom] > .arrow::before { top: 0; border-width: 0 0.5rem 0.5rem 0.5rem; border-bottom-color: rgba(0, 0, 0, 0.25); } - -.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after { +.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=bottom] > .arrow::after { top: 0.125rem; border-width: 0 0.5rem 0.5rem 0.5rem; border-bottom-color: #fff; } - -.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { +.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=bottom] .popover-header::before { position: absolute; top: 0; left: 50%; @@ -5884,24 +5762,21 @@ a.close.disabled { border-bottom: 0.125rem solid #f7f7f7; } -.bs-popover-left, .bs-popover-auto[x-placement^="left"] { +.bs-popover-left, .bs-popover-auto[x-placement^=left] { margin-right: 0.5rem; } - -.bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow { - right: calc((0.5rem + 0.125rem) * -1); +.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=left] > .arrow { + right: -0.625rem; width: 0.5rem; height: 1rem; margin: 0.75rem 0; } - -.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before { +.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=left] > .arrow::before { right: 0; border-width: 0.5rem 0 0.5rem 0.5rem; border-left-color: rgba(0, 0, 0, 0.25); } - -.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after { +.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=left] > .arrow::after { right: 0.125rem; border-width: 0.5rem 0 0.5rem 0.5rem; border-left-color: #fff; @@ -5913,10 +5788,9 @@ a.close.disabled { font-size: 1rem; background-color: #f7f7f7; border-bottom: 0.125rem solid #ebebeb; - border-top-left-radius: calc(0.75rem - 0.125rem); - border-top-right-radius: calc(0.75rem - 0.125rem); + border-top-left-radius: 0.625rem; + border-top-right-radius: 0.625rem; } - .popover-header:empty { display: none; } @@ -5939,7 +5813,6 @@ a.close.disabled { width: 100%; overflow: hidden; } - .carousel-inner::after { display: block; clear: both; @@ -5953,10 +5826,9 @@ a.close.disabled { width: 100%; margin-right: -100%; -webkit-backface-visibility: hidden; - backface-visibility: hidden; + backface-visibility: hidden; transition: transform 0.6s ease-in-out; } - @media (prefers-reduced-motion: reduce) { .carousel-item { transition: none; @@ -5984,24 +5856,21 @@ a.close.disabled { transition-property: opacity; transform: none; } - .carousel-fade .carousel-item.active, .carousel-fade .carousel-item-next.carousel-item-left, .carousel-fade .carousel-item-prev.carousel-item-right { z-index: 1; opacity: 1; } - .carousel-fade .active.carousel-item-left, .carousel-fade .active.carousel-item-right { z-index: 0; opacity: 0; - transition: 0s 0.6s opacity; + transition: opacity 0s 0.6s; } - @media (prefers-reduced-motion: reduce) { .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-right { +.carousel-fade .active.carousel-item-right { transition: none; } } @@ -6021,14 +5890,12 @@ a.close.disabled { opacity: 0.5; transition: opacity 0.15s ease; } - @media (prefers-reduced-motion: reduce) { .carousel-control-prev, - .carousel-control-next { +.carousel-control-next { transition: none; } } - .carousel-control-prev:hover, .carousel-control-prev:focus, .carousel-control-next:hover, .carousel-control-next:focus { @@ -6051,15 +5918,15 @@ a.close.disabled { display: inline-block; width: 20px; height: 20px; - background: no-repeat 50% / 100% 100%; + background: no-repeat 50%/100% 100%; } .carousel-control-prev-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); } .carousel-control-next-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e"); } .carousel-indicators { @@ -6075,7 +5942,6 @@ a.close.disabled { margin-left: 15%; list-style: none; } - .carousel-indicators li { box-sizing: content-box; flex: 0 1 auto; @@ -6089,16 +5955,14 @@ a.close.disabled { background-clip: padding-box; border-top: 10px solid transparent; border-bottom: 10px solid transparent; - opacity: .5; + opacity: 0.5; transition: opacity 0.6s ease; } - @media (prefers-reduced-motion: reduce) { .carousel-indicators li { transition: none; } } - .carousel-indicators .active { opacity: 1; } @@ -6126,7 +5990,6 @@ a.close.disabled { transform: rotate(360deg); } } - .spinner-border { display: inline-block; width: 2rem; @@ -6135,8 +5998,8 @@ a.close.disabled { border: 0.25em solid currentColor; border-right-color: transparent; border-radius: 50%; - -webkit-animation: spinner-border .75s linear infinite; - animation: spinner-border .75s linear infinite; + -webkit-animation: spinner-border 0.75s linear infinite; + animation: spinner-border 0.75s linear infinite; } .spinner-border-sm { @@ -6162,7 +6025,6 @@ a.close.disabled { opacity: 1; } } - .spinner-grow { display: inline-block; width: 2rem; @@ -6171,8 +6033,8 @@ a.close.disabled { background-color: currentColor; border-radius: 50%; opacity: 0; - -webkit-animation: spinner-grow .75s linear infinite; - animation: spinner-grow .75s linear infinite; + -webkit-animation: spinner-grow 0.75s linear infinite; + animation: spinner-grow 0.75s linear infinite; } .spinner-grow-sm { @@ -6458,152 +6320,187 @@ button.bg-dark:focus { .d-sm-none { display: none !important; } + .d-sm-inline { display: inline !important; } + .d-sm-inline-block { display: inline-block !important; } + .d-sm-block { display: block !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; } } - @media (min-width: 768px) { .d-md-none { display: none !important; } + .d-md-inline { display: inline !important; } + .d-md-inline-block { display: inline-block !important; } + .d-md-block { display: block !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; } } - @media (min-width: 992px) { .d-lg-none { display: none !important; } + .d-lg-inline { display: inline !important; } + .d-lg-inline-block { display: inline-block !important; } + .d-lg-block { display: block !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; } } - @media (min-width: 1200px) { .d-xl-none { display: none !important; } + .d-xl-inline { display: inline !important; } + .d-xl-inline-block { display: inline-block !important; } + .d-xl-block { display: block !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; } } - @media print { .d-print-none { display: none !important; } + .d-print-inline { display: inline !important; } + .d-print-inline-block { display: inline-block !important; } + .d-print-block { display: block !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; } } - .embed-responsive { position: relative; display: block; @@ -6611,12 +6508,10 @@ button.bg-dark:focus { padding: 0; overflow: hidden; } - .embed-responsive::before { display: block; content: ""; } - .embed-responsive .embed-responsive-item, .embed-responsive iframe, .embed-responsive embed, @@ -6632,7 +6527,7 @@ button.bg-dark:focus { } .embed-responsive-21by9::before { - padding-top: 42.85714%; + padding-top: 42.8571428571%; } .embed-responsive-16by9::before { @@ -6787,422 +6682,550 @@ button.bg-dark:focus { .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-wrap { flex-wrap: wrap !important; } + .flex-sm-nowrap { flex-wrap: nowrap !important; } + .flex-sm-wrap-reverse { flex-wrap: wrap-reverse !important; } + .flex-sm-fill { flex: 1 1 auto !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; } + .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; } + .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; } } - @media (min-width: 768px) { .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-wrap { flex-wrap: wrap !important; } + .flex-md-nowrap { flex-wrap: nowrap !important; } + .flex-md-wrap-reverse { flex-wrap: wrap-reverse !important; } + .flex-md-fill { flex: 1 1 auto !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; } + .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; } + .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; } } - @media (min-width: 992px) { .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-wrap { flex-wrap: wrap !important; } + .flex-lg-nowrap { flex-wrap: nowrap !important; } + .flex-lg-wrap-reverse { flex-wrap: wrap-reverse !important; } + .flex-lg-fill { flex: 1 1 auto !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; } + .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; } + .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; } } - @media (min-width: 1200px) { .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-wrap { flex-wrap: wrap !important; } + .flex-xl-nowrap { flex-wrap: nowrap !important; } + .flex-xl-wrap-reverse { flex-wrap: wrap-reverse !important; } + .flex-xl-fill { flex: 1 1 auto !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; } + .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; } + .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; } } - .float-left { float: left !important; } @@ -7219,50 +7242,54 @@ button.bg-dark:focus { .float-sm-left { float: left !important; } + .float-sm-right { float: right !important; } + .float-sm-none { float: none !important; } } - @media (min-width: 768px) { .float-md-left { float: left !important; } + .float-md-right { float: right !important; } + .float-md-none { float: none !important; } } - @media (min-width: 992px) { .float-lg-left { float: left !important; } + .float-lg-right { float: right !important; } + .float-lg-none { float: none !important; } } - @media (min-width: 1200px) { .float-xl-left { float: left !important; } + .float-xl-right { float: right !important; } + .float-xl-none { float: none !important; } } - .overflow-auto { overflow: auto !important; } @@ -7322,6 +7349,7 @@ button.bg-dark:focus { width: 1px; height: 1px; padding: 0; + margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; @@ -7865,1382 +7893,1734 @@ button.bg-dark:focus { .m-sm-0 { margin: 0 !important; } + .mt-sm-0, - .my-sm-0 { +.my-sm-0 { margin-top: 0 !important; } + .mr-sm-0, - .mx-sm-0 { +.mx-sm-0 { margin-right: 0 !important; } + .mb-sm-0, - .my-sm-0 { +.my-sm-0 { margin-bottom: 0 !important; } + .ml-sm-0, - .mx-sm-0 { +.mx-sm-0 { margin-left: 0 !important; } + .m-sm-1 { margin: 0.25rem !important; } + .mt-sm-1, - .my-sm-1 { +.my-sm-1 { margin-top: 0.25rem !important; } + .mr-sm-1, - .mx-sm-1 { +.mx-sm-1 { margin-right: 0.25rem !important; } + .mb-sm-1, - .my-sm-1 { +.my-sm-1 { margin-bottom: 0.25rem !important; } + .ml-sm-1, - .mx-sm-1 { +.mx-sm-1 { margin-left: 0.25rem !important; } + .m-sm-2 { margin: 0.5rem !important; } + .mt-sm-2, - .my-sm-2 { +.my-sm-2 { margin-top: 0.5rem !important; } + .mr-sm-2, - .mx-sm-2 { +.mx-sm-2 { margin-right: 0.5rem !important; } + .mb-sm-2, - .my-sm-2 { +.my-sm-2 { margin-bottom: 0.5rem !important; } + .ml-sm-2, - .mx-sm-2 { +.mx-sm-2 { margin-left: 0.5rem !important; } + .m-sm-3 { margin: 1rem !important; } + .mt-sm-3, - .my-sm-3 { +.my-sm-3 { margin-top: 1rem !important; } + .mr-sm-3, - .mx-sm-3 { +.mx-sm-3 { margin-right: 1rem !important; } + .mb-sm-3, - .my-sm-3 { +.my-sm-3 { margin-bottom: 1rem !important; } + .ml-sm-3, - .mx-sm-3 { +.mx-sm-3 { margin-left: 1rem !important; } + .m-sm-4 { margin: 1.5rem !important; } + .mt-sm-4, - .my-sm-4 { +.my-sm-4 { margin-top: 1.5rem !important; } + .mr-sm-4, - .mx-sm-4 { +.mx-sm-4 { margin-right: 1.5rem !important; } + .mb-sm-4, - .my-sm-4 { +.my-sm-4 { margin-bottom: 1.5rem !important; } + .ml-sm-4, - .mx-sm-4 { +.mx-sm-4 { margin-left: 1.5rem !important; } + .m-sm-5 { margin: 3rem !important; } + .mt-sm-5, - .my-sm-5 { +.my-sm-5 { margin-top: 3rem !important; } + .mr-sm-5, - .mx-sm-5 { +.mx-sm-5 { margin-right: 3rem !important; } + .mb-sm-5, - .my-sm-5 { +.my-sm-5 { margin-bottom: 3rem !important; } + .ml-sm-5, - .mx-sm-5 { +.mx-sm-5 { margin-left: 3rem !important; } + .p-sm-0 { padding: 0 !important; } + .pt-sm-0, - .py-sm-0 { +.py-sm-0 { padding-top: 0 !important; } + .pr-sm-0, - .px-sm-0 { +.px-sm-0 { padding-right: 0 !important; } + .pb-sm-0, - .py-sm-0 { +.py-sm-0 { padding-bottom: 0 !important; } + .pl-sm-0, - .px-sm-0 { +.px-sm-0 { padding-left: 0 !important; } + .p-sm-1 { padding: 0.25rem !important; } + .pt-sm-1, - .py-sm-1 { +.py-sm-1 { padding-top: 0.25rem !important; } + .pr-sm-1, - .px-sm-1 { +.px-sm-1 { padding-right: 0.25rem !important; } + .pb-sm-1, - .py-sm-1 { +.py-sm-1 { padding-bottom: 0.25rem !important; } + .pl-sm-1, - .px-sm-1 { +.px-sm-1 { padding-left: 0.25rem !important; } + .p-sm-2 { padding: 0.5rem !important; } + .pt-sm-2, - .py-sm-2 { +.py-sm-2 { padding-top: 0.5rem !important; } + .pr-sm-2, - .px-sm-2 { +.px-sm-2 { padding-right: 0.5rem !important; } + .pb-sm-2, - .py-sm-2 { +.py-sm-2 { padding-bottom: 0.5rem !important; } + .pl-sm-2, - .px-sm-2 { +.px-sm-2 { padding-left: 0.5rem !important; } + .p-sm-3 { padding: 1rem !important; } + .pt-sm-3, - .py-sm-3 { +.py-sm-3 { padding-top: 1rem !important; } + .pr-sm-3, - .px-sm-3 { +.px-sm-3 { padding-right: 1rem !important; } + .pb-sm-3, - .py-sm-3 { +.py-sm-3 { padding-bottom: 1rem !important; } + .pl-sm-3, - .px-sm-3 { +.px-sm-3 { padding-left: 1rem !important; } + .p-sm-4 { padding: 1.5rem !important; } + .pt-sm-4, - .py-sm-4 { +.py-sm-4 { padding-top: 1.5rem !important; } + .pr-sm-4, - .px-sm-4 { +.px-sm-4 { padding-right: 1.5rem !important; } + .pb-sm-4, - .py-sm-4 { +.py-sm-4 { padding-bottom: 1.5rem !important; } + .pl-sm-4, - .px-sm-4 { +.px-sm-4 { padding-left: 1.5rem !important; } + .p-sm-5 { padding: 3rem !important; } + .pt-sm-5, - .py-sm-5 { +.py-sm-5 { padding-top: 3rem !important; } + .pr-sm-5, - .px-sm-5 { +.px-sm-5 { padding-right: 3rem !important; } + .pb-sm-5, - .py-sm-5 { +.py-sm-5 { padding-bottom: 3rem !important; } + .pl-sm-5, - .px-sm-5 { +.px-sm-5 { padding-left: 3rem !important; } + .m-sm-n1 { margin: -0.25rem !important; } + .mt-sm-n1, - .my-sm-n1 { +.my-sm-n1 { margin-top: -0.25rem !important; } + .mr-sm-n1, - .mx-sm-n1 { +.mx-sm-n1 { margin-right: -0.25rem !important; } + .mb-sm-n1, - .my-sm-n1 { +.my-sm-n1 { margin-bottom: -0.25rem !important; } + .ml-sm-n1, - .mx-sm-n1 { +.mx-sm-n1 { margin-left: -0.25rem !important; } + .m-sm-n2 { margin: -0.5rem !important; } + .mt-sm-n2, - .my-sm-n2 { +.my-sm-n2 { margin-top: -0.5rem !important; } + .mr-sm-n2, - .mx-sm-n2 { +.mx-sm-n2 { margin-right: -0.5rem !important; } + .mb-sm-n2, - .my-sm-n2 { +.my-sm-n2 { margin-bottom: -0.5rem !important; } + .ml-sm-n2, - .mx-sm-n2 { +.mx-sm-n2 { margin-left: -0.5rem !important; } + .m-sm-n3 { margin: -1rem !important; } + .mt-sm-n3, - .my-sm-n3 { +.my-sm-n3 { margin-top: -1rem !important; } + .mr-sm-n3, - .mx-sm-n3 { +.mx-sm-n3 { margin-right: -1rem !important; } + .mb-sm-n3, - .my-sm-n3 { +.my-sm-n3 { margin-bottom: -1rem !important; } + .ml-sm-n3, - .mx-sm-n3 { +.mx-sm-n3 { margin-left: -1rem !important; } + .m-sm-n4 { margin: -1.5rem !important; } + .mt-sm-n4, - .my-sm-n4 { +.my-sm-n4 { margin-top: -1.5rem !important; } + .mr-sm-n4, - .mx-sm-n4 { +.mx-sm-n4 { margin-right: -1.5rem !important; } + .mb-sm-n4, - .my-sm-n4 { +.my-sm-n4 { margin-bottom: -1.5rem !important; } + .ml-sm-n4, - .mx-sm-n4 { +.mx-sm-n4 { margin-left: -1.5rem !important; } + .m-sm-n5 { margin: -3rem !important; } + .mt-sm-n5, - .my-sm-n5 { +.my-sm-n5 { margin-top: -3rem !important; } + .mr-sm-n5, - .mx-sm-n5 { +.mx-sm-n5 { margin-right: -3rem !important; } + .mb-sm-n5, - .my-sm-n5 { +.my-sm-n5 { margin-bottom: -3rem !important; } + .ml-sm-n5, - .mx-sm-n5 { +.mx-sm-n5 { margin-left: -3rem !important; } + .m-sm-auto { margin: auto !important; } + .mt-sm-auto, - .my-sm-auto { +.my-sm-auto { margin-top: auto !important; } + .mr-sm-auto, - .mx-sm-auto { +.mx-sm-auto { margin-right: auto !important; } + .mb-sm-auto, - .my-sm-auto { +.my-sm-auto { margin-bottom: auto !important; } + .ml-sm-auto, - .mx-sm-auto { +.mx-sm-auto { margin-left: auto !important; } } - @media (min-width: 768px) { .m-md-0 { margin: 0 !important; } + .mt-md-0, - .my-md-0 { +.my-md-0 { margin-top: 0 !important; } + .mr-md-0, - .mx-md-0 { +.mx-md-0 { margin-right: 0 !important; } + .mb-md-0, - .my-md-0 { +.my-md-0 { margin-bottom: 0 !important; } + .ml-md-0, - .mx-md-0 { +.mx-md-0 { margin-left: 0 !important; } + .m-md-1 { margin: 0.25rem !important; } + .mt-md-1, - .my-md-1 { +.my-md-1 { margin-top: 0.25rem !important; } + .mr-md-1, - .mx-md-1 { +.mx-md-1 { margin-right: 0.25rem !important; } + .mb-md-1, - .my-md-1 { +.my-md-1 { margin-bottom: 0.25rem !important; } + .ml-md-1, - .mx-md-1 { +.mx-md-1 { margin-left: 0.25rem !important; } + .m-md-2 { margin: 0.5rem !important; } + .mt-md-2, - .my-md-2 { +.my-md-2 { margin-top: 0.5rem !important; } + .mr-md-2, - .mx-md-2 { +.mx-md-2 { margin-right: 0.5rem !important; } + .mb-md-2, - .my-md-2 { +.my-md-2 { margin-bottom: 0.5rem !important; } + .ml-md-2, - .mx-md-2 { +.mx-md-2 { margin-left: 0.5rem !important; } + .m-md-3 { margin: 1rem !important; } + .mt-md-3, - .my-md-3 { +.my-md-3 { margin-top: 1rem !important; } + .mr-md-3, - .mx-md-3 { +.mx-md-3 { margin-right: 1rem !important; } + .mb-md-3, - .my-md-3 { +.my-md-3 { margin-bottom: 1rem !important; } + .ml-md-3, - .mx-md-3 { +.mx-md-3 { margin-left: 1rem !important; } + .m-md-4 { margin: 1.5rem !important; } + .mt-md-4, - .my-md-4 { +.my-md-4 { margin-top: 1.5rem !important; } + .mr-md-4, - .mx-md-4 { +.mx-md-4 { margin-right: 1.5rem !important; } + .mb-md-4, - .my-md-4 { +.my-md-4 { margin-bottom: 1.5rem !important; } + .ml-md-4, - .mx-md-4 { +.mx-md-4 { margin-left: 1.5rem !important; } + .m-md-5 { margin: 3rem !important; } + .mt-md-5, - .my-md-5 { +.my-md-5 { margin-top: 3rem !important; } + .mr-md-5, - .mx-md-5 { +.mx-md-5 { margin-right: 3rem !important; } + .mb-md-5, - .my-md-5 { +.my-md-5 { margin-bottom: 3rem !important; } + .ml-md-5, - .mx-md-5 { +.mx-md-5 { margin-left: 3rem !important; } + .p-md-0 { padding: 0 !important; } + .pt-md-0, - .py-md-0 { +.py-md-0 { padding-top: 0 !important; } + .pr-md-0, - .px-md-0 { +.px-md-0 { padding-right: 0 !important; } + .pb-md-0, - .py-md-0 { +.py-md-0 { padding-bottom: 0 !important; } + .pl-md-0, - .px-md-0 { +.px-md-0 { padding-left: 0 !important; } + .p-md-1 { padding: 0.25rem !important; } + .pt-md-1, - .py-md-1 { +.py-md-1 { padding-top: 0.25rem !important; } + .pr-md-1, - .px-md-1 { +.px-md-1 { padding-right: 0.25rem !important; } + .pb-md-1, - .py-md-1 { +.py-md-1 { padding-bottom: 0.25rem !important; } + .pl-md-1, - .px-md-1 { +.px-md-1 { padding-left: 0.25rem !important; } + .p-md-2 { padding: 0.5rem !important; } + .pt-md-2, - .py-md-2 { +.py-md-2 { padding-top: 0.5rem !important; } + .pr-md-2, - .px-md-2 { +.px-md-2 { padding-right: 0.5rem !important; } + .pb-md-2, - .py-md-2 { +.py-md-2 { padding-bottom: 0.5rem !important; } + .pl-md-2, - .px-md-2 { +.px-md-2 { padding-left: 0.5rem !important; } + .p-md-3 { padding: 1rem !important; } + .pt-md-3, - .py-md-3 { +.py-md-3 { padding-top: 1rem !important; } + .pr-md-3, - .px-md-3 { +.px-md-3 { padding-right: 1rem !important; } + .pb-md-3, - .py-md-3 { +.py-md-3 { padding-bottom: 1rem !important; } + .pl-md-3, - .px-md-3 { +.px-md-3 { padding-left: 1rem !important; } + .p-md-4 { padding: 1.5rem !important; } + .pt-md-4, - .py-md-4 { +.py-md-4 { padding-top: 1.5rem !important; } + .pr-md-4, - .px-md-4 { +.px-md-4 { padding-right: 1.5rem !important; } + .pb-md-4, - .py-md-4 { +.py-md-4 { padding-bottom: 1.5rem !important; } + .pl-md-4, - .px-md-4 { +.px-md-4 { padding-left: 1.5rem !important; } + .p-md-5 { padding: 3rem !important; } + .pt-md-5, - .py-md-5 { +.py-md-5 { padding-top: 3rem !important; } + .pr-md-5, - .px-md-5 { +.px-md-5 { padding-right: 3rem !important; } + .pb-md-5, - .py-md-5 { +.py-md-5 { padding-bottom: 3rem !important; } + .pl-md-5, - .px-md-5 { +.px-md-5 { padding-left: 3rem !important; } + .m-md-n1 { margin: -0.25rem !important; } + .mt-md-n1, - .my-md-n1 { +.my-md-n1 { margin-top: -0.25rem !important; } + .mr-md-n1, - .mx-md-n1 { +.mx-md-n1 { margin-right: -0.25rem !important; } + .mb-md-n1, - .my-md-n1 { +.my-md-n1 { margin-bottom: -0.25rem !important; } + .ml-md-n1, - .mx-md-n1 { +.mx-md-n1 { margin-left: -0.25rem !important; } + .m-md-n2 { margin: -0.5rem !important; } + .mt-md-n2, - .my-md-n2 { +.my-md-n2 { margin-top: -0.5rem !important; } + .mr-md-n2, - .mx-md-n2 { +.mx-md-n2 { margin-right: -0.5rem !important; } + .mb-md-n2, - .my-md-n2 { +.my-md-n2 { margin-bottom: -0.5rem !important; } + .ml-md-n2, - .mx-md-n2 { +.mx-md-n2 { margin-left: -0.5rem !important; } + .m-md-n3 { margin: -1rem !important; } + .mt-md-n3, - .my-md-n3 { +.my-md-n3 { margin-top: -1rem !important; } + .mr-md-n3, - .mx-md-n3 { +.mx-md-n3 { margin-right: -1rem !important; } + .mb-md-n3, - .my-md-n3 { +.my-md-n3 { margin-bottom: -1rem !important; } + .ml-md-n3, - .mx-md-n3 { +.mx-md-n3 { margin-left: -1rem !important; } + .m-md-n4 { margin: -1.5rem !important; } + .mt-md-n4, - .my-md-n4 { +.my-md-n4 { margin-top: -1.5rem !important; } + .mr-md-n4, - .mx-md-n4 { +.mx-md-n4 { margin-right: -1.5rem !important; } + .mb-md-n4, - .my-md-n4 { +.my-md-n4 { margin-bottom: -1.5rem !important; } + .ml-md-n4, - .mx-md-n4 { +.mx-md-n4 { margin-left: -1.5rem !important; } + .m-md-n5 { margin: -3rem !important; } + .mt-md-n5, - .my-md-n5 { +.my-md-n5 { margin-top: -3rem !important; } + .mr-md-n5, - .mx-md-n5 { +.mx-md-n5 { margin-right: -3rem !important; } + .mb-md-n5, - .my-md-n5 { +.my-md-n5 { margin-bottom: -3rem !important; } + .ml-md-n5, - .mx-md-n5 { +.mx-md-n5 { margin-left: -3rem !important; } + .m-md-auto { margin: auto !important; } + .mt-md-auto, - .my-md-auto { +.my-md-auto { margin-top: auto !important; } + .mr-md-auto, - .mx-md-auto { +.mx-md-auto { margin-right: auto !important; } + .mb-md-auto, - .my-md-auto { +.my-md-auto { margin-bottom: auto !important; } + .ml-md-auto, - .mx-md-auto { +.mx-md-auto { margin-left: auto !important; } } - @media (min-width: 992px) { .m-lg-0 { margin: 0 !important; } + .mt-lg-0, - .my-lg-0 { +.my-lg-0 { margin-top: 0 !important; } + .mr-lg-0, - .mx-lg-0 { +.mx-lg-0 { margin-right: 0 !important; } + .mb-lg-0, - .my-lg-0 { +.my-lg-0 { margin-bottom: 0 !important; } + .ml-lg-0, - .mx-lg-0 { +.mx-lg-0 { margin-left: 0 !important; } + .m-lg-1 { margin: 0.25rem !important; } + .mt-lg-1, - .my-lg-1 { +.my-lg-1 { margin-top: 0.25rem !important; } + .mr-lg-1, - .mx-lg-1 { +.mx-lg-1 { margin-right: 0.25rem !important; } + .mb-lg-1, - .my-lg-1 { +.my-lg-1 { margin-bottom: 0.25rem !important; } + .ml-lg-1, - .mx-lg-1 { +.mx-lg-1 { margin-left: 0.25rem !important; } + .m-lg-2 { margin: 0.5rem !important; } + .mt-lg-2, - .my-lg-2 { +.my-lg-2 { margin-top: 0.5rem !important; } + .mr-lg-2, - .mx-lg-2 { +.mx-lg-2 { margin-right: 0.5rem !important; } + .mb-lg-2, - .my-lg-2 { +.my-lg-2 { margin-bottom: 0.5rem !important; } + .ml-lg-2, - .mx-lg-2 { +.mx-lg-2 { margin-left: 0.5rem !important; } + .m-lg-3 { margin: 1rem !important; } + .mt-lg-3, - .my-lg-3 { +.my-lg-3 { margin-top: 1rem !important; } + .mr-lg-3, - .mx-lg-3 { +.mx-lg-3 { margin-right: 1rem !important; } + .mb-lg-3, - .my-lg-3 { +.my-lg-3 { margin-bottom: 1rem !important; } + .ml-lg-3, - .mx-lg-3 { +.mx-lg-3 { margin-left: 1rem !important; } + .m-lg-4 { margin: 1.5rem !important; } + .mt-lg-4, - .my-lg-4 { +.my-lg-4 { margin-top: 1.5rem !important; } + .mr-lg-4, - .mx-lg-4 { +.mx-lg-4 { margin-right: 1.5rem !important; } + .mb-lg-4, - .my-lg-4 { +.my-lg-4 { margin-bottom: 1.5rem !important; } + .ml-lg-4, - .mx-lg-4 { +.mx-lg-4 { margin-left: 1.5rem !important; } + .m-lg-5 { margin: 3rem !important; } + .mt-lg-5, - .my-lg-5 { +.my-lg-5 { margin-top: 3rem !important; } + .mr-lg-5, - .mx-lg-5 { +.mx-lg-5 { margin-right: 3rem !important; } + .mb-lg-5, - .my-lg-5 { +.my-lg-5 { margin-bottom: 3rem !important; } + .ml-lg-5, - .mx-lg-5 { +.mx-lg-5 { margin-left: 3rem !important; } + .p-lg-0 { padding: 0 !important; } + .pt-lg-0, - .py-lg-0 { +.py-lg-0 { padding-top: 0 !important; } + .pr-lg-0, - .px-lg-0 { +.px-lg-0 { padding-right: 0 !important; } + .pb-lg-0, - .py-lg-0 { +.py-lg-0 { padding-bottom: 0 !important; } + .pl-lg-0, - .px-lg-0 { +.px-lg-0 { padding-left: 0 !important; } + .p-lg-1 { padding: 0.25rem !important; } + .pt-lg-1, - .py-lg-1 { +.py-lg-1 { padding-top: 0.25rem !important; } + .pr-lg-1, - .px-lg-1 { +.px-lg-1 { padding-right: 0.25rem !important; } + .pb-lg-1, - .py-lg-1 { +.py-lg-1 { padding-bottom: 0.25rem !important; } + .pl-lg-1, - .px-lg-1 { +.px-lg-1 { padding-left: 0.25rem !important; } + .p-lg-2 { padding: 0.5rem !important; } + .pt-lg-2, - .py-lg-2 { +.py-lg-2 { padding-top: 0.5rem !important; } + .pr-lg-2, - .px-lg-2 { +.px-lg-2 { padding-right: 0.5rem !important; } + .pb-lg-2, - .py-lg-2 { +.py-lg-2 { padding-bottom: 0.5rem !important; } + .pl-lg-2, - .px-lg-2 { +.px-lg-2 { padding-left: 0.5rem !important; } + .p-lg-3 { padding: 1rem !important; } + .pt-lg-3, - .py-lg-3 { +.py-lg-3 { padding-top: 1rem !important; } + .pr-lg-3, - .px-lg-3 { +.px-lg-3 { padding-right: 1rem !important; } + .pb-lg-3, - .py-lg-3 { +.py-lg-3 { padding-bottom: 1rem !important; } + .pl-lg-3, - .px-lg-3 { +.px-lg-3 { padding-left: 1rem !important; } + .p-lg-4 { padding: 1.5rem !important; } + .pt-lg-4, - .py-lg-4 { +.py-lg-4 { padding-top: 1.5rem !important; } + .pr-lg-4, - .px-lg-4 { +.px-lg-4 { padding-right: 1.5rem !important; } + .pb-lg-4, - .py-lg-4 { +.py-lg-4 { padding-bottom: 1.5rem !important; } + .pl-lg-4, - .px-lg-4 { +.px-lg-4 { padding-left: 1.5rem !important; } + .p-lg-5 { padding: 3rem !important; } + .pt-lg-5, - .py-lg-5 { +.py-lg-5 { padding-top: 3rem !important; } + .pr-lg-5, - .px-lg-5 { +.px-lg-5 { padding-right: 3rem !important; } + .pb-lg-5, - .py-lg-5 { +.py-lg-5 { padding-bottom: 3rem !important; } + .pl-lg-5, - .px-lg-5 { +.px-lg-5 { padding-left: 3rem !important; } + .m-lg-n1 { margin: -0.25rem !important; } + .mt-lg-n1, - .my-lg-n1 { +.my-lg-n1 { margin-top: -0.25rem !important; } + .mr-lg-n1, - .mx-lg-n1 { +.mx-lg-n1 { margin-right: -0.25rem !important; } + .mb-lg-n1, - .my-lg-n1 { +.my-lg-n1 { margin-bottom: -0.25rem !important; } + .ml-lg-n1, - .mx-lg-n1 { +.mx-lg-n1 { margin-left: -0.25rem !important; } + .m-lg-n2 { margin: -0.5rem !important; } + .mt-lg-n2, - .my-lg-n2 { +.my-lg-n2 { margin-top: -0.5rem !important; } + .mr-lg-n2, - .mx-lg-n2 { +.mx-lg-n2 { margin-right: -0.5rem !important; } + .mb-lg-n2, - .my-lg-n2 { +.my-lg-n2 { margin-bottom: -0.5rem !important; } + .ml-lg-n2, - .mx-lg-n2 { +.mx-lg-n2 { margin-left: -0.5rem !important; } + .m-lg-n3 { margin: -1rem !important; } + .mt-lg-n3, - .my-lg-n3 { +.my-lg-n3 { margin-top: -1rem !important; } + .mr-lg-n3, - .mx-lg-n3 { +.mx-lg-n3 { margin-right: -1rem !important; } + .mb-lg-n3, - .my-lg-n3 { +.my-lg-n3 { margin-bottom: -1rem !important; } + .ml-lg-n3, - .mx-lg-n3 { +.mx-lg-n3 { margin-left: -1rem !important; } + .m-lg-n4 { margin: -1.5rem !important; } + .mt-lg-n4, - .my-lg-n4 { +.my-lg-n4 { margin-top: -1.5rem !important; } + .mr-lg-n4, - .mx-lg-n4 { +.mx-lg-n4 { margin-right: -1.5rem !important; } + .mb-lg-n4, - .my-lg-n4 { +.my-lg-n4 { margin-bottom: -1.5rem !important; } + .ml-lg-n4, - .mx-lg-n4 { +.mx-lg-n4 { margin-left: -1.5rem !important; } + .m-lg-n5 { margin: -3rem !important; } + .mt-lg-n5, - .my-lg-n5 { +.my-lg-n5 { margin-top: -3rem !important; } + .mr-lg-n5, - .mx-lg-n5 { +.mx-lg-n5 { margin-right: -3rem !important; } + .mb-lg-n5, - .my-lg-n5 { +.my-lg-n5 { margin-bottom: -3rem !important; } + .ml-lg-n5, - .mx-lg-n5 { +.mx-lg-n5 { margin-left: -3rem !important; } + .m-lg-auto { margin: auto !important; } + .mt-lg-auto, - .my-lg-auto { +.my-lg-auto { margin-top: auto !important; } + .mr-lg-auto, - .mx-lg-auto { +.mx-lg-auto { margin-right: auto !important; } + .mb-lg-auto, - .my-lg-auto { +.my-lg-auto { margin-bottom: auto !important; } + .ml-lg-auto, - .mx-lg-auto { +.mx-lg-auto { margin-left: auto !important; } } - @media (min-width: 1200px) { .m-xl-0 { margin: 0 !important; } + .mt-xl-0, - .my-xl-0 { +.my-xl-0 { margin-top: 0 !important; } + .mr-xl-0, - .mx-xl-0 { +.mx-xl-0 { margin-right: 0 !important; } + .mb-xl-0, - .my-xl-0 { +.my-xl-0 { margin-bottom: 0 !important; } + .ml-xl-0, - .mx-xl-0 { +.mx-xl-0 { margin-left: 0 !important; } + .m-xl-1 { margin: 0.25rem !important; } + .mt-xl-1, - .my-xl-1 { +.my-xl-1 { margin-top: 0.25rem !important; } + .mr-xl-1, - .mx-xl-1 { +.mx-xl-1 { margin-right: 0.25rem !important; } + .mb-xl-1, - .my-xl-1 { +.my-xl-1 { margin-bottom: 0.25rem !important; } + .ml-xl-1, - .mx-xl-1 { +.mx-xl-1 { margin-left: 0.25rem !important; } + .m-xl-2 { margin: 0.5rem !important; } + .mt-xl-2, - .my-xl-2 { +.my-xl-2 { margin-top: 0.5rem !important; } + .mr-xl-2, - .mx-xl-2 { +.mx-xl-2 { margin-right: 0.5rem !important; } + .mb-xl-2, - .my-xl-2 { +.my-xl-2 { margin-bottom: 0.5rem !important; } + .ml-xl-2, - .mx-xl-2 { +.mx-xl-2 { margin-left: 0.5rem !important; } + .m-xl-3 { margin: 1rem !important; } + .mt-xl-3, - .my-xl-3 { +.my-xl-3 { margin-top: 1rem !important; } + .mr-xl-3, - .mx-xl-3 { +.mx-xl-3 { margin-right: 1rem !important; } + .mb-xl-3, - .my-xl-3 { +.my-xl-3 { margin-bottom: 1rem !important; } + .ml-xl-3, - .mx-xl-3 { +.mx-xl-3 { margin-left: 1rem !important; } + .m-xl-4 { margin: 1.5rem !important; } + .mt-xl-4, - .my-xl-4 { +.my-xl-4 { margin-top: 1.5rem !important; } + .mr-xl-4, - .mx-xl-4 { +.mx-xl-4 { margin-right: 1.5rem !important; } + .mb-xl-4, - .my-xl-4 { +.my-xl-4 { margin-bottom: 1.5rem !important; } + .ml-xl-4, - .mx-xl-4 { +.mx-xl-4 { margin-left: 1.5rem !important; } + .m-xl-5 { margin: 3rem !important; } + .mt-xl-5, - .my-xl-5 { +.my-xl-5 { margin-top: 3rem !important; } + .mr-xl-5, - .mx-xl-5 { +.mx-xl-5 { margin-right: 3rem !important; } + .mb-xl-5, - .my-xl-5 { +.my-xl-5 { margin-bottom: 3rem !important; } + .ml-xl-5, - .mx-xl-5 { +.mx-xl-5 { margin-left: 3rem !important; } + .p-xl-0 { padding: 0 !important; } + .pt-xl-0, - .py-xl-0 { +.py-xl-0 { padding-top: 0 !important; } + .pr-xl-0, - .px-xl-0 { +.px-xl-0 { padding-right: 0 !important; } + .pb-xl-0, - .py-xl-0 { +.py-xl-0 { padding-bottom: 0 !important; } + .pl-xl-0, - .px-xl-0 { +.px-xl-0 { padding-left: 0 !important; } + .p-xl-1 { padding: 0.25rem !important; } + .pt-xl-1, - .py-xl-1 { +.py-xl-1 { padding-top: 0.25rem !important; } + .pr-xl-1, - .px-xl-1 { +.px-xl-1 { padding-right: 0.25rem !important; } + .pb-xl-1, - .py-xl-1 { +.py-xl-1 { padding-bottom: 0.25rem !important; } + .pl-xl-1, - .px-xl-1 { +.px-xl-1 { padding-left: 0.25rem !important; } + .p-xl-2 { padding: 0.5rem !important; } + .pt-xl-2, - .py-xl-2 { +.py-xl-2 { padding-top: 0.5rem !important; } + .pr-xl-2, - .px-xl-2 { +.px-xl-2 { padding-right: 0.5rem !important; } + .pb-xl-2, - .py-xl-2 { +.py-xl-2 { padding-bottom: 0.5rem !important; } + .pl-xl-2, - .px-xl-2 { +.px-xl-2 { padding-left: 0.5rem !important; } + .p-xl-3 { padding: 1rem !important; } + .pt-xl-3, - .py-xl-3 { +.py-xl-3 { padding-top: 1rem !important; } + .pr-xl-3, - .px-xl-3 { +.px-xl-3 { padding-right: 1rem !important; } + .pb-xl-3, - .py-xl-3 { +.py-xl-3 { padding-bottom: 1rem !important; } + .pl-xl-3, - .px-xl-3 { +.px-xl-3 { padding-left: 1rem !important; } + .p-xl-4 { padding: 1.5rem !important; } + .pt-xl-4, - .py-xl-4 { +.py-xl-4 { padding-top: 1.5rem !important; } + .pr-xl-4, - .px-xl-4 { +.px-xl-4 { padding-right: 1.5rem !important; } + .pb-xl-4, - .py-xl-4 { +.py-xl-4 { padding-bottom: 1.5rem !important; } + .pl-xl-4, - .px-xl-4 { +.px-xl-4 { padding-left: 1.5rem !important; } + .p-xl-5 { padding: 3rem !important; } + .pt-xl-5, - .py-xl-5 { +.py-xl-5 { padding-top: 3rem !important; } + .pr-xl-5, - .px-xl-5 { +.px-xl-5 { padding-right: 3rem !important; } + .pb-xl-5, - .py-xl-5 { +.py-xl-5 { padding-bottom: 3rem !important; } + .pl-xl-5, - .px-xl-5 { +.px-xl-5 { padding-left: 3rem !important; } + .m-xl-n1 { margin: -0.25rem !important; } + .mt-xl-n1, - .my-xl-n1 { +.my-xl-n1 { margin-top: -0.25rem !important; } + .mr-xl-n1, - .mx-xl-n1 { +.mx-xl-n1 { margin-right: -0.25rem !important; } + .mb-xl-n1, - .my-xl-n1 { +.my-xl-n1 { margin-bottom: -0.25rem !important; } + .ml-xl-n1, - .mx-xl-n1 { +.mx-xl-n1 { margin-left: -0.25rem !important; } + .m-xl-n2 { margin: -0.5rem !important; } + .mt-xl-n2, - .my-xl-n2 { +.my-xl-n2 { margin-top: -0.5rem !important; } + .mr-xl-n2, - .mx-xl-n2 { +.mx-xl-n2 { margin-right: -0.5rem !important; } + .mb-xl-n2, - .my-xl-n2 { +.my-xl-n2 { margin-bottom: -0.5rem !important; } + .ml-xl-n2, - .mx-xl-n2 { +.mx-xl-n2 { margin-left: -0.5rem !important; } + .m-xl-n3 { margin: -1rem !important; } + .mt-xl-n3, - .my-xl-n3 { +.my-xl-n3 { margin-top: -1rem !important; } + .mr-xl-n3, - .mx-xl-n3 { +.mx-xl-n3 { margin-right: -1rem !important; } + .mb-xl-n3, - .my-xl-n3 { +.my-xl-n3 { margin-bottom: -1rem !important; } + .ml-xl-n3, - .mx-xl-n3 { +.mx-xl-n3 { margin-left: -1rem !important; } + .m-xl-n4 { margin: -1.5rem !important; } + .mt-xl-n4, - .my-xl-n4 { +.my-xl-n4 { margin-top: -1.5rem !important; } + .mr-xl-n4, - .mx-xl-n4 { +.mx-xl-n4 { margin-right: -1.5rem !important; } + .mb-xl-n4, - .my-xl-n4 { +.my-xl-n4 { margin-bottom: -1.5rem !important; } + .ml-xl-n4, - .mx-xl-n4 { +.mx-xl-n4 { margin-left: -1.5rem !important; } + .m-xl-n5 { margin: -3rem !important; } + .mt-xl-n5, - .my-xl-n5 { +.my-xl-n5 { margin-top: -3rem !important; } + .mr-xl-n5, - .mx-xl-n5 { +.mx-xl-n5 { margin-right: -3rem !important; } + .mb-xl-n5, - .my-xl-n5 { +.my-xl-n5 { margin-bottom: -3rem !important; } + .ml-xl-n5, - .mx-xl-n5 { +.mx-xl-n5 { margin-left: -3rem !important; } + .m-xl-auto { margin: auto !important; } + .mt-xl-auto, - .my-xl-auto { +.my-xl-auto { margin-top: auto !important; } + .mr-xl-auto, - .mx-xl-auto { +.mx-xl-auto { margin-right: auto !important; } + .mb-xl-auto, - .my-xl-auto { +.my-xl-auto { margin-bottom: auto !important; } + .ml-xl-auto, - .mx-xl-auto { +.mx-xl-auto { margin-left: auto !important; } } - .text-monospace { font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; } @@ -9279,50 +9659,54 @@ button.bg-dark:focus { .text-sm-left { text-align: left !important; } + .text-sm-right { text-align: right !important; } + .text-sm-center { text-align: center !important; } } - @media (min-width: 768px) { .text-md-left { text-align: left !important; } + .text-md-right { text-align: right !important; } + .text-md-center { text-align: center !important; } } - @media (min-width: 992px) { .text-lg-left { text-align: left !important; } + .text-lg-right { text-align: right !important; } + .text-lg-center { text-align: center !important; } } - @media (min-width: 1200px) { .text-xl-left { text-align: left !important; } + .text-xl-right { text-align: right !important; } + .text-xl-center { text-align: center !important; } } - .text-lowercase { text-transform: lowercase !important; } @@ -9474,92 +9858,105 @@ a.text-dark:hover, a.text-dark:focus { @media print { *, - *::before, - *::after { +*::before, +*::after { text-shadow: none !important; box-shadow: none !important; } + a:not(.btn) { text-decoration: underline; } + abbr[title]::after { content: " (" attr(title) ")"; } + pre { white-space: pre-wrap !important; } + pre, - blockquote { +blockquote { border: 0.125rem solid #adb5bd; page-break-inside: avoid; } + thead { display: table-header-group; } + tr, - img { +img { page-break-inside: avoid; } + p, - h2, - h3 { +h2, +h3 { orphans: 3; widows: 3; } + h2, - h3 { +h3 { page-break-after: avoid; } + @page { size: a3; } body { min-width: 992px !important; } + .container { min-width: 992px !important; } + .navbar { display: none; } + .badge { border: 0.125rem solid #000; } + .table { border-collapse: collapse !important; } .table td, - .table th { +.table th { background-color: #fff !important; } + .table-bordered th, - .table-bordered td { +.table-bordered td { border: 1px solid #dee2e6 !important; } + .table-dark { color: inherit; } .table-dark th, - .table-dark td, - .table-dark thead th, - .table-dark tbody + tbody { +.table-dark td, +.table-dark thead th, +.table-dark tbody + tbody { border-color: #dee2e6; } + .table .thead-dark th { color: inherit; border-color: #dee2e6; } } - .page-section { padding: 6rem 0; } - .page-section .page-section-heading { font-size: 2.25rem; line-height: 2rem; } - @media (min-width: 992px) { .page-section .page-section-heading { font-size: 3rem; @@ -9574,7 +9971,6 @@ a.text-dark:hover, a.text-dark:focus { justify-content: center; align-items: center; } - .divider-custom .divider-custom-line { width: 100%; max-width: 7rem; @@ -9583,24 +9979,19 @@ a.text-dark:hover, a.text-dark:focus { border-radius: 1rem; border-color: #2c3e50 !important; } - .divider-custom .divider-custom-line:first-child { margin-right: 1rem; } - .divider-custom .divider-custom-line:last-child { margin-left: 1rem; } - .divider-custom .divider-custom-icon { color: #2c3e50 !important; font-size: 2rem; } - .divider-custom.divider-light .divider-custom-line { background-color: #fff; } - .divider-custom.divider-light .divider-custom-icon { color: #fff !important; } @@ -9626,7 +10017,6 @@ a.text-dark:hover, a.text-dark:focus { bottom: 1rem; display: none; } - .scroll-to-top a { width: 3.5rem; height: 3.5rem; @@ -9640,31 +10030,24 @@ a.text-dark:hover, a.text-dark:focus { font-family: "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-weight: 700; } - #mainNav .navbar-brand { color: #fff; } - #mainNav .navbar-nav { margin-top: 1rem; } - #mainNav .navbar-nav li.nav-item a.nav-link { color: #fff; } - #mainNav .navbar-nav li.nav-item a.nav-link:hover { color: #1abc9c; } - #mainNav .navbar-nav li.nav-item a.nav-link:active, #mainNav .navbar-nav li.nav-item a.nav-link:focus { color: #fff; } - #mainNav .navbar-nav li.nav-item a.nav-link.active { color: #1abc9c; } - #mainNav .navbar-toggler { font-size: 80%; padding: 0.8rem; @@ -9691,6 +10074,7 @@ a.text-dark:hover, a.text-dark:focus { color: #fff; background: #1abc9c; } + #mainNav.navbar-shrink { padding-top: 0.5rem; padding-bottom: 0.5rem; @@ -9699,21 +10083,17 @@ a.text-dark:hover, a.text-dark:focus { font-size: 1.5em; } } - .masthead { padding-top: calc(6rem + 74px); padding-bottom: 6rem; } - .masthead .masthead-heading { font-size: 2.75rem; line-height: 2.75rem; } - .masthead .masthead-subheading { font-size: 1.25rem; } - .masthead .masthead-avatar { width: 15rem; } @@ -9731,11 +10111,9 @@ a.text-dark:hover, a.text-dark:focus { font-size: 1.5rem; } } - .portfolio { margin-bottom: -30px; } - .portfolio .portfolio-item { cursor: pointer; position: relative; @@ -9745,7 +10123,6 @@ a.text-dark:hover, a.text-dark:focus { border-radius: 0.5rem; overflow: hidden; } - .portfolio .portfolio-item .portfolio-item-caption { position: absolute; top: 0; @@ -9754,11 +10131,9 @@ a.text-dark:hover, a.text-dark:focus { opacity: 0; background-color: rgba(26, 188, 156, 0.9); } - .portfolio .portfolio-item .portfolio-item-caption:hover { opacity: 1; } - .portfolio .portfolio-item .portfolio-item-caption .portfolio-item-caption-content { font-size: 1.5rem; } @@ -9767,14 +10142,12 @@ a.text-dark:hover, a.text-dark:focus { font-size: 2.25rem; line-height: 2rem; } - @media (min-width: 992px) { .portfolio-modal .portfolio-modal-title { font-size: 3rem; line-height: 2.5rem; } } - .portfolio-modal .close { position: absolute; z-index: 1; @@ -9790,7 +10163,6 @@ a.text-dark:hover, a.text-dark:focus { position: relative; border-bottom: 1px solid #e9ecef; } - .floating-label-form-group input, .floating-label-form-group textarea { font-size: 1.5em; @@ -9804,7 +10176,6 @@ a.text-dark:hover, a.text-dark:focus { background: none; box-shadow: none !important; } - .floating-label-form-group label { font-size: 0.85em; line-height: 1.764705882em; @@ -9814,11 +10185,8 @@ a.text-dark:hover, a.text-dark:focus { display: block; margin: 0; transition: top 0.3s ease, opacity 0.3s ease; - vertical-align: middle; - vertical-align: baseline; opacity: 0; } - .floating-label-form-group:not(:first-child) { padding-left: 14px; border-left: 1px solid #e9ecef; @@ -9846,4 +10214,4 @@ form .row:first-child .floating-label-form-group { .copyright { background-color: #1a252f; -} +} \ No newline at end of file diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 000000000..f8c862371 --- /dev/null +++ b/dist/index.html @@ -0,0 +1,401 @@ + + + + + + + + Freelancer - Start Bootstrap Theme + + + + + + + + + + + + +
+
+ +

Start Bootstrap

+ +
+
+
+
+
+ +

Graphic Artist - Web Designer - Illustrator

+
+
+ +
+
+ +

Portfolio

+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+ +

About

+ +
+
+
+
+
+ +
+

Freelancer is a free bootstrap theme created by Start Bootstrap. The download includes the complete source files including HTML, CSS, and JavaScript as well as optional SASS stylesheets for easy customization.

+

You can create your own custom avatar for the masthead, change the icon in the dividers, and add your email address to the contact form to make it fully functional!

+
+ + +
+
+ +
+
+ +

Contact Me

+ +
+
+
+
+
+ +
+
+ +
+
+
+ +

+
+
+
+
+ +

+
+
+
+
+ +

+
+
+
+
+ +

+
+
+
+
+
+
+
+
+
+
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dist/js/scripts.js b/dist/js/scripts.js new file mode 100644 index 000000000..8cce11aab --- /dev/null +++ b/dist/js/scripts.js @@ -0,0 +1,69 @@ +/*! + * Start Bootstrap - Freelancer v6.0.0 (https://startbootstrap.com/themes/freelancer) + * Copyright 2013-2020 Start Bootstrap + * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/master/LICENSE) + */ + (function($) { + "use strict"; // Start of use strict + + // Smooth scrolling using jQuery easing + $('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() { + if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) { + var target = $(this.hash); + target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); + if (target.length) { + $('html, body').animate({ + scrollTop: (target.offset().top - 71) + }, 1000, "easeInOutExpo"); + return false; + } + } + }); + + // Scroll to top button appear + $(document).scroll(function() { + var scrollDistance = $(this).scrollTop(); + if (scrollDistance > 100) { + $('.scroll-to-top').fadeIn(); + } else { + $('.scroll-to-top').fadeOut(); + } + }); + + // Closes responsive menu when a scroll trigger link is clicked + $('.js-scroll-trigger').click(function() { + $('.navbar-collapse').collapse('hide'); + }); + + // Activate scrollspy to add active class to navbar items on scroll + $('body').scrollspy({ + target: '#mainNav', + offset: 80 + }); + + // Collapse Navbar + var navbarCollapse = function() { + if ($("#mainNav").offset().top > 100) { + $("#mainNav").addClass("navbar-shrink"); + } else { + $("#mainNav").removeClass("navbar-shrink"); + } + }; + // Collapse now if page is not at top + navbarCollapse(); + // Collapse the navbar when page is scrolled + $(window).scroll(navbarCollapse); + + // Floating label headings for the contact form + $(function() { + $("body").on("input propertychange", ".floating-label-form-group", function(e) { + $(this).toggleClass("floating-label-form-group-with-value", !!$(e.target).val()); + }).on("focus", ".floating-label-form-group", function() { + $(this).addClass("floating-label-form-group-with-focus"); + }).on("blur", ".floating-label-form-group", function() { + $(this).removeClass("floating-label-form-group-with-focus"); + }); + }); + + })(jQuery); // End of use strict + \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index 026fc379c..000000000 --- a/gulpfile.js +++ /dev/null @@ -1,135 +0,0 @@ -"use strict"; - -// Load plugins -const autoprefixer = require("gulp-autoprefixer"); -const browsersync = require("browser-sync").create(); -const cleanCSS = require("gulp-clean-css"); -const del = require("del"); -const gulp = require("gulp"); -const header = require("gulp-header"); -const merge = require("merge-stream"); -const plumber = require("gulp-plumber"); -const rename = require("gulp-rename"); -const sass = require("gulp-sass"); -const uglify = require("gulp-uglify"); - -// Load package.json for banner -const pkg = require('./package.json'); - -// Set the banner content -const banner = ['/*!\n', - ' * Start Bootstrap - <%= pkg.title %> v<%= pkg.version %> (<%= pkg.homepage %>)\n', - ' * Copyright 2013-' + (new Date()).getFullYear(), ' <%= pkg.author %>\n', - ' * Licensed under <%= pkg.license %> (https://github.com/BlackrockDigital/<%= pkg.name %>/blob/master/LICENSE)\n', - ' */\n', - '\n' -].join(''); - -// BrowserSync -function browserSync(done) { - browsersync.init({ - server: { - baseDir: "./" - }, - port: 3000 - }); - done(); -} - -// BrowserSync reload -function browserSyncReload(done) { - browsersync.reload(); - done(); -} - -// Clean vendor -function clean() { - return del(["./vendor/"]); -} - -// Bring third party dependencies from node_modules into vendor directory -function modules() { - // Bootstrap JS - var bootstrapJS = gulp.src('./node_modules/bootstrap/dist/js/*') - .pipe(gulp.dest('./vendor/bootstrap/js')); - // Font Awesome CSS - var fontAwesomeCSS = gulp.src('./node_modules/@fortawesome/fontawesome-free/css/**/*') - .pipe(gulp.dest('./vendor/fontawesome-free/css')); - // Font Awesome Webfonts - var fontAwesomeWebfonts = gulp.src('./node_modules/@fortawesome/fontawesome-free/webfonts/**/*') - .pipe(gulp.dest('./vendor/fontawesome-free/webfonts')); - // jQuery Easing - var jqueryEasing = gulp.src('./node_modules/jquery.easing/*.js') - .pipe(gulp.dest('./vendor/jquery-easing')); - // jQuery - var jquery = gulp.src([ - './node_modules/jquery/dist/*', - '!./node_modules/jquery/dist/core.js' - ]) - .pipe(gulp.dest('./vendor/jquery')); - return merge(bootstrapJS, fontAwesomeCSS, fontAwesomeWebfonts, jquery, jqueryEasing); -} - -// CSS task -function css() { - return gulp - .src("./scss/**/*.scss") - .pipe(plumber()) - .pipe(sass({ - outputStyle: "expanded", - includePaths: "./node_modules", - })) - .on("error", sass.logError) - .pipe(autoprefixer({ - cascade: false - })) - .pipe(header(banner, { - pkg: pkg - })) - .pipe(gulp.dest("./css")) - .pipe(rename({ - suffix: ".min" - })) - .pipe(cleanCSS()) - .pipe(gulp.dest("./css")) - .pipe(browsersync.stream()); -} - -// JS task -function js() { - return gulp - .src([ - './js/*.js', - '!./js/*.min.js' - ]) - .pipe(uglify()) - .pipe(header(banner, { - pkg: pkg - })) - .pipe(rename({ - suffix: '.min' - })) - .pipe(gulp.dest('./js')) - .pipe(browsersync.stream()); -} - -// Watch files -function watchFiles() { - gulp.watch("./scss/**/*", css); - gulp.watch(["./js/**/*", "!./js/**/*.min.js"], js); - gulp.watch("./**/*.html", browserSyncReload); -} - -// Define complex tasks -const vendor = gulp.series(clean, modules); -const build = gulp.series(vendor, gulp.parallel(css, js)); -const watch = gulp.series(build, gulp.parallel(watchFiles, browserSync)); - -// Export tasks -exports.css = css; -exports.js = js; -exports.clean = clean; -exports.vendor = vendor; -exports.build = build; -exports.watch = watch; -exports.default = build; diff --git a/index.html b/index.html deleted file mode 100644 index 4c9d1af7c..000000000 --- a/index.html +++ /dev/null @@ -1,575 +0,0 @@ - - - - - - - - - - - Freelancer - Start Bootstrap Theme - - - - - - - - - - - - - - - - - -
-
- - - - - -

Start Bootstrap

- - -
-
-
- -
-
-
- - -

Graphic Artist - Web Designer - Illustrator

- -
-
- - -
-
- - -

Portfolio

- - -
-
-
- -
-
-
- - -
- - -
-
-
-
- -
-
- -
-
- - -
-
-
-
- -
-
- -
-
- - -
-
-
-
- -
-
- -
-
- - -
-
-
-
- -
-
- -
-
- - -
-
-
-
- -
-
- -
-
- - -
-
-
-
- -
-
- -
-
- -
- - -
-
- - -
-
- - -

About

- - -
-
-
- -
-
-
- - -
-
-

Freelancer is a free bootstrap theme created by Start Bootstrap. The download includes the complete source files including HTML, CSS, and JavaScript as well as optional SASS stylesheets for easy customization.

-
-
-

You can create your own custom avatar for the masthead, change the icon in the dividers, and add your email address to the contact form to make it fully functional!

-
-
- - - - -
-
- - -
-
- - -

Contact Me

- - -
-
-
- -
-
-
- - -
-
- -
-
-
- - -

-
-
-
-
- - -

-
-
-
-
- - -

-
-
-
-
- - -

-
-
-
-
-
- -
-
-
-
- -
-
- - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/js/contact_me.min.js b/js/contact_me.min.js deleted file mode 100644 index 0c7d08d49..000000000 --- a/js/contact_me.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Start Bootstrap - Freelancer v5.1.3 (https://startbootstrap.com/template-overviews/freelancer) - * Copyright 2013-2019 Start Bootstrap - * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/master/LICENSE) - */ - -$(function(){$("#contactForm input,#contactForm textarea").jqBootstrapValidation({preventSubmit:!0,submitError:function(t,e,s){},submitSuccess:function(t,e){e.preventDefault();var s=$("input#name").val(),a=$("input#email").val(),n=$("input#phone").val(),c=$("textarea#message").val(),i=s;0<=i.indexOf(" ")&&(i=s.split(" ").slice(0,-1).join(" ")),$this=$("#sendMessageButton"),$this.prop("disabled",!0),$.ajax({url:"././mail/contact_me.php",type:"POST",data:{name:s,phone:n,email:a,message:c},cache:!1,success:function(){$("#success").html("
"),$("#success > .alert-success").html(""),$("#success > .alert-success").append("Your message has been sent. "),$("#success > .alert-success").append("
"),$("#contactForm").trigger("reset")},error:function(){$("#success").html("
"),$("#success > .alert-danger").html(""),$("#success > .alert-danger").append($("").text("Sorry "+i+", it seems that my mail server is not responding. Please try again later!")),$("#success > .alert-danger").append("
"),$("#contactForm").trigger("reset")},complete:function(){setTimeout(function(){$this.prop("disabled",!1)},1e3)}})},filter:function(){return $(this).is(":visible")}}),$('a[data-toggle="tab"]').click(function(t){t.preventDefault(),$(this).tab("show")})}),$("#name").focus(function(){$("#success").html("")}); \ No newline at end of file diff --git a/js/freelancer.js b/js/freelancer.js deleted file mode 100644 index 979be162f..000000000 --- a/js/freelancer.js +++ /dev/null @@ -1,63 +0,0 @@ -(function($) { - "use strict"; // Start of use strict - - // Smooth scrolling using jQuery easing - $('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() { - if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) { - var target = $(this.hash); - target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); - if (target.length) { - $('html, body').animate({ - scrollTop: (target.offset().top - 71) - }, 1000, "easeInOutExpo"); - return false; - } - } - }); - - // Scroll to top button appear - $(document).scroll(function() { - var scrollDistance = $(this).scrollTop(); - if (scrollDistance > 100) { - $('.scroll-to-top').fadeIn(); - } else { - $('.scroll-to-top').fadeOut(); - } - }); - - // Closes responsive menu when a scroll trigger link is clicked - $('.js-scroll-trigger').click(function() { - $('.navbar-collapse').collapse('hide'); - }); - - // Activate scrollspy to add active class to navbar items on scroll - $('body').scrollspy({ - target: '#mainNav', - offset: 80 - }); - - // Collapse Navbar - var navbarCollapse = function() { - if ($("#mainNav").offset().top > 100) { - $("#mainNav").addClass("navbar-shrink"); - } else { - $("#mainNav").removeClass("navbar-shrink"); - } - }; - // Collapse now if page is not at top - navbarCollapse(); - // Collapse the navbar when page is scrolled - $(window).scroll(navbarCollapse); - - // Floating label headings for the contact form - $(function() { - $("body").on("input propertychange", ".floating-label-form-group", function(e) { - $(this).toggleClass("floating-label-form-group-with-value", !!$(e.target).val()); - }).on("focus", ".floating-label-form-group", function() { - $(this).addClass("floating-label-form-group-with-focus"); - }).on("blur", ".floating-label-form-group", function() { - $(this).removeClass("floating-label-form-group-with-focus"); - }); - }); - -})(jQuery); // End of use strict diff --git a/js/freelancer.min.js b/js/freelancer.min.js deleted file mode 100644 index fb7f9659e..000000000 --- a/js/freelancer.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Start Bootstrap - Freelancer v5.1.3 (https://startbootstrap.com/template-overviews/freelancer) - * Copyright 2013-2019 Start Bootstrap - * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/master/LICENSE) - */ - -!function(t){"use strict";t('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function(){if(location.pathname.replace(/^\//,"")==this.pathname.replace(/^\//,"")&&location.hostname==this.hostname){var o=t(this.hash);if((o=o.length?o:t("[name="+this.hash.slice(1)+"]")).length)return t("html, body").animate({scrollTop:o.offset().top-71},1e3,"easeInOutExpo"),!1}}),t(document).scroll(function(){100'),t.find(".controls").append(i),m.push(i[0])),v.options.sniffHtml){var a="";if(void 0!==l.attr("pattern")&&(a="Not in the expected format\x3c!-- data-validation-pattern-message to override --\x3e",l.data("validationPatternMessage")&&(a=l.data("validationPatternMessage")),l.data("validationPatternMessage",a),l.data("validationPatternRegex",l.attr("pattern"))),void 0!==l.attr("max")||void 0!==l.attr("aria-valuemax")){var e=void 0!==l.attr("max")?l.attr("max"):l.attr("aria-valuemax");a="Too high: Maximum of '"+e+"'\x3c!-- data-validation-max-message to override --\x3e",l.data("validationMaxMessage")&&(a=l.data("validationMaxMessage")),l.data("validationMaxMessage",a),l.data("validationMaxMax",e)}if(void 0!==l.attr("min")||void 0!==l.attr("aria-valuemin")){var o=void 0!==l.attr("min")?l.attr("min"):l.attr("aria-valuemin");a="Too low: Minimum of '"+o+"'\x3c!-- data-validation-min-message to override --\x3e",l.data("validationMinMessage")&&(a=l.data("validationMinMessage")),l.data("validationMinMessage",a),l.data("validationMinMin",o)}void 0!==l.attr("maxlength")&&(a="Too long: Maximum of '"+l.attr("maxlength")+"' characters\x3c!-- data-validation-maxlength-message to override --\x3e",l.data("validationMaxlengthMessage")&&(a=l.data("validationMaxlengthMessage")),l.data("validationMaxlengthMessage",a),l.data("validationMaxlengthMaxlength",l.attr("maxlength"))),void 0!==l.attr("minlength")&&(a="Too short: Minimum of '"+l.attr("minlength")+"' characters\x3c!-- data-validation-minlength-message to override --\x3e",l.data("validationMinlengthMessage")&&(a=l.data("validationMinlengthMessage")),l.data("validationMinlengthMessage",a),l.data("validationMinlengthMinlength",l.attr("minlength"))),void 0===l.attr("required")&&void 0===l.attr("aria-required")||(a=v.builtInValidators.required.message,l.data("validationRequiredMessage")&&(a=l.data("validationRequiredMessage")),l.data("validationRequiredMessage",a)),void 0!==l.attr("type")&&"number"===l.attr("type").toLowerCase()&&(a=v.builtInValidators.number.message,l.data("validationNumberMessage")&&(a=l.data("validationNumberMessage")),l.data("validationNumberMessage",a)),void 0!==l.attr("type")&&"email"===l.attr("type").toLowerCase()&&(a="Not a valid email address\x3c!-- data-validator-validemail-message to override --\x3e",l.data("validationValidemailMessage")?a=l.data("validationValidemailMessage"):l.data("validationEmailMessage")&&(a=l.data("validationEmailMessage")),l.data("validationValidemailMessage",a)),void 0!==l.attr("minchecked")&&(a="Not enough options checked; Minimum of '"+l.attr("minchecked")+"' required\x3c!-- data-validation-minchecked-message to override --\x3e",l.data("validationMincheckedMessage")&&(a=l.data("validationMincheckedMessage")),l.data("validationMincheckedMessage",a),l.data("validationMincheckedMinchecked",l.attr("minchecked"))),void 0!==l.attr("maxchecked")&&(a="Too many options checked; Maximum of '"+l.attr("maxchecked")+"' required\x3c!-- data-validation-maxchecked-message to override --\x3e",l.data("validationMaxcheckedMessage")&&(a=l.data("validationMaxcheckedMessage")),l.data("validationMaxcheckedMessage",a),l.data("validationMaxcheckedMaxchecked",l.attr("maxchecked")))}void 0!==l.data("validation")&&(n=l.data("validation").split(",")),u.each(l.data(),function(a,e){var t=a.replace(/([A-Z])/g,",$1").split(",");"validation"===t[0]&&t[1]&&n.push(t[1])});for(var s=n,d=[];u.each(n,function(a,e){n[a]=g(e)}),n=u.unique(n),d=[],u.each(s,function(a,e){if(void 0!==l.data("validation"+e+"Shortcut"))u.each(l.data("validation"+e+"Shortcut").split(","),function(a,e){d.push(e)});else if(v.builtInValidators[e.toLowerCase()]){var t=v.builtInValidators[e.toLowerCase()];"shortcut"===t.type.toLowerCase()&&u.each(t.shortcut.split(","),function(a,e){e=g(e),d.push(e),n.push(e)})}}),0<(s=d).length;);var c={};u.each(n,function(a,t){var i=l.data("validation"+t+"Message"),e=void 0!==i,n=!1;if(i=i||"'"+t+"' validation failed \x3c!-- Add attribute 'data-validation-"+t.toLowerCase()+"-message' to input to change this message --\x3e",u.each(v.validatorTypes,function(a,e){void 0===c[a]&&(c[a]=[]),n||void 0===l.data("validation"+t+g(e.name))||(c[a].push(u.extend(!0,{name:g(e.name),message:i},e.init(l,t))),n=!0)}),!n&&v.builtInValidators[t.toLowerCase()]){var o=u.extend(!0,{},v.builtInValidators[t.toLowerCase()]);e&&(o.message=i);var r=o.type.toLowerCase();"shortcut"===r?n=!0:u.each(v.validatorTypes,function(a,e){void 0===c[a]&&(c[a]=[]),n||r!==a.toLowerCase()||(l.data("validation"+t+g(e.name),o[e.name.toLowerCase()]),c[r].push(u.extend(o,e.init(l,t))),n=!0)})}n||u.error("Cannot find validation info for '"+t+"'")}),i.data("original-contents",i.data("original-contents")?i.data("original-contents"):i.html()),i.data("original-role",i.data("original-role")?i.data("original-role"):i.attr("role")),t.data("original-classes",t.data("original-clases")?t.data("original-classes"):t.attr("class")),l.data("original-aria-invalid",l.data("original-aria-invalid")?l.data("original-aria-invalid"):l.attr("aria-invalid")),l.bind("validation.validation",function(a,e){var i=h(l),n=[];return u.each(c,function(t,a){(i||i.length||e&&e.includeEmpty||v.validatorTypes[t].blockSubmit&&e&&e.submitting)&&u.each(a,function(a,e){v.validatorTypes[t].validate(l,i,e)&&n.push(e.message)})}),n}),l.bind("getValidators.validation",function(){return c}),l.bind("submit.validation",function(){return l.triggerHandler("change.validation",{submitting:!0})}),l.bind(["keyup","focus","blur","click","keydown","keypress","change"].join(".validation ")+".validation",function(a,n){var e=h(l),o=[];t.find("input,textarea,select").each(function(a,e){var t=o.length;if(u.each(u(e).triggerHandler("validation.validation",n),function(a,e){o.push(e)}),o.length>t)u(e).attr("aria-invalid","true");else{var i=l.data("original-aria-invalid");u(e).attr("aria-invalid",void 0!==i&&i)}}),r.find("input,select,textarea").not(l).not('[name="'+l.attr("name")+'"]').trigger("validationLostFocus.validation"),(o=u.unique(o.sort())).length?(t.removeClass("success error").addClass("warning"),v.options.semanticallyStrict&&1===o.length?i.html(o[0]+(v.options.prependExistingHelpBlock?i.data("original-contents"):"")):i.html('
  • '+o.join("
  • ")+"
"+(v.options.prependExistingHelpBlock?i.data("original-contents"):""))):(t.removeClass("warning error success"),0parseFloat(t.max,10)&&!t.negative||parseFloat(e,10)<=parseFloat(t.max,10)&&t.negative}},min:{name:"min",init:function(a,e){return{min:a.data("validation"+e+"Min")}},validate:function(a,e,t){return parseFloat(e)=parseFloat(t.min)&&t.negative}},maxlength:{name:"maxlength",init:function(a,e){return{maxlength:a.data("validation"+e+"Maxlength")}},validate:function(a,e,t){return e.length>t.maxlength&&!t.negative||e.length<=t.maxlength&&t.negative}},minlength:{name:"minlength",init:function(a,e){return{minlength:a.data("validation"+e+"Minlength")}},validate:function(a,e,t){return e.length=t.minlength&&t.negative}},maxchecked:{name:"maxchecked",init:function(a,e){var t=a.parents("form").first().find('[name="'+a.attr("name")+'"]');return t.bind("click.validation",function(){a.trigger("change.validation",{includeEmpty:!0})}),{maxchecked:a.data("validation"+e+"Maxchecked"),elements:t}},validate:function(a,e,t){return t.elements.filter(":checked").length>t.maxchecked&&!t.negative||t.elements.filter(":checked").length<=t.maxchecked&&t.negative},blockSubmit:!0},minchecked:{name:"minchecked",init:function(a,e){var t=a.parents("form").first().find('[name="'+a.attr("name")+'"]');return t.bind("click.validation",function(){a.trigger("change.validation",{includeEmpty:!0})}),{minchecked:a.data("validation"+e+"Minchecked"),elements:t}},validate:function(a,e,t){return t.elements.filter(":checked").length=t.minchecked&&t.negative},blockSubmit:!0}},builtInValidators:{email:{name:"Email",type:"shortcut",shortcut:"validemail"},validemail:{name:"Validemail",type:"regex",regex:"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}",message:"Not a valid email address\x3c!-- data-validator-validemail-message to override --\x3e"},passwordagain:{name:"Passwordagain",type:"match",match:"password",message:"Does not match the given password\x3c!-- data-validator-paswordagain-message to override --\x3e"},positive:{name:"Positive",type:"shortcut",shortcut:"number,positivenumber"},negative:{name:"Negative",type:"shortcut",shortcut:"number,negativenumber"},number:{name:"Number",type:"regex",regex:"([+-]?\\d+(\\.\\d*)?([eE][+-]?[0-9]+)?)?",message:"Must be a number\x3c!-- data-validator-number-message to override --\x3e"},integer:{name:"Integer",type:"regex",regex:"[+-]?\\d+",message:"No decimal places allowed\x3c!-- data-validator-integer-message to override --\x3e"},positivenumber:{name:"Positivenumber",type:"min",min:0,message:"Must be a positive number\x3c!-- data-validator-positivenumber-message to override --\x3e"},negativenumber:{name:"Negativenumber",type:"max",max:0,message:"Must be a negative number\x3c!-- data-validator-negativenumber-message to override --\x3e"},required:{name:"Required",type:"required",message:"This is required\x3c!-- data-validator-required-message to override --\x3e"},checkone:{name:"Checkone",type:"minchecked",minchecked:1,message:"Check at least one option\x3c!-- data-validation-checkone-message to override --\x3e"}}},g=function(a){return a.toLowerCase().replace(/(^|\s)([a-z])/g,function(a,e,t){return e+t.toUpperCase()})},h=function(a){var e=a.val(),t=a.attr("type");return"checkbox"===t&&(e=a.is(":checked")?e:""),"radio"===t&&(e=0=0.5 0", - "rimraf": "2" - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -2762,407 +2193,19 @@ } } }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - } - }, - "glob-watcher": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", - "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "object.defaults": "^1.1.0" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", - "dev": true, - "requires": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - }, - "dependencies": { - "gulp-cli": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz", - "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.1.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.0.1", - "yargs": "^7.1.0" - } - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - } - } - } - }, - "gulp-autoprefixer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-7.0.0.tgz", - "integrity": "sha512-ZGMA/9iPF7kfZIVhznd3eylivBcyLCgcV32cWtvM7j2IjEQzoRg1XaKgCeO5ytutq8XW3Rip+iM4EsVbNshoZw==", - "dev": true, - "requires": { - "autoprefixer": "^9.6.1", - "fancy-log": "^1.3.2", - "plugin-error": "^1.0.1", - "postcss": "^7.0.17", - "through2": "^3.0.1", - "vinyl-sourcemaps-apply": "^0.2.1" - }, - "dependencies": { - "through2": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", - "dev": true, - "requires": { - "readable-stream": "2 || 3" - } - } - } - }, - "gulp-clean-css": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-4.2.0.tgz", - "integrity": "sha512-r4zQsSOAK2UYUL/ipkAVCTRg/2CLZ2A+oPVORopBximRksJ6qy3EX1KGrIWT4ZrHxz3Hlobb1yyJtqiut7DNjA==", - "dev": true, - "requires": { - "clean-css": "4.2.1", - "plugin-error": "1.0.1", - "through2": "3.0.1", - "vinyl-sourcemaps-apply": "0.2.1" - }, - "dependencies": { - "through2": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", - "dev": true, - "requires": { - "readable-stream": "2 || 3" - } - } - } - }, - "gulp-header": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-2.0.9.tgz", - "integrity": "sha512-LMGiBx+qH8giwrOuuZXSGvswcIUh0OiioNkUpLhNyvaC6/Ga8X6cfAeme2L5PqsbXMhL8o8b/OmVqIQdxprhcQ==", - "dev": true, - "requires": { - "concat-with-sourcemaps": "^1.1.0", - "lodash.template": "^4.5.0", - "map-stream": "0.0.7", - "through2": "^2.0.0" - } - }, - "gulp-plumber": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/gulp-plumber/-/gulp-plumber-1.2.1.tgz", - "integrity": "sha512-mctAi9msEAG7XzW5ytDVZ9PxWMzzi1pS2rBH7lA095DhMa6KEXjm+St0GOCc567pJKJ/oCvosVAZEpAey0q2eQ==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "fancy-log": "^1.3.2", - "plugin-error": "^0.1.2", - "through2": "^2.0.3" - }, - "dependencies": { - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - } - }, - "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", - "dev": true, - "requires": { - "kind-of": "^1.1.0" - } - }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", - "dev": true - }, - "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", - "dev": true, - "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - } - } - } - }, - "gulp-rename": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.4.0.tgz", - "integrity": "sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==", - "dev": true - }, - "gulp-sass": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-4.0.2.tgz", - "integrity": "sha512-q8psj4+aDrblJMMtRxihNBdovfzGrXJp1l4JU0Sz4b/Mhsi2DPrKFYCGDwjIWRENs04ELVHxdOJQ7Vs98OFohg==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "lodash.clonedeep": "^4.3.2", - "node-sass": "^4.8.3", - "plugin-error": "^1.0.1", - "replace-ext": "^1.0.0", - "strip-ansi": "^4.0.0", - "through2": "^2.0.0", - "vinyl-sourcemaps-apply": "^0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "gulp-uglify": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz", - "integrity": "sha512-gk1dhB74AkV2kzqPMQBLA3jPoIAPd/nlNzP2XMDSG8XZrqnlCiDGAqC+rZOumzFvB5zOphlFh6yr3lgcAb/OOg==", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "extend-shallow": "^3.0.2", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "isobject": "^3.0.1", - "make-error-cause": "^1.1.1", - "safe-buffer": "^5.1.2", - "through2": "^2.0.0", - "uglify-js": "^3.0.5", - "vinyl-sourcemaps-apply": "^0.2.0" - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "^1.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", "dev": true }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -3191,29 +2234,8 @@ }, "has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-value": { @@ -3248,29 +2270,20 @@ } } }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", "dev": true, "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", + "inherits": "2.0.4", "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" @@ -3294,17 +2307,6 @@ "requires-port": "1.x.x" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3314,33 +2316,12 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", "dev": true }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -3358,15 +2339,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "interpret": { @@ -3381,16 +2356,6 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -3471,6 +2436,24 @@ } } }, + "is-expression": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", + "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", + "dev": true, + "requires": { + "acorn": "~4.0.2", + "object-assign": "^4.0.1" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -3483,15 +2466,6 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -3510,12 +2484,6 @@ "is-extglob": "^2.1.1" } }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true - }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -3545,18 +2513,6 @@ "lodash.isfinite": "^3.3.2" } }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.1.tgz", - "integrity": "sha512-CKstxrctq1kUesU6WhtZDbYKzzYBuRH0UYInAVrkc/EYdB9ltbfE0gOoayG9nhohG6447sOOVGhHqsdmBvkbNg==", - "dev": true - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -3566,28 +2522,19 @@ "isobject": "^3.0.1" } }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "dev": true, "requires": { - "unc-path-regex": "^0.1.2" + "has": "^1.0.3" } }, "is-utf8": { @@ -3596,12 +2543,6 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -3620,68 +2561,22 @@ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "jquery": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", - "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" - }, - "jquery.easing": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jquery.easing/-/jquery.easing-1.4.1.tgz", - "integrity": "sha1-R5gsWDa9dY/UhJSSPEoQHvbpPjs=" - }, - "js-base64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "jsonfile": { @@ -3693,48 +2588,27 @@ "graceful-fs": "^4.1.6" } }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", "dev": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "is-promise": "^2.0.0", + "promise": "^7.0.1" } }, - "just-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", - "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", - "dev": true - }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", - "dev": true, - "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true }, "lcid": { "version": "1.0.0", @@ -3745,35 +2619,10 @@ "invert-kv": "^1.0.0" } }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" - } - }, - "liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - } - }, "limiter": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.4.tgz", - "integrity": "sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", "dev": true }, "load-json-file": { @@ -3801,21 +2650,6 @@ "yargs": "6.6.0" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "yargs": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", @@ -3839,97 +2673,41 @@ } } }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", "dev": true }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "magnific-popup": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/magnific-popup/-/magnific-popup-1.1.0.tgz", - "integrity": "sha1-PnNixb0Y9nhf6Z5Z0BPiCvM9MEk=" - }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true - }, - "make-error-cause": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", - "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", - "dev": true, - "requires": { - "make-error": "^1.2.0" - } - }, - "make-iterator": { + "longest": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true }, "map-cache": { "version": "0.2.2", @@ -3937,18 +2715,6 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", - "dev": true - }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -3958,71 +2724,6 @@ "object-visit": "^1.0.0" } }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, - "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "dependencies": { - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", - "dev": true - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -4051,18 +2752,18 @@ "dev": true }, "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", "dev": true }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", "dev": true, "requires": { - "mime-db": "1.40.0" + "mime-db": "1.43.0" } }, "minimatch": { @@ -4074,16 +2775,10 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, "mitt": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz", - "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", "dev": true }, "mixin-deep": { @@ -4107,40 +2802,18 @@ } } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true + "dev": true, + "optional": true }, "nanomatch": { "version": "1.2.13", @@ -4166,82 +2839,14 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "node-releases": { - "version": "1.1.32", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.32.tgz", - "integrity": "sha512-VhVknkitq8dqtWoluagsGPn3dxTvN9fwgR59fV3D7sLBHe0JfDramsMI8n8mY//ccq/Kkrf8ZRHRpsyVZ3qw1A==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "node-sass": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", - "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", - "dev": true, - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash": "^4.17.11", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.13.2", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + }, + "node-releases": { + "version": "1.1.52", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", + "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", "dev": true, "requires": { - "abbrev": "1" + "semver": "^6.3.0" } }, "normalize-package-data": { @@ -4254,6 +2859,14 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "normalize-path": { @@ -4268,27 +2881,6 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, - "now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -4301,12 +2893,6 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4350,12 +2936,6 @@ } } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, "object-path": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", @@ -4371,40 +2951,6 @@ "isobject": "^3.0.0" } }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -4414,16 +2960,6 @@ "isobject": "^3.0.1" } }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -4457,21 +2993,6 @@ "is-wsl": "^1.1.0" } }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -4481,41 +3002,29 @@ "lcid": "^1.0.0" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "dev": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "p-try": "^2.0.0" } }, - "p-map": { + "p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "aggregate-error": "^3.0.0" + "p-limit": "^2.0.0" } }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "parse-json": { "version": "2.2.0", @@ -4526,18 +3035,6 @@ "error-ex": "^1.2.0" } }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", @@ -4595,21 +3092,6 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", @@ -4621,16 +3103,10 @@ "pinkie-promise": "^2.0.0" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "picomatch": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", - "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", + "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==", "dev": true }, "pify": { @@ -4654,18 +3130,6 @@ "pinkie": "^2.0.0" } }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - } - }, "portscanner": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", @@ -4683,9 +3147,9 @@ "dev": true }, "postcss": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", - "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", + "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -4693,43 +3157,6 @@ "supports-color": "^6.1.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -4742,60 +3169,156 @@ } }, "postcss-value-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", - "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz", + "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==", "dev": true }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "requires": { + "asap": "~2.0.3" + } + }, + "pug": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz", + "integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==", + "dev": true, + "requires": { + "pug-code-gen": "^2.0.2", + "pug-filters": "^3.1.1", + "pug-lexer": "^4.1.0", + "pug-linker": "^3.0.6", + "pug-load": "^2.0.12", + "pug-parser": "^5.0.1", + "pug-runtime": "^2.0.5", + "pug-strip-comments": "^1.0.4" + } + }, + "pug-attrs": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz", + "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==", + "dev": true, + "requires": { + "constantinople": "^3.0.1", + "js-stringify": "^1.0.1", + "pug-runtime": "^2.0.5" + } + }, + "pug-code-gen": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.2.tgz", + "integrity": "sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==", + "dev": true, + "requires": { + "constantinople": "^3.1.2", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.1", + "pug-attrs": "^2.0.4", + "pug-error": "^1.3.3", + "pug-runtime": "^2.0.5", + "void-elements": "^2.0.1", + "with": "^5.0.0" + } }, - "psl": { - "version": "1.1.32", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz", - "integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==", + "pug-error": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz", + "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==", "dev": true }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "pug-filters": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz", + "integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "clean-css": "^4.1.11", + "constantinople": "^3.0.1", + "jstransformer": "1.0.0", + "pug-error": "^1.3.3", + "pug-walk": "^1.1.8", + "resolve": "^1.1.6", + "uglify-js": "^2.6.1" } }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "pug-lexer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz", + "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==", "dev": true, "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "character-parser": "^2.1.1", + "is-expression": "^3.0.0", + "pug-error": "^1.3.3" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "pug-linker": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz", + "integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==", + "dev": true, + "requires": { + "pug-error": "^1.3.3", + "pug-walk": "^1.1.8" + } + }, + "pug-load": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz", + "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "pug-walk": "^1.1.8" + } + }, + "pug-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz", + "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==", + "dev": true, + "requires": { + "pug-error": "^1.3.3", + "token-stream": "0.0.1" + } + }, + "pug-runtime": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz", + "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==", + "dev": true + }, + "pug-strip-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz", + "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==", + "dev": true, + "requires": { + "pug-error": "^1.3.3" + } + }, + "pug-walk": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", + "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==", "dev": true }, "qs": { @@ -4811,13 +3334,13 @@ "dev": true }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", "dev": true, "requires": { "bytes": "3.1.0", - "http-errors": "1.7.2", + "http-errors": "1.7.3", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -4844,9 +3367,9 @@ } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -4886,15 +3409,11 @@ "resolve": "^1.1.6" } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true }, "regex-not": { "version": "1.0.2", @@ -4906,27 +3425,6 @@ "safe-regex": "^1.1.0" } }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - } - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -4945,68 +3443,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5026,33 +3462,14 @@ "dev": true }, "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", "dev": true, "requires": { "path-parse": "^1.0.6" } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, - "requires": { - "value-or-function": "^3.0.0" - } - }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -5077,6 +3494,12 @@ "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -5086,27 +3509,15 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "requires": { - "glob": "^7.1.3" + "align-text": "^0.1.1" } }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, "rx": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", @@ -5143,86 +3554,21 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" - }, - "dependencies": { - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - } - } - } - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "sass": { + "version": "1.26.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.3.tgz", + "integrity": "sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw==", "dev": true, "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "chokidar": ">=2.0.0 <4.0.0" } }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", - "dev": true, - "requires": { - "sver-compat": "^1.5.0" - } - }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -5265,6 +3611,18 @@ "statuses": ">= 1.4.0 < 2" } }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", @@ -5315,6 +3673,18 @@ "statuses": ">= 1.4.0 < 2" } }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", @@ -5382,17 +3752,16 @@ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "shelljs": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } }, "snapdragon": { "version": "0.8.2", @@ -5436,6 +3805,18 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -5524,6 +3905,15 @@ "socket.io-parser": "~3.2.0" }, "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "engine.io-client": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", @@ -5543,6 +3933,25 @@ "yeast": "0.1.2" } }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "socket.io-client": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", @@ -5590,23 +3999,23 @@ } }, "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", "dev": true }, "socket.io-client": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", - "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", + "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", "dev": true, "requires": { "backo2": "1.0.2", "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.3.1", + "debug": "~4.1.0", + "engine.io-client": "~3.4.0", "has-binary2": "~1.0.2", "has-cors": "1.1.0", "indexof": "0.0.1", @@ -5626,21 +4035,38 @@ "component-emitter": "1.2.1", "debug": "~3.1.0", "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "requires": { - "atob": "^2.1.1", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -5653,10 +4079,10 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", "dev": true }, "spdx-correct": { @@ -5686,9 +4112,9 @@ } }, "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "split-string": { @@ -5700,29 +4126,6 @@ "extend-shallow": "^3.0.0" } }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true - }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -5750,27 +4153,6 @@ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", "dev": true }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, "stream-throttle": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", @@ -5819,29 +4201,13 @@ "is-utf8": "^0.2.0" } }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "has-flag": "^3.0.0" } }, "symbol-observable": { @@ -5850,17 +4216,6 @@ "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", "dev": true }, - "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - }, "tfunk": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", @@ -5869,42 +4224,33 @@ "requires": { "chalk": "^1.1.1", "object-path": "^0.9.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } } }, "to-array": { @@ -5913,6 +4259,12 @@ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", "dev": true }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -5955,73 +4307,28 @@ "repeat-string": "^1.6.1" } }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, - "requires": { - "through2": "^2.0.3" - } - }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "token-stream": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", + "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=", "dev": true }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "requires": { - "glob": "^7.1.2" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true }, "ua-parser-js": { @@ -6031,58 +4338,72 @@ "dev": true }, "uglify-js": { - "version": "3.5.15", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.15.tgz", - "integrity": "sha512-fe7aYFotptIddkwcm6YuA0HmknBZ52ZzOsUxZEdhhkSsz7RfjHDX2QDxwKTiv4JQ5t5NhfmpgAK+J7LiDhKSqg==", + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, "requires": { - "commander": "~2.20.0", - "source-map": "~0.6.1" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } } } }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "undertaker": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz", - "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - } - }, - "undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", - "dev": true - }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -6095,16 +4416,6 @@ "set-value": "^2.0.1" } }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -6164,20 +4475,11 @@ } }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -6202,21 +4504,6 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "v8flags": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", - "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -6227,127 +4514,40 @@ "spdx-expression-parse": "^3.0.0" } }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", - "dev": true, - "requires": { - "source-map": "^0.5.1" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, "window-size": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", "dev": true }, + "with": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", + "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", + "dev": true, + "requires": { + "acorn": "^3.1.0", + "acorn-globals": "^3.0.0" + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", @@ -6379,24 +4579,12 @@ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", "dev": true }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, "yargs": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", diff --git a/package.json b/package.json index 10ad2c52f..bf970f881 100644 --- a/package.json +++ b/package.json @@ -1,20 +1,29 @@ { "title": "Freelancer", "name": "startbootstrap-freelancer", - "version": "5.1.3", + "version": "6.0.0", "scripts": { - "start": "node_modules/.bin/gulp watch" + "build": "npm run clean && npm run build:pug && npm run build:scss && npm run build:scripts && npm run build:assets", + "build:assets": "node scripts/build-assets.js", + "build:pug": "node scripts/build-pug.js", + "build:scripts": "node scripts/build-scripts.js", + "build:scss": "node scripts/build-scss.js", + "clean": "node scripts/clean.js", + "start": "npm run build && node scripts/start.js", + "start:debug": "npm run build && node scripts/start-debug.js" }, "description": "A freelancer portfolio HTML theme for Bootstrap.", "keywords": [ "css", "sass", + "scss", "html", + "pug", "responsive", "theme", "template" ], - "homepage": "https://startbootstrap.com/template-overviews/freelancer", + "homepage": "https://startbootstrap.com/themes/freelancer", "bugs": { "url": "https://github.com/BlackrockDigital/startbootstrap-freelancer/issues", "email": "feedback@startbootstrap.com" @@ -29,23 +38,17 @@ "url": "https://github.com/BlackrockDigital/startbootstrap-freelancer.git" }, "dependencies": { - "@fortawesome/fontawesome-free": "5.10.2", - "bootstrap": "4.3.1", - "jquery": "3.4.1", - "jquery.easing": "^1.4.1", - "magnific-popup": "^1.1.0" + "bootstrap": "4.4.1" }, "devDependencies": { + "autoprefixer": "9.7.4", "browser-sync": "2.26.7", - "del": "5.1.0", - "gulp": "4.0.2", - "gulp-autoprefixer": "7.0.0", - "gulp-clean-css": "4.2.0", - "gulp-header": "2.0.9", - "gulp-plumber": "^1.2.1", - "gulp-rename": "1.4.0", - "gulp-sass": "4.0.2", - "gulp-uglify": "3.0.2", - "merge-stream": "2.0.0" + "chokidar": "3.3.1", + "concurrently": "5.1.0", + "postcss": "7.0.27", + "prettier": "1.19.1", + "pug": "2.0.4", + "sass": "1.26.3", + "shelljs": "0.8.3" } } diff --git a/scripts/build-assets.js b/scripts/build-assets.js new file mode 100644 index 000000000..4f442ea2e --- /dev/null +++ b/scripts/build-assets.js @@ -0,0 +1,5 @@ +'use strict'; + +const renderAssets = require('./render-assets'); + +renderAssets(); \ No newline at end of file diff --git a/scripts/build-pug.js b/scripts/build-pug.js new file mode 100644 index 000000000..61cf6a50a --- /dev/null +++ b/scripts/build-pug.js @@ -0,0 +1,19 @@ +'use strict'; +const path = require('path'); +const sh = require('shelljs'); +const renderPug = require('./render-pug'); + +const srcPath = path.resolve(path.dirname(__filename), '../src'); + +sh.find(srcPath).forEach(_processFile); + +function _processFile(filePath) { + if ( + filePath.match(/\.pug$/) + && !filePath.match(/include/) + && !filePath.match(/mixin/) + && !filePath.match(/\/pug\/layouts\//) + ) { + renderPug(filePath); + } +} \ No newline at end of file diff --git a/scripts/build-scripts.js b/scripts/build-scripts.js new file mode 100644 index 000000000..4d789189a --- /dev/null +++ b/scripts/build-scripts.js @@ -0,0 +1,5 @@ +'use strict'; + +const renderScripts = require('./render-scripts'); + +renderScripts(); \ No newline at end of file diff --git a/scripts/build-scss.js b/scripts/build-scss.js new file mode 100644 index 000000000..9cb8409db --- /dev/null +++ b/scripts/build-scss.js @@ -0,0 +1,5 @@ +'use strict'; + +const renderSCSS = require('./render-scss'); + +renderSCSS(); diff --git a/scripts/clean.js b/scripts/clean.js new file mode 100644 index 000000000..8bbc24475 --- /dev/null +++ b/scripts/clean.js @@ -0,0 +1,7 @@ +const sh = require('shelljs'); +const path = require('path'); + +const destPath = path.resolve(path.dirname(__filename), '../dist'); + +sh.rm('-rf', `${destPath}/*`) + diff --git a/scripts/render-assets.js b/scripts/render-assets.js new file mode 100644 index 000000000..4f3fb754b --- /dev/null +++ b/scripts/render-assets.js @@ -0,0 +1,11 @@ +'use strict'; +const fs = require('fs'); +const path = require('path'); +const sh = require('shelljs'); + +module.exports = function renderAssets() { + const sourcePath = path.resolve(path.dirname(__filename), '../src/assets'); + const destPath = path.resolve(path.dirname(__filename), '../dist/.'); + + sh.cp('-R', sourcePath, destPath) +}; \ No newline at end of file diff --git a/scripts/render-pug.js b/scripts/render-pug.js new file mode 100644 index 000000000..d10e72be7 --- /dev/null +++ b/scripts/render-pug.js @@ -0,0 +1,34 @@ +'use strict'; +const fs = require('fs'); +const path = require('path'); +const pug = require('pug'); +const sh = require('shelljs'); +const prettier = require('prettier'); + +module.exports = function renderPug(filePath) { + const destPath = filePath.replace(/src\/pug\//, 'dist/').replace(/\.pug$/, '.html'); + const srcPath = path.resolve(path.dirname(__filename), '../src'); + + console.log(`### INFO: Rendering ${filePath} to ${destPath}`); + const html = pug.renderFile(filePath, { + doctype: 'html', + filename: filePath, + basedir: srcPath + }); + + const destPathDirname = path.dirname(destPath); + if (!sh.test('-e', destPathDirname)) { + sh.mkdir('-p', destPathDirname); + } + + const prettified = prettier.format(html, { + printWidth: 1000, + tabWidth: 4, + singleQuote: true, + proseWrap: 'preserve', + endOfLine: 'lf', + parser: 'html' + }); + + fs.writeFileSync(destPath, prettified); +}; \ No newline at end of file diff --git a/scripts/render-scripts.js b/scripts/render-scripts.js new file mode 100644 index 000000000..5a066d0da --- /dev/null +++ b/scripts/render-scripts.js @@ -0,0 +1,25 @@ +'use strict'; +const fs = require('fs'); +const packageJSON = require('../package.json'); +const path = require('path'); +const sh = require('shelljs'); + +module.exports = function renderScripts() { + const sourcePath = path.resolve(path.dirname(__filename), '../src/js/scripts.js'); + const destPath = path.resolve(path.dirname(__filename), '../dist/js/scripts.js'); + + const copyright = `/*! + * Start Bootstrap - ${packageJSON.title} v${packageJSON.version} (${packageJSON.homepage}) + * Copyright 2013-${new Date().getFullYear()} ${packageJSON.author} + * Licensed under ${packageJSON.license} (https://github.com/BlackrockDigital/${packageJSON.name}/blob/master/LICENSE) + */ + ` + const scriptsJS = fs.readFileSync(sourcePath); + const destPathDirname = path.dirname(destPath); + + if (!sh.test('-e', destPathDirname)) { + sh.mkdir('-p', destPathDirname); + } + + fs.writeFileSync(destPath, copyright + scriptsJS); +}; \ No newline at end of file diff --git a/scripts/render-scss.js b/scripts/render-scss.js new file mode 100644 index 000000000..6b7da7f18 --- /dev/null +++ b/scripts/render-scss.js @@ -0,0 +1,42 @@ +'use strict'; +const autoprefixer = require('autoprefixer') +const fs = require('fs'); +const packageJSON = require('../package.json'); +const path = require('path'); +const postcss = require('postcss') +const sass = require('sass'); +const sh = require('shelljs'); + +const stylesPath = '../src/scss/styles.scss'; +const destPath = path.resolve(path.dirname(__filename), '../dist/css/styles.css'); + +module.exports = function renderSCSS() { + + const results = sass.renderSync({ + data: entryPoint, + includePaths: [ + path.resolve(path.dirname(__filename), '../node_modules') + ], + }); + + const destPathDirname = path.dirname(destPath); + if (!sh.test('-e', destPathDirname)) { + sh.mkdir('-p', destPathDirname); + } + + postcss([ autoprefixer ]).process(results.css, {from: 'styles.css', to: 'styles.css'}).then(result => { + result.warnings().forEach(warn => { + console.warn(warn.toString()) + }) + fs.writeFileSync(destPath, result.css.toString()); + }) + +}; + +const entryPoint = `/*! +* Start Bootstrap - ${packageJSON.title} v${packageJSON.version} (${packageJSON.homepage}) +* Copyright 2013-${new Date().getFullYear()} ${packageJSON.author} +* Licensed under ${packageJSON.license} (https://github.com/BlackrockDigital/${packageJSON.name}/blob/master/LICENSE) +*/ +@import "${stylesPath}" +` \ No newline at end of file diff --git a/scripts/sb-watch.js b/scripts/sb-watch.js new file mode 100644 index 000000000..27d4c8ab3 --- /dev/null +++ b/scripts/sb-watch.js @@ -0,0 +1,86 @@ +'use strict'; + +const _ = require('lodash'); +const chokidar = require('chokidar'); +const path = require('path'); +const renderAssets = require('./render-assets'); +const renderPug = require('./render-pug'); +const renderScripts = require('./render-scripts'); +const renderSCSS = require('./render-scss'); + +const watcher = chokidar.watch('src', { + persistent: true, +}); + +let READY = false; + +process.title = 'pug-watch'; +process.stdout.write('Loading'); +let allPugFiles = {}; + +watcher.on('add', filePath => _processFile(filePath, 'add')); +watcher.on('change', filePath => _processFile(filePath, 'change')); +watcher.on('ready', () => { + READY = true; + console.log(' READY TO ROLL!'); +}); + +_handleSCSS(); + +function _processFile(filePath, watchEvent) { + + if (!READY) { + if (filePath.match(/\.pug$/)) { + if (!filePath.match(/includes/) && !filePath.match(/mixins/) && !filePath.match(/\/pug\/layouts\//)) { + allPugFiles[filePath] = true; + } + } + process.stdout.write('.'); + return; + } + + console.log(`### INFO: File event: ${watchEvent}: ${filePath}`); + + if (filePath.match(/\.pug$/)) { + return _handlePug(filePath, watchEvent); + } + + if (filePath.match(/\.scss$/)) { + if (watchEvent === 'change') { + return _handleSCSS(filePath, watchEvent); + } + return; + } + + if (filePath.match(/src\/js\//)) { + return renderScripts(); + } + + if (filePath.match(/src\/assets\//)) { + return renderAssets(); + } + +} + +function _handlePug(filePath, watchEvent) { + if (watchEvent === 'change') { + if (filePath.match(/includes/) || filePath.match(/mixins/) || filePath.match(/\/pug\/layouts\//)) { + return _renderAllPug(); + } + return renderPug(filePath); + } + if (!filePath.match(/includes/) && !filePath.match(/mixins/) && !filePath.match(/\/pug\/layouts\//)) { + return renderPug(filePath); + } +} + +function _renderAllPug() { + console.log('### INFO: Rendering All'); + _.each(allPugFiles, (value, filePath) => { + renderPug(filePath); + }); +} + +function _handleSCSS() { + renderSCSS(); +} \ No newline at end of file diff --git a/scripts/start-debug.js b/scripts/start-debug.js new file mode 100644 index 000000000..c796b27e9 --- /dev/null +++ b/scripts/start-debug.js @@ -0,0 +1,24 @@ +const concurrently = require('concurrently'); +const path = require('path'); + +const browserSyncPath = path.resolve(path.dirname(__filename), '../node_modules/.bin/browser-sync'); + +concurrently([ + { command: 'node --inspect scripts/sb-watch.js', name: 'SB_WATCH', prefixColor: 'bgBlue.bold' }, + { + command: `${browserSyncPath} dist -w --no-online`, + name: 'SB_BROWSER_SYNC', + prefixColor: 'bgBlue.bold', + } +], { + prefix: 'name', + killOthers: ['failure', 'success'], +}).then(success, failure); + +function success() { + console.log('Success'); +} + +function failure() { + console.log('Failure'); +} \ No newline at end of file diff --git a/scripts/start.js b/scripts/start.js new file mode 100644 index 000000000..06cd5a7c2 --- /dev/null +++ b/scripts/start.js @@ -0,0 +1,24 @@ +const concurrently = require('concurrently'); +const path = require('path'); + +const browserSyncPath = path.resolve(path.dirname(__filename), '../node_modules/.bin/browser-sync'); + +concurrently([ + { command: 'node scripts/sb-watch.js', name: 'SB_WATCH', prefixColor: 'bgBlue.bold' }, + { + command: `${browserSyncPath} --reload-delay 2000 --reload-debounce 2000 dist -w --no-online`, + name: 'SB_BROWSER_SYNC', + prefixColor: 'bgGreen.bold', + } +], { + prefix: 'name', + killOthers: ['failure', 'success'], +}).then(success, failure); + +function success() { + console.log('Success'); +} + +function failure() { + console.log('Failure'); +} \ No newline at end of file diff --git a/scss/base/_page.scss b/scss/base/_page.scss deleted file mode 100644 index 0d46bab8b..000000000 --- a/scss/base/_page.scss +++ /dev/null @@ -1,14 +0,0 @@ -// Styling for page sections -.page-section { - padding: 6rem 0; - .page-section-heading { - font-size: 2.25rem; - line-height: 2rem; - } - @include media-breakpoint-up(lg) { - .page-section-heading { - font-size: 3rem; - line-height: 2.5rem; - } - } -} diff --git a/scss/freelancer.scss b/scss/freelancer.scss deleted file mode 100644 index baa77b109..000000000 --- a/scss/freelancer.scss +++ /dev/null @@ -1,19 +0,0 @@ -// Import variables (overrides Bootstrap defaults) -@import "base/variables.scss"; - -// Import Bootstrap -@import "bootstrap/scss/bootstrap.scss"; - -// Import base styles -@import "base/page.scss"; - -// Import components styles -@import "components/divider.scss"; -@import "components/buttons.scss"; - -// Import layout styles -@import "layout/navbar.scss"; -@import "layout/masthead.scss"; -@import "layout/portfolio.scss"; -@import "layout/contact.scss"; -@import "layout/footer.scss"; diff --git a/src/assets/img/avataaars.svg b/src/assets/img/avataaars.svg new file mode 100644 index 000000000..7cd00d7c4 --- /dev/null +++ b/src/assets/img/avataaars.svg @@ -0,0 +1,248 @@ + + + + +Created with getavataaars.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/portfolio/cabin.png b/src/assets/img/portfolio/cabin.png new file mode 100644 index 0000000000000000000000000000000000000000..c64c59ea79f2afa29e6af30aded8845da09251ce GIT binary patch literal 36514 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 literal 0 HcmV?d00001 diff --git a/src/assets/img/portfolio/cake.png b/src/assets/img/portfolio/cake.png new file mode 100644 index 0000000000000000000000000000000000000000..a16c3fe72ecdfc662147d431d6d73717452271e5 GIT binary patch literal 17068 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
    5AA<|qF(mZW-B05m1%K(qtDHfA?;A9#2V|=bR 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 V>1;j74KN8!T0%j*RP^1){{=#B-(mm& literal 0 HcmV?d00001 diff --git a/src/assets/img/portfolio/circus.png b/src/assets/img/portfolio/circus.png new file mode 100644 index 0000000000000000000000000000000000000000..b3f5142e8405456f156392eae2427ef281adda77 GIT binary patch literal 27984 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 literal 0 HcmV?d00001 diff --git a/src/assets/img/portfolio/game.png b/src/assets/img/portfolio/game.png new file mode 100644 index 0000000000000000000000000000000000000000..85420e8bbc16098bf26b4ee63bde0e91a19d1f2a GIT binary patch literal 25896 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 cz>% literal 0 HcmV?d00001 diff --git a/src/assets/img/portfolio/safe.png b/src/assets/img/portfolio/safe.png new file mode 100644 index 0000000000000000000000000000000000000000..445942c707af53210931f9f4f99f6d3cb69e5d89 GIT binary patch literal 19240 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
    w==XB0?3|p=#`o%NsudE(E-U#KS3Snw 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 o>ir+C;RN10sIS0&a;p= 0) { + firstName = name.split(' ').slice(0, -1).join(' '); + } + $this = $("#sendMessageButton"); + $this.prop("disabled", true); // Disable submit button until AJAX call is complete to prevent duplicate messages + $.ajax({ + url: "contact_me.php", + type: "POST", + data: { + name: name, + phone: phone, + email: email, + message: message + }, + cache: false, + success: function() { + // Success message + $('#success').html("
    "); + $('#success > .alert-success').html(""); + $('#success > .alert-success') + .append("Your message has been sent. "); + $('#success > .alert-success') + .append('
    '); + //clear all fields + $('#contactForm').trigger("reset"); + }, + error: function() { + // Fail message + $('#success').html("
    "); + $('#success > .alert-danger').html(""); + $('#success > .alert-danger').append($("").text("Sorry " + firstName + ", it seems that my mail server is not responding. Please try again later!")); + $('#success > .alert-danger').append('
    '); + //clear all fields + $('#contactForm').trigger("reset"); + }, + complete: function() { + setTimeout(function() { + $this.prop("disabled", false); // Re-enable submit button when AJAX call is complete + }, 1000); + } + }); + }, + filter: function() { + return $(this).is(":visible"); + }, + }); + + $("a[data-toggle=\"tab\"]").click(function(e) { + e.preventDefault(); + $(this).tab("show"); + }); +}); + +/*When clicking on Full hide fail/success boxes */ +$('#name').focus(function() { + $('#success').html(''); +}); diff --git a/src/assets/mail/contact_me.php b/src/assets/mail/contact_me.php new file mode 100644 index 000000000..15944a612 --- /dev/null +++ b/src/assets/mail/contact_me.php @@ -0,0 +1,22 @@ + diff --git a/src/assets/mail/jqBootstrapValidation.js b/src/assets/mail/jqBootstrapValidation.js new file mode 100644 index 000000000..29cbb083e --- /dev/null +++ b/src/assets/mail/jqBootstrapValidation.js @@ -0,0 +1,912 @@ +/* jqBootstrapValidation + * A plugin for automating validation on Twitter Bootstrap formatted forms. + * + * v1.3.6 + * + * License: MIT - see LICENSE file + * + * http://ReactiveRaven.github.com/jqBootstrapValidation/ + */ + +(function( $ ){ + + var createdElements = []; + + var defaults = { + options: { + prependExistingHelpBlock: false, + sniffHtml: true, // sniff for 'required', 'maxlength', etc + preventSubmit: true, // stop the form submit event from firing if validation fails + submitError: false, // function called if there is an error when trying to submit + submitSuccess: false, // function called just before a successful submit event is sent to the server + semanticallyStrict: false, // set to true to tidy up generated HTML output + autoAdd: { + helpBlocks: true + }, + filter: function () { + // return $(this).is(":visible"); // only validate elements you can see + return true; // validate everything + } + }, + methods: { + init : function( options ) { + + var settings = $.extend(true, {}, defaults); + + settings.options = $.extend(true, settings.options, options); + + var $siblingElements = this; + + var uniqueForms = $.unique( + $siblingElements.map( function () { + return $(this).parents("form")[0]; + }).toArray() + ); + + $(uniqueForms).bind("submit", function (e) { + var $form = $(this); + var warningsFound = 0; + var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter); + $inputs.trigger("submit.validation").trigger("validationLostFocus.validation"); + + $inputs.each(function (i, el) { + var $this = $(el), + $controlGroup = $this.parents(".control-group").first(); + if ( + $controlGroup.hasClass("warning") + ) { + $controlGroup.removeClass("warning").addClass("error"); + warningsFound++; + } + }); + + $inputs.trigger("validationLostFocus.validation"); + + if (warningsFound) { + if (settings.options.preventSubmit) { + e.preventDefault(); + } + $form.addClass("error"); + if ($.isFunction(settings.options.submitError)) { + settings.options.submitError($form, e, $inputs.jqBootstrapValidation("collectErrors", true)); + } + } else { + $form.removeClass("error"); + if ($.isFunction(settings.options.submitSuccess)) { + settings.options.submitSuccess($form, e); + } + } + }); + + return this.each(function(){ + + // Get references to everything we're interested in + var $this = $(this), + $controlGroup = $this.parents(".control-group").first(), + $helpBlock = $controlGroup.find(".help-block").first(), + $form = $this.parents("form").first(), + validatorNames = []; + + // create message container if not exists + if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) { + $helpBlock = $('
    '); + $controlGroup.find('.controls').append($helpBlock); + createdElements.push($helpBlock[0]); + } + + // ============================================================= + // SNIFF HTML FOR VALIDATORS + // ============================================================= + + // *snort sniff snuffle* + + if (settings.options.sniffHtml) { + var message = ""; + // --------------------------------------------------------- + // PATTERN + // --------------------------------------------------------- + if ($this.attr("pattern") !== undefined) { + message = "Not in the expected format"; + if ($this.data("validationPatternMessage")) { + message = $this.data("validationPatternMessage"); + } + $this.data("validationPatternMessage", message); + $this.data("validationPatternRegex", $this.attr("pattern")); + } + // --------------------------------------------------------- + // MAX + // --------------------------------------------------------- + if ($this.attr("max") !== undefined || $this.attr("aria-valuemax") !== undefined) { + var max = ($this.attr("max") !== undefined ? $this.attr("max") : $this.attr("aria-valuemax")); + message = "Too high: Maximum of '" + max + "'"; + if ($this.data("validationMaxMessage")) { + message = $this.data("validationMaxMessage"); + } + $this.data("validationMaxMessage", message); + $this.data("validationMaxMax", max); + } + // --------------------------------------------------------- + // MIN + // --------------------------------------------------------- + if ($this.attr("min") !== undefined || $this.attr("aria-valuemin") !== undefined) { + var min = ($this.attr("min") !== undefined ? $this.attr("min") : $this.attr("aria-valuemin")); + message = "Too low: Minimum of '" + min + "'"; + if ($this.data("validationMinMessage")) { + message = $this.data("validationMinMessage"); + } + $this.data("validationMinMessage", message); + $this.data("validationMinMin", min); + } + // --------------------------------------------------------- + // MAXLENGTH + // --------------------------------------------------------- + if ($this.attr("maxlength") !== undefined) { + message = "Too long: Maximum of '" + $this.attr("maxlength") + "' characters"; + if ($this.data("validationMaxlengthMessage")) { + message = $this.data("validationMaxlengthMessage"); + } + $this.data("validationMaxlengthMessage", message); + $this.data("validationMaxlengthMaxlength", $this.attr("maxlength")); + } + // --------------------------------------------------------- + // MINLENGTH + // --------------------------------------------------------- + if ($this.attr("minlength") !== undefined) { + message = "Too short: Minimum of '" + $this.attr("minlength") + "' characters"; + if ($this.data("validationMinlengthMessage")) { + message = $this.data("validationMinlengthMessage"); + } + $this.data("validationMinlengthMessage", message); + $this.data("validationMinlengthMinlength", $this.attr("minlength")); + } + // --------------------------------------------------------- + // REQUIRED + // --------------------------------------------------------- + if ($this.attr("required") !== undefined || $this.attr("aria-required") !== undefined) { + message = settings.builtInValidators.required.message; + if ($this.data("validationRequiredMessage")) { + message = $this.data("validationRequiredMessage"); + } + $this.data("validationRequiredMessage", message); + } + // --------------------------------------------------------- + // NUMBER + // --------------------------------------------------------- + if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "number") { + message = settings.builtInValidators.number.message; + if ($this.data("validationNumberMessage")) { + message = $this.data("validationNumberMessage"); + } + $this.data("validationNumberMessage", message); + } + // --------------------------------------------------------- + // EMAIL + // --------------------------------------------------------- + if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "email") { + message = "Not a valid email address"; + if ($this.data("validationValidemailMessage")) { + message = $this.data("validationValidemailMessage"); + } else if ($this.data("validationEmailMessage")) { + message = $this.data("validationEmailMessage"); + } + $this.data("validationValidemailMessage", message); + } + // --------------------------------------------------------- + // MINCHECKED + // --------------------------------------------------------- + if ($this.attr("minchecked") !== undefined) { + message = "Not enough options checked; Minimum of '" + $this.attr("minchecked") + "' required"; + if ($this.data("validationMincheckedMessage")) { + message = $this.data("validationMincheckedMessage"); + } + $this.data("validationMincheckedMessage", message); + $this.data("validationMincheckedMinchecked", $this.attr("minchecked")); + } + // --------------------------------------------------------- + // MAXCHECKED + // --------------------------------------------------------- + if ($this.attr("maxchecked") !== undefined) { + message = "Too many options checked; Maximum of '" + $this.attr("maxchecked") + "' required"; + if ($this.data("validationMaxcheckedMessage")) { + message = $this.data("validationMaxcheckedMessage"); + } + $this.data("validationMaxcheckedMessage", message); + $this.data("validationMaxcheckedMaxchecked", $this.attr("maxchecked")); + } + } + + // ============================================================= + // COLLECT VALIDATOR NAMES + // ============================================================= + + // Get named validators + if ($this.data("validation") !== undefined) { + validatorNames = $this.data("validation").split(","); + } + + // Get extra ones defined on the element's data attributes + $.each($this.data(), function (i, el) { + var parts = i.replace(/([A-Z])/g, ",$1").split(","); + if (parts[0] === "validation" && parts[1]) { + validatorNames.push(parts[1]); + } + }); + + // ============================================================= + // NORMALISE VALIDATOR NAMES + // ============================================================= + + var validatorNamesToInspect = validatorNames; + var newValidatorNamesToInspect = []; + + do // repeatedly expand 'shortcut' validators into their real validators + { + // Uppercase only the first letter of each name + $.each(validatorNames, function (i, el) { + validatorNames[i] = formatValidatorName(el); + }); + + // Remove duplicate validator names + validatorNames = $.unique(validatorNames); + + // Pull out the new validator names from each shortcut + newValidatorNamesToInspect = []; + $.each(validatorNamesToInspect, function(i, el) { + if ($this.data("validation" + el + "Shortcut") !== undefined) { + // Are these custom validators? + // Pull them out! + $.each($this.data("validation" + el + "Shortcut").split(","), function(i2, el2) { + newValidatorNamesToInspect.push(el2); + }); + } else if (settings.builtInValidators[el.toLowerCase()]) { + // Is this a recognised built-in? + // Pull it out! + var validator = settings.builtInValidators[el.toLowerCase()]; + if (validator.type.toLowerCase() === "shortcut") { + $.each(validator.shortcut.split(","), function (i, el) { + el = formatValidatorName(el); + newValidatorNamesToInspect.push(el); + validatorNames.push(el); + }); + } + } + }); + + validatorNamesToInspect = newValidatorNamesToInspect; + + } while (validatorNamesToInspect.length > 0) + + // ============================================================= + // SET UP VALIDATOR ARRAYS + // ============================================================= + + var validators = {}; + + $.each(validatorNames, function (i, el) { + // Set up the 'override' message + var message = $this.data("validation" + el + "Message"); + var hasOverrideMessage = (message !== undefined); + var foundValidator = false; + message = + ( + message + ? message + : "'" + el + "' validation failed " + ) + ; + + $.each( + settings.validatorTypes, + function (validatorType, validatorTemplate) { + if (validators[validatorType] === undefined) { + validators[validatorType] = []; + } + if (!foundValidator && $this.data("validation" + el + formatValidatorName(validatorTemplate.name)) !== undefined) { + validators[validatorType].push( + $.extend( + true, + { + name: formatValidatorName(validatorTemplate.name), + message: message + }, + validatorTemplate.init($this, el) + ) + ); + foundValidator = true; + } + } + ); + + if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) { + + var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]); + if (hasOverrideMessage) { + validator.message = message; + } + var validatorType = validator.type.toLowerCase(); + + if (validatorType === "shortcut") { + foundValidator = true; + } else { + $.each( + settings.validatorTypes, + function (validatorTemplateType, validatorTemplate) { + if (validators[validatorTemplateType] === undefined) { + validators[validatorTemplateType] = []; + } + if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) { + $this.data("validation" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]); + validators[validatorType].push( + $.extend( + validator, + validatorTemplate.init($this, el) + ) + ); + foundValidator = true; + } + } + ); + } + } + + if (! foundValidator) { + $.error("Cannot find validation info for '" + el + "'"); + } + }); + + // ============================================================= + // STORE FALLBACK VALUES + // ============================================================= + + $helpBlock.data( + "original-contents", + ( + $helpBlock.data("original-contents") + ? $helpBlock.data("original-contents") + : $helpBlock.html() + ) + ); + + $helpBlock.data( + "original-role", + ( + $helpBlock.data("original-role") + ? $helpBlock.data("original-role") + : $helpBlock.attr("role") + ) + ); + + $controlGroup.data( + "original-classes", + ( + $controlGroup.data("original-clases") + ? $controlGroup.data("original-classes") + : $controlGroup.attr("class") + ) + ); + + $this.data( + "original-aria-invalid", + ( + $this.data("original-aria-invalid") + ? $this.data("original-aria-invalid") + : $this.attr("aria-invalid") + ) + ); + + // ============================================================= + // VALIDATION + // ============================================================= + + $this.bind( + "validation.validation", + function (event, params) { + + var value = getValue($this); + + // Get a list of the errors to apply + var errorsFound = []; + + $.each(validators, function (validatorType, validatorTypeArray) { + if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) { + $.each(validatorTypeArray, function (i, validator) { + if (settings.validatorTypes[validatorType].validate($this, value, validator)) { + errorsFound.push(validator.message); + } + }); + } + }); + + return errorsFound; + } + ); + + $this.bind( + "getValidators.validation", + function () { + return validators; + } + ); + + // ============================================================= + // WATCH FOR CHANGES + // ============================================================= + $this.bind( + "submit.validation", + function () { + return $this.triggerHandler("change.validation", {submitting: true}); + } + ); + $this.bind( + [ + "keyup", + "focus", + "blur", + "click", + "keydown", + "keypress", + "change" + ].join(".validation ") + ".validation", + function (e, params) { + + var value = getValue($this); + + var errorsFound = []; + + $controlGroup.find("input,textarea,select").each(function (i, el) { + var oldCount = errorsFound.length; + $.each($(el).triggerHandler("validation.validation", params), function (j, message) { + errorsFound.push(message); + }); + if (errorsFound.length > oldCount) { + $(el).attr("aria-invalid", "true"); + } else { + var original = $this.data("original-aria-invalid"); + $(el).attr("aria-invalid", (original !== undefined ? original : false)); + } + }); + + $form.find("input,select,textarea").not($this).not("[name=\"" + $this.attr("name") + "\"]").trigger("validationLostFocus.validation"); + + errorsFound = $.unique(errorsFound.sort()); + + // Were there any errors? + if (errorsFound.length) { + // Better flag it up as a warning. + $controlGroup.removeClass("success error").addClass("warning"); + + // How many errors did we find? + if (settings.options.semanticallyStrict && errorsFound.length === 1) { + // Only one? Being strict? Just output it. + $helpBlock.html(errorsFound[0] + + ( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" )); + } else { + // Multiple? Being sloppy? Glue them together into an UL. + $helpBlock.html("
    • " + errorsFound.join("
    • ") + "
    " + + ( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" )); + } + } else { + $controlGroup.removeClass("warning error success"); + if (value.length > 0) { + $controlGroup.addClass("success"); + } + $helpBlock.html($helpBlock.data("original-contents")); + } + + if (e.type === "blur") { + $controlGroup.removeClass("success"); + } + } + ); + $this.bind("validationLostFocus.validation", function () { + $controlGroup.removeClass("success"); + }); + }); + }, + destroy : function( ) { + + return this.each( + function() { + + var + $this = $(this), + $controlGroup = $this.parents(".control-group").first(), + $helpBlock = $controlGroup.find(".help-block").first(); + + // remove our events + $this.unbind('.validation'); // events are namespaced. + // reset help text + $helpBlock.html($helpBlock.data("original-contents")); + // reset classes + $controlGroup.attr("class", $controlGroup.data("original-classes")); + // reset aria + $this.attr("aria-invalid", $this.data("original-aria-invalid")); + // reset role + $helpBlock.attr("role", $this.data("original-role")); + // remove all elements we created + if (createdElements.indexOf($helpBlock[0]) > -1) { + $helpBlock.remove(); + } + + } + ); + + }, + collectErrors : function(includeEmpty) { + + var errorMessages = {}; + this.each(function (i, el) { + var $el = $(el); + var name = $el.attr("name"); + var errors = $el.triggerHandler("validation.validation", {includeEmpty: true}); + errorMessages[name] = $.extend(true, errors, errorMessages[name]); + }); + + $.each(errorMessages, function (i, el) { + if (el.length === 0) { + delete errorMessages[i]; + } + }); + + return errorMessages; + + }, + hasErrors: function() { + + var errorMessages = []; + + this.each(function (i, el) { + errorMessages = errorMessages.concat( + $(el).triggerHandler("getValidators.validation") ? $(el).triggerHandler("validation.validation", {submitting: true}) : [] + ); + }); + + return (errorMessages.length > 0); + }, + override : function (newDefaults) { + defaults = $.extend(true, defaults, newDefaults); + } + }, + validatorTypes: { + callback: { + name: "callback", + init: function ($this, name) { + return { + validatorName: name, + callback: $this.data("validation" + name + "Callback"), + lastValue: $this.val(), + lastValid: true, + lastFinished: true + }; + }, + validate: function ($this, value, validator) { + if (validator.lastValue === value && validator.lastFinished) { + return !validator.lastValid; + } + + if (validator.lastFinished === true) + { + validator.lastValue = value; + validator.lastValid = true; + validator.lastFinished = false; + + var rrjqbvValidator = validator; + var rrjqbvThis = $this; + executeFunctionByName( + validator.callback, + window, + $this, + value, + function (data) { + if (rrjqbvValidator.lastValue === data.value) { + rrjqbvValidator.lastValid = data.valid; + if (data.message) { + rrjqbvValidator.message = data.message; + } + rrjqbvValidator.lastFinished = true; + rrjqbvThis.data("validation" + rrjqbvValidator.validatorName + "Message", rrjqbvValidator.message); + // Timeout is set to avoid problems with the events being considered 'already fired' + setTimeout(function () { + rrjqbvThis.trigger("change.validation"); + }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst + } + } + ); + } + + return false; + + } + }, + ajax: { + name: "ajax", + init: function ($this, name) { + return { + validatorName: name, + url: $this.data("validation" + name + "Ajax"), + lastValue: $this.val(), + lastValid: true, + lastFinished: true + }; + }, + validate: function ($this, value, validator) { + if (""+validator.lastValue === ""+value && validator.lastFinished === true) { + return validator.lastValid === false; + } + + if (validator.lastFinished === true) + { + validator.lastValue = value; + validator.lastValid = true; + validator.lastFinished = false; + $.ajax({ + url: validator.url, + data: "value=" + value + "&field=" + $this.attr("name"), + dataType: "json", + success: function (data) { + if (""+validator.lastValue === ""+data.value) { + validator.lastValid = !!(data.valid); + if (data.message) { + validator.message = data.message; + } + validator.lastFinished = true; + $this.data("validation" + validator.validatorName + "Message", validator.message); + // Timeout is set to avoid problems with the events being considered 'already fired' + setTimeout(function () { + $this.trigger("change.validation"); + }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst + } + }, + failure: function () { + validator.lastValid = true; + validator.message = "ajax call failed"; + validator.lastFinished = true; + $this.data("validation" + validator.validatorName + "Message", validator.message); + // Timeout is set to avoid problems with the events being considered 'already fired' + setTimeout(function () { + $this.trigger("change.validation"); + }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst + } + }); + } + + return false; + + } + }, + regex: { + name: "regex", + init: function ($this, name) { + return {regex: regexFromString($this.data("validation" + name + "Regex"))}; + }, + validate: function ($this, value, validator) { + return (!validator.regex.test(value) && ! validator.negative) + || (validator.regex.test(value) && validator.negative); + } + }, + required: { + name: "required", + init: function ($this, name) { + return {}; + }, + validate: function ($this, value, validator) { + return !!(value.length === 0 && ! validator.negative) + || !!(value.length > 0 && validator.negative); + }, + blockSubmit: true + }, + match: { + name: "match", + init: function ($this, name) { + var element = $this.parents("form").first().find("[name=\"" + $this.data("validation" + name + "Match") + "\"]").first(); + element.bind("validation.validation", function () { + $this.trigger("change.validation", {submitting: true}); + }); + return {"element": element}; + }, + validate: function ($this, value, validator) { + return (value !== validator.element.val() && ! validator.negative) + || (value === validator.element.val() && validator.negative); + }, + blockSubmit: true + }, + max: { + name: "max", + init: function ($this, name) { + return {max: $this.data("validation" + name + "Max")}; + }, + validate: function ($this, value, validator) { + return (parseFloat(value, 10) > parseFloat(validator.max, 10) && ! validator.negative) + || (parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative); + } + }, + min: { + name: "min", + init: function ($this, name) { + return {min: $this.data("validation" + name + "Min")}; + }, + validate: function ($this, value, validator) { + return (parseFloat(value) < parseFloat(validator.min) && ! validator.negative) + || (parseFloat(value) >= parseFloat(validator.min) && validator.negative); + } + }, + maxlength: { + name: "maxlength", + init: function ($this, name) { + return {maxlength: $this.data("validation" + name + "Maxlength")}; + }, + validate: function ($this, value, validator) { + return ((value.length > validator.maxlength) && ! validator.negative) + || ((value.length <= validator.maxlength) && validator.negative); + } + }, + minlength: { + name: "minlength", + init: function ($this, name) { + return {minlength: $this.data("validation" + name + "Minlength")}; + }, + validate: function ($this, value, validator) { + return ((value.length < validator.minlength) && ! validator.negative) + || ((value.length >= validator.minlength) && validator.negative); + } + }, + maxchecked: { + name: "maxchecked", + init: function ($this, name) { + var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]"); + elements.bind("click.validation", function () { + $this.trigger("change.validation", {includeEmpty: true}); + }); + return {maxchecked: $this.data("validation" + name + "Maxchecked"), elements: elements}; + }, + validate: function ($this, value, validator) { + return (validator.elements.filter(":checked").length > validator.maxchecked && ! validator.negative) + || (validator.elements.filter(":checked").length <= validator.maxchecked && validator.negative); + }, + blockSubmit: true + }, + minchecked: { + name: "minchecked", + init: function ($this, name) { + var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]"); + elements.bind("click.validation", function () { + $this.trigger("change.validation", {includeEmpty: true}); + }); + return {minchecked: $this.data("validation" + name + "Minchecked"), elements: elements}; + }, + validate: function ($this, value, validator) { + return (validator.elements.filter(":checked").length < validator.minchecked && ! validator.negative) + || (validator.elements.filter(":checked").length >= validator.minchecked && validator.negative); + }, + blockSubmit: true + } + }, + builtInValidators: { + email: { + name: "Email", + type: "shortcut", + shortcut: "validemail" + }, + validemail: { + name: "Validemail", + type: "regex", + regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\.[A-Za-z]{2,4}", + message: "Not a valid email address" + }, + passwordagain: { + name: "Passwordagain", + type: "match", + match: "password", + message: "Does not match the given password" + }, + positive: { + name: "Positive", + type: "shortcut", + shortcut: "number,positivenumber" + }, + negative: { + name: "Negative", + type: "shortcut", + shortcut: "number,negativenumber" + }, + number: { + name: "Number", + type: "regex", + regex: "([+-]?\\\d+(\\\.\\\d*)?([eE][+-]?[0-9]+)?)?", + message: "Must be a number" + }, + integer: { + name: "Integer", + type: "regex", + regex: "[+-]?\\\d+", + message: "No decimal places allowed" + }, + positivenumber: { + name: "Positivenumber", + type: "min", + min: 0, + message: "Must be a positive number" + }, + negativenumber: { + name: "Negativenumber", + type: "max", + max: 0, + message: "Must be a negative number" + }, + required: { + name: "Required", + type: "required", + message: "This is required" + }, + checkone: { + name: "Checkone", + type: "minchecked", + minchecked: 1, + message: "Check at least one option" + } + } + }; + + var formatValidatorName = function (name) { + return name + .toLowerCase() + .replace( + /(^|\s)([a-z])/g , + function(m,p1,p2) { + return p1+p2.toUpperCase(); + } + ) + ; + }; + + var getValue = function ($this) { + // Extract the value we're talking about + var value = $this.val(); + var type = $this.attr("type"); + if (type === "checkbox") { + value = ($this.is(":checked") ? value : ""); + } + if (type === "radio") { + value = ($('input[name="' + $this.attr("name") + '"]:checked').length > 0 ? value : ""); + } + return value; + }; + + function regexFromString(inputstring) { + return new RegExp("^" + inputstring + "$"); + } + + /** + * Thanks to Jason Bunting via StackOverflow.com + * + * http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910 + * Short link: http://tinyurl.com/executeFunctionByName + **/ + function executeFunctionByName(functionName, context /*, args*/) { + var args = Array.prototype.slice.call(arguments).splice(2); + var namespaces = functionName.split("."); + var func = namespaces.pop(); + for(var i = 0; i < namespaces.length; i++) { + context = context[namespaces[i]]; + } + return context[func].apply(this, args); + } + + $.fn.jqBootstrapValidation = function( method ) { + + if ( defaults.methods[method] ) { + return defaults.methods[method].apply( this, Array.prototype.slice.call( arguments, 1 )); + } else if ( typeof method === 'object' || ! method ) { + return defaults.methods.init.apply( this, arguments ); + } else { + $.error( 'Method ' + method + ' does not exist on jQuery.jqBootstrapValidation' ); + return null; + } + + }; + + $.jqBootstrapValidation = function (options) { + $(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments); + }; + +})( jQuery ); diff --git a/src/js/scripts.js b/src/js/scripts.js new file mode 100644 index 000000000..4f596ed81 --- /dev/null +++ b/src/js/scripts.js @@ -0,0 +1,64 @@ +(function($) { + "use strict"; // Start of use strict + + // Smooth scrolling using jQuery easing + $('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() { + if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) { + var target = $(this.hash); + target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); + if (target.length) { + $('html, body').animate({ + scrollTop: (target.offset().top - 71) + }, 1000, "easeInOutExpo"); + return false; + } + } + }); + + // Scroll to top button appear + $(document).scroll(function() { + var scrollDistance = $(this).scrollTop(); + if (scrollDistance > 100) { + $('.scroll-to-top').fadeIn(); + } else { + $('.scroll-to-top').fadeOut(); + } + }); + + // Closes responsive menu when a scroll trigger link is clicked + $('.js-scroll-trigger').click(function() { + $('.navbar-collapse').collapse('hide'); + }); + + // Activate scrollspy to add active class to navbar items on scroll + $('body').scrollspy({ + target: '#mainNav', + offset: 80 + }); + + // Collapse Navbar + var navbarCollapse = function() { + if ($("#mainNav").offset().top > 100) { + $("#mainNav").addClass("navbar-shrink"); + } else { + $("#mainNav").removeClass("navbar-shrink"); + } + }; + // Collapse now if page is not at top + navbarCollapse(); + // Collapse the navbar when page is scrolled + $(window).scroll(navbarCollapse); + + // Floating label headings for the contact form + $(function() { + $("body").on("input propertychange", ".floating-label-form-group", function(e) { + $(this).toggleClass("floating-label-form-group-with-value", !!$(e.target).val()); + }).on("focus", ".floating-label-form-group", function() { + $(this).addClass("floating-label-form-group-with-focus"); + }).on("blur", ".floating-label-form-group", function() { + $(this).removeClass("floating-label-form-group-with-focus"); + }); + }); + + })(jQuery); // End of use strict + \ No newline at end of file diff --git a/src/pug/index.pug b/src/pug/index.pug new file mode 100644 index 000000000..2ab3a5654 --- /dev/null +++ b/src/pug/index.pug @@ -0,0 +1,394 @@ +doctype html +html(lang='en') + + head + + meta(charset='utf-8') + meta(name='viewport', content='width=device-width, initial-scale=1, shrink-to-fit=no') + meta(name='description', content='') + meta(name='author', content='') + + title Freelancer - Start Bootstrap Theme + + // Font Awesome icons (free version) + script(src='https://use.fontawesome.com/releases/v5.12.1/js/all.js', crossorigin='anonymous') + + // Google fonts + link(href='https://fonts.googleapis.com/css?family=Montserrat:400,700', rel='stylesheet', type='text/css') + link(href='https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic', rel='stylesheet', type='text/css') + + // Core theme CSS (includes Bootstrap) + link(href='css/styles.css', rel='stylesheet') + + body#page-top + + // Navigation + nav#mainNav.navbar.navbar-expand-lg.bg-secondary.text-uppercase.fixed-top + .container + a.navbar-brand.js-scroll-trigger(href='#page-top') Start Bootstrap + button.navbar-toggler.navbar-toggler-right.text-uppercase.font-weight-bold.bg-primary.text-white.rounded(type='button', data-toggle='collapse', data-target='#navbarResponsive', aria-controls='navbarResponsive', aria-expanded='false', aria-label='Toggle navigation') + | Menu + i.fas.fa-bars + #navbarResponsive.collapse.navbar-collapse + ul.navbar-nav.ml-auto + li.nav-item.mx-0.mx-lg-1 + a.nav-link.py-3.px-0.px-lg-3.rounded.js-scroll-trigger(href='#portfolio') Portfolio + li.nav-item.mx-0.mx-lg-1 + a.nav-link.py-3.px-0.px-lg-3.rounded.js-scroll-trigger(href='#about') About + li.nav-item.mx-0.mx-lg-1 + a.nav-link.py-3.px-0.px-lg-3.rounded.js-scroll-trigger(href='#contact') Contact + + // Masthead + header.masthead.bg-primary.text-white.text-center + .container.d-flex.align-items-center.flex-column + // Masthead Avatar Image + img.masthead-avatar.mb-5(src='assets/img/avataaars.svg', alt='') + // Masthead Heading + h1.masthead-heading.text-uppercase.mb-0 Start Bootstrap + // Icon Divider + .divider-custom.divider-light + .divider-custom-line + .divider-custom-icon + i.fas.fa-star + .divider-custom-line + // Masthead Subheading + p.masthead-subheading.font-weight-light.mb-0 Graphic Artist - Web Designer - Illustrator + + // Portfolio Section + section#portfolio.page-section.portfolio + .container + // Portfolio Section Heading + h2.page-section-heading.text-center.text-uppercase.text-secondary.mb-0 Portfolio + // Icon Divider + .divider-custom + .divider-custom-line + .divider-custom-icon + i.fas.fa-star + .divider-custom-line + // Portfolio Grid Items + .row + // Portfolio Item 1 + .col-md-6.col-lg-4 + .portfolio-item.mx-auto(data-toggle='modal', data-target='#portfolioModal1') + .portfolio-item-caption.d-flex.align-items-center.justify-content-center.h-100.w-100 + .portfolio-item-caption-content.text-center.text-white + i.fas.fa-plus.fa-3x + img.img-fluid(src='assets/img/portfolio/cabin.png', alt='') + // Portfolio Item 2 + .col-md-6.col-lg-4 + .portfolio-item.mx-auto(data-toggle='modal', data-target='#portfolioModal2') + .portfolio-item-caption.d-flex.align-items-center.justify-content-center.h-100.w-100 + .portfolio-item-caption-content.text-center.text-white + i.fas.fa-plus.fa-3x + img.img-fluid(src='assets/img/portfolio/cake.png', alt='') + // Portfolio Item 3 + .col-md-6.col-lg-4 + .portfolio-item.mx-auto(data-toggle='modal', data-target='#portfolioModal3') + .portfolio-item-caption.d-flex.align-items-center.justify-content-center.h-100.w-100 + .portfolio-item-caption-content.text-center.text-white + i.fas.fa-plus.fa-3x + img.img-fluid(src='assets/img/portfolio/circus.png', alt='') + // Portfolio Item 4 + .col-md-6.col-lg-4 + .portfolio-item.mx-auto(data-toggle='modal', data-target='#portfolioModal4') + .portfolio-item-caption.d-flex.align-items-center.justify-content-center.h-100.w-100 + .portfolio-item-caption-content.text-center.text-white + i.fas.fa-plus.fa-3x + img.img-fluid(src='assets/img/portfolio/game.png', alt='') + // Portfolio Item 5 + .col-md-6.col-lg-4 + .portfolio-item.mx-auto(data-toggle='modal', data-target='#portfolioModal5') + .portfolio-item-caption.d-flex.align-items-center.justify-content-center.h-100.w-100 + .portfolio-item-caption-content.text-center.text-white + i.fas.fa-plus.fa-3x + img.img-fluid(src='assets/img/portfolio/safe.png', alt='') + // Portfolio Item 6 + .col-md-6.col-lg-4 + .portfolio-item.mx-auto(data-toggle='modal', data-target='#portfolioModal6') + .portfolio-item-caption.d-flex.align-items-center.justify-content-center.h-100.w-100 + .portfolio-item-caption-content.text-center.text-white + i.fas.fa-plus.fa-3x + img.img-fluid(src='assets/img/portfolio/submarine.png', alt='') + + // About Section + section#about.page-section.bg-primary.text-white.mb-0 + .container + // About Section Heading + h2.page-section-heading.text-center.text-uppercase.text-white About + // Icon Divider + .divider-custom.divider-light + .divider-custom-line + .divider-custom-icon + i.fas.fa-star + .divider-custom-line + // About Section Content + .row + .col-lg-4.ml-auto + p.lead + | Freelancer is a free bootstrap theme created by Start Bootstrap. The download includes the complete source files including HTML, CSS, and JavaScript as well as optional SASS stylesheets for easy customization. + .col-lg-4.mr-auto + p.lead + | You can create your own custom avatar for the masthead, change the icon in the dividers, and add your email address to the contact form to make it fully functional! + // About Section Button + .text-center.mt-4 + a.btn.btn-xl.btn-outline-light(href='https://startbootstrap.com/themes/freelancer/') + i.fas.fa-download.mr-2 + | Free Download! + + // Contact Section + section#contact.page-section + .container + // Contact Section Heading + h2.page-section-heading.text-center.text-uppercase.text-secondary.mb-0 Contact Me + // Icon Divider + .divider-custom + .divider-custom-line + .divider-custom-icon + i.fas.fa-star + .divider-custom-line + // Contact Section Form + .row + .col-lg-8.mx-auto + // To configure the contact form email address, go to mail/contact_me.php and update the email address in the PHP file on line 19. + form#contactForm(name='sentMessage', novalidate='novalidate') + .control-group + .form-group.floating-label-form-group.controls.mb-0.pb-2 + label Name + input#name.form-control(type='text', placeholder='Name', required='required', data-validation-required-message='Please enter your name.') + p.help-block.text-danger + .control-group + .form-group.floating-label-form-group.controls.mb-0.pb-2 + label Email Address + input#email.form-control(type='email', placeholder='Email Address', required='required', data-validation-required-message='Please enter your email address.') + p.help-block.text-danger + .control-group + .form-group.floating-label-form-group.controls.mb-0.pb-2 + label Phone Number + input#phone.form-control(type='tel', placeholder='Phone Number', required='required', data-validation-required-message='Please enter your phone number.') + p.help-block.text-danger + .control-group + .form-group.floating-label-form-group.controls.mb-0.pb-2 + label Message + textarea#message.form-control(rows='5', placeholder='Message', required='required', data-validation-required-message='Please enter a message.') + p.help-block.text-danger + br + #success + .form-group + button#sendMessageButton.btn.btn-primary.btn-xl(type='submit') Send + + // Footer + footer.footer.text-center + .container + .row + // Footer Location + .col-lg-4.mb-5.mb-lg-0 + h4.text-uppercase.mb-4 Location + p.lead.mb-0 + | 2215 John Daniel Drive + br + | Clark, MO 65243 + // Footer Social Icons + .col-lg-4.mb-5.mb-lg-0 + h4.text-uppercase.mb-4 Around the Web + a.btn.btn-outline-light.btn-social.mx-1(href='#') + i.fab.fa-fw.fa-facebook-f + a.btn.btn-outline-light.btn-social.mx-1(href='#') + i.fab.fa-fw.fa-twitter + a.btn.btn-outline-light.btn-social.mx-1(href='#') + i.fab.fa-fw.fa-linkedin-in + a.btn.btn-outline-light.btn-social.mx-1(href='#') + i.fab.fa-fw.fa-dribbble + // Footer About Text + .col-lg-4 + h4.text-uppercase.mb-4 About Freelancer + p.lead.mb-0 + | Freelance is a free to use, MIT licensed Bootstrap theme created by + a(href='http://startbootstrap.com') Start Bootstrap + | . + // Copyright Section + section.copyright.py-4.text-center.text-white + .container + small Copyright © Your Website 2019 + // Scroll to Top Button (Only visible on small and extra-small screen sizes) + .scroll-to-top.d-lg-none.position-fixed + a.js-scroll-trigger.d-block.text-center.text-white.rounded(href='#page-top') + i.fa.fa-chevron-up + + // Portfolio Modals + + // Portfolio Modal 1 + #portfolioModal1.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-labelledby='portfolioModal1Label', aria-hidden='true') + .modal-dialog.modal-xl(role='document') + .modal-content + button.close(type='button', data-dismiss='modal', aria-label='Close') + span(aria-hidden='true') + i.fas.fa-times + .modal-body.text-center + .container + .row.justify-content-center + .col-lg-8 + // Portfolio Modal - Title + h2.portfolio-modal-title.text-secondary.text-uppercase.mb-0 Log Cabin + // Icon Divider + .divider-custom + .divider-custom-line + .divider-custom-icon + i.fas.fa-star + .divider-custom-line + // Portfolio Modal - Image + img.img-fluid.rounded.mb-5(src='assets/img/portfolio/cabin.png', alt='') + // Portfolio Modal - Text + p.mb-5 + | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Mollitia neque assumenda ipsam nihil, molestias magnam, recusandae quos quis inventore quisquam velit asperiores, vitae? Reprehenderit soluta, eos quod consequuntur itaque. Nam. + button.btn.btn-primary(href='#', data-dismiss='modal') + i.fas.fa-times.fa-fw + | Close Window + // Portfolio Modal 2 + #portfolioModal2.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-labelledby='portfolioModal2Label', aria-hidden='true') + .modal-dialog.modal-xl(role='document') + .modal-content + button.close(type='button', data-dismiss='modal', aria-label='Close') + span(aria-hidden='true') + i.fas.fa-times + .modal-body.text-center + .container + .row.justify-content-center + .col-lg-8 + // Portfolio Modal - Title + h2.portfolio-modal-title.text-secondary.text-uppercase.mb-0 Tasty Cake + // Icon Divider + .divider-custom + .divider-custom-line + .divider-custom-icon + i.fas.fa-star + .divider-custom-line + // Portfolio Modal - Image + img.img-fluid.rounded.mb-5(src='assets/img/portfolio/cake.png', alt='') + // Portfolio Modal - Text + p.mb-5 + | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Mollitia neque assumenda ipsam nihil, molestias magnam, recusandae quos quis inventore quisquam velit asperiores, vitae? Reprehenderit soluta, eos quod consequuntur itaque. Nam. + button.btn.btn-primary(href='#', data-dismiss='modal') + i.fas.fa-times.fa-fw + | Close Window + // Portfolio Modal 3 + #portfolioModal3.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-labelledby='portfolioModal3Label', aria-hidden='true') + .modal-dialog.modal-xl(role='document') + .modal-content + button.close(type='button', data-dismiss='modal', aria-label='Close') + span(aria-hidden='true') + i.fas.fa-times + .modal-body.text-center + .container + .row.justify-content-center + .col-lg-8 + // Portfolio Modal - Title + h2.portfolio-modal-title.text-secondary.text-uppercase.mb-0 Circus Tent + // Icon Divider + .divider-custom + .divider-custom-line + .divider-custom-icon + i.fas.fa-star + .divider-custom-line + // Portfolio Modal - Image + img.img-fluid.rounded.mb-5(src='assets/img/portfolio/circus.png', alt='') + // Portfolio Modal - Text + p.mb-5 + | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Mollitia neque assumenda ipsam nihil, molestias magnam, recusandae quos quis inventore quisquam velit asperiores, vitae? Reprehenderit soluta, eos quod consequuntur itaque. Nam. + button.btn.btn-primary(href='#', data-dismiss='modal') + i.fas.fa-times.fa-fw + | Close Window + // Portfolio Modal 4 + #portfolioModal4.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-labelledby='portfolioModal4Label', aria-hidden='true') + .modal-dialog.modal-xl(role='document') + .modal-content + button.close(type='button', data-dismiss='modal', aria-label='Close') + span(aria-hidden='true') + i.fas.fa-times + .modal-body.text-center + .container + .row.justify-content-center + .col-lg-8 + // Portfolio Modal - Title + h2.portfolio-modal-title.text-secondary.text-uppercase.mb-0 Controller + // Icon Divider + .divider-custom + .divider-custom-line + .divider-custom-icon + i.fas.fa-star + .divider-custom-line + // Portfolio Modal - Image + img.img-fluid.rounded.mb-5(src='assets/img/portfolio/game.png', alt='') + // Portfolio Modal - Text + p.mb-5 + | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Mollitia neque assumenda ipsam nihil, molestias magnam, recusandae quos quis inventore quisquam velit asperiores, vitae? Reprehenderit soluta, eos quod consequuntur itaque. Nam. + button.btn.btn-primary(href='#', data-dismiss='modal') + i.fas.fa-times.fa-fw + | Close Window + // Portfolio Modal 5 + #portfolioModal5.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-labelledby='portfolioModal5Label', aria-hidden='true') + .modal-dialog.modal-xl(role='document') + .modal-content + button.close(type='button', data-dismiss='modal', aria-label='Close') + span(aria-hidden='true') + i.fas.fa-times + .modal-body.text-center + .container + .row.justify-content-center + .col-lg-8 + // Portfolio Modal - Title + h2.portfolio-modal-title.text-secondary.text-uppercase.mb-0 Locked Safe + // Icon Divider + .divider-custom + .divider-custom-line + .divider-custom-icon + i.fas.fa-star + .divider-custom-line + // Portfolio Modal - Image + img.img-fluid.rounded.mb-5(src='assets/img/portfolio/safe.png', alt='') + // Portfolio Modal - Text + p.mb-5 + | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Mollitia neque assumenda ipsam nihil, molestias magnam, recusandae quos quis inventore quisquam velit asperiores, vitae? Reprehenderit soluta, eos quod consequuntur itaque. Nam. + button.btn.btn-primary(href='#', data-dismiss='modal') + i.fas.fa-times.fa-fw + | Close Window + // Portfolio Modal 6 + #portfolioModal6.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-labelledby='portfolioModal6Label', aria-hidden='true') + .modal-dialog.modal-xl(role='document') + .modal-content + button.close(type='button', data-dismiss='modal', aria-label='Close') + span(aria-hidden='true') + i.fas.fa-times + .modal-body.text-center + .container + .row.justify-content-center + .col-lg-8 + // Portfolio Modal - Title + h2.portfolio-modal-title.text-secondary.text-uppercase.mb-0 Submarine + // Icon Divider + .divider-custom + .divider-custom-line + .divider-custom-icon + i.fas.fa-star + .divider-custom-line + // Portfolio Modal - Image + img.img-fluid.rounded.mb-5(src='assets/img/portfolio/submarine.png', alt='') + // Portfolio Modal - Text + p.mb-5 + | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Mollitia neque assumenda ipsam nihil, molestias magnam, recusandae quos quis inventore quisquam velit asperiores, vitae? Reprehenderit soluta, eos quod consequuntur itaque. Nam. + button.btn.btn-primary(href='#', data-dismiss='modal') + i.fas.fa-times.fa-fw + | Close Window + + // Bootstrap core JS + script(src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js') + script(src='https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.bundle.min.js') + + // Third party plugin JS + script(src='https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js') + + // Contact form JS + script(src='assets/mail/jqBootstrapValidation.js') + script(src='assets/mail/contact_me.js') + + // Core theme JS + script(src='js/scripts.js') diff --git a/scss/components/_buttons.scss b/src/scss/_buttons.scss similarity index 93% rename from scss/components/_buttons.scss rename to src/scss/_buttons.scss index c26334896..a87245b33 100644 --- a/scss/components/_buttons.scss +++ b/src/scss/_buttons.scss @@ -1,4 +1,4 @@ -// Custom extra larg button size +// Custom extra large button size .btn-xl { padding: 1rem 1.75rem; font-size: 1.25rem; diff --git a/scss/layout/_contact.scss b/src/scss/_contact.scss similarity index 95% rename from scss/layout/_contact.scss rename to src/scss/_contact.scss index aa2dbc88b..57a107327 100644 --- a/scss/layout/_contact.scss +++ b/src/scss/_contact.scss @@ -27,8 +27,6 @@ -moz-transition: top 0.3s ease, opacity 0.3s ease; -ms-transition: top 0.3s ease, opacity 0.3s ease; transition: top 0.3s ease, opacity 0.3s ease; - vertical-align: middle; - vertical-align: baseline; opacity: 0; } &:not(:first-child) { diff --git a/scss/components/_divider.scss b/src/scss/_divider.scss similarity index 100% rename from scss/components/_divider.scss rename to src/scss/_divider.scss diff --git a/scss/layout/_footer.scss b/src/scss/_footer.scss similarity index 100% rename from scss/layout/_footer.scss rename to src/scss/_footer.scss diff --git a/src/scss/_global.scss b/src/scss/_global.scss new file mode 100644 index 000000000..9db5892b0 --- /dev/null +++ b/src/scss/_global.scss @@ -0,0 +1,15 @@ +// Styling for page sections +.page-section { + padding: 6rem 0; + .page-section-heading { + font-size: 2.25rem; + line-height: 2rem; + } + @include media-breakpoint-up(lg) { + .page-section-heading { + font-size: 3rem; + line-height: 2.5rem; + } + } + } + \ No newline at end of file diff --git a/scss/layout/_masthead.scss b/src/scss/_masthead.scss similarity index 100% rename from scss/layout/_masthead.scss rename to src/scss/_masthead.scss diff --git a/scss/layout/_navbar.scss b/src/scss/_navbar.scss similarity index 100% rename from scss/layout/_navbar.scss rename to src/scss/_navbar.scss diff --git a/scss/layout/_portfolio.scss b/src/scss/_portfolio.scss similarity index 100% rename from scss/layout/_portfolio.scss rename to src/scss/_portfolio.scss diff --git a/scss/base/_variables.scss b/src/scss/_variables.scss similarity index 100% rename from scss/base/_variables.scss rename to src/scss/_variables.scss diff --git a/src/scss/styles.scss b/src/scss/styles.scss new file mode 100644 index 000000000..a2d4c4fc9 --- /dev/null +++ b/src/scss/styles.scss @@ -0,0 +1,15 @@ +// Import variables (overrides Bootstrap defaults) +@import "./variables.scss"; + +// Import Bootstrap +@import "bootstrap/scss/bootstrap.scss"; + +// Import custom styles +@import "./global.scss"; +@import "./divider.scss"; +@import "./buttons.scss"; +@import "./navbar.scss"; +@import "./masthead.scss"; +@import "./portfolio.scss"; +@import "./contact.scss"; +@import "./footer.scss"; diff --git a/vendor/bootstrap/js/bootstrap.bundle.js b/vendor/bootstrap/js/bootstrap.bundle.js deleted file mode 100644 index f4f23ead2..000000000 --- a/vendor/bootstrap/js/bootstrap.bundle.js +++ /dev/null @@ -1,7013 +0,0 @@ -/*! - * Bootstrap v4.3.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) : - typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) : - (global = global || self, factory(global.bootstrap = {}, global.jQuery)); -}(this, function (exports, $) { 'use strict'; - - $ = $ && $.hasOwnProperty('default') ? $['default'] : $; - - function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; - } - - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function _objectSpread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); - - if (typeof Object.getOwnPropertySymbols === 'function') { - ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - })); - } - - ownKeys.forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } - - return target; - } - - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; - } - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.3.1): util.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - /** - * ------------------------------------------------------------------------ - * Private TransitionEnd Helpers - * ------------------------------------------------------------------------ - */ - - var TRANSITION_END = 'transitionend'; - var MAX_UID = 1000000; - var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) - - function toType(obj) { - return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); - } - - function getSpecialTransitionEndEvent() { - return { - bindType: TRANSITION_END, - delegateType: TRANSITION_END, - handle: function handle(event) { - if ($(event.target).is(this)) { - return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params - } - - return undefined; // eslint-disable-line no-undefined - } - }; - } - - function transitionEndEmulator(duration) { - var _this = this; - - var called = false; - $(this).one(Util.TRANSITION_END, function () { - called = true; - }); - setTimeout(function () { - if (!called) { - Util.triggerTransitionEnd(_this); - } - }, duration); - return this; - } - - function setTransitionEndSupport() { - $.fn.emulateTransitionEnd = transitionEndEmulator; - $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); - } - /** - * -------------------------------------------------------------------------- - * Public Util Api - * -------------------------------------------------------------------------- - */ - - - var Util = { - TRANSITION_END: 'bsTransitionEnd', - getUID: function getUID(prefix) { - do { - // eslint-disable-next-line no-bitwise - prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here - } while (document.getElementById(prefix)); - - return prefix; - }, - getSelectorFromElement: function getSelectorFromElement(element) { - var selector = element.getAttribute('data-target'); - - if (!selector || selector === '#') { - var hrefAttr = element.getAttribute('href'); - selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; - } - - try { - return document.querySelector(selector) ? selector : null; - } catch (err) { - return null; - } - }, - getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { - if (!element) { - return 0; - } // Get transition-duration of the element - - - var transitionDuration = $(element).css('transition-duration'); - var transitionDelay = $(element).css('transition-delay'); - var floatTransitionDuration = parseFloat(transitionDuration); - var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found - - if (!floatTransitionDuration && !floatTransitionDelay) { - return 0; - } // If multiple durations are defined, take the first - - - transitionDuration = transitionDuration.split(',')[0]; - transitionDelay = transitionDelay.split(',')[0]; - return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; - }, - reflow: function reflow(element) { - return element.offsetHeight; - }, - triggerTransitionEnd: function triggerTransitionEnd(element) { - $(element).trigger(TRANSITION_END); - }, - // TODO: Remove in v5 - supportsTransitionEnd: function supportsTransitionEnd() { - return Boolean(TRANSITION_END); - }, - isElement: function isElement(obj) { - return (obj[0] || obj).nodeType; - }, - typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { - for (var property in configTypes) { - if (Object.prototype.hasOwnProperty.call(configTypes, property)) { - var expectedTypes = configTypes[property]; - var value = config[property]; - var valueType = value && Util.isElement(value) ? 'element' : toType(value); - - if (!new RegExp(expectedTypes).test(valueType)) { - throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); - } - } - } - }, - findShadowRoot: function findShadowRoot(element) { - if (!document.documentElement.attachShadow) { - return null; - } // Can find the shadow root otherwise it'll return the document - - - if (typeof element.getRootNode === 'function') { - var root = element.getRootNode(); - return root instanceof ShadowRoot ? root : null; - } - - if (element instanceof ShadowRoot) { - return element; - } // when we don't find a shadow root - - - if (!element.parentNode) { - return null; - } - - return Util.findShadowRoot(element.parentNode); - } - }; - setTransitionEndSupport(); - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME = 'alert'; - var VERSION = '4.3.1'; - var DATA_KEY = 'bs.alert'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $.fn[NAME]; - var Selector = { - DISMISS: '[data-dismiss="alert"]' - }; - var Event = { - CLOSE: "close" + EVENT_KEY, - CLOSED: "closed" + EVENT_KEY, - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY - }; - var ClassName = { - ALERT: 'alert', - FADE: 'fade', - SHOW: 'show' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Alert = - /*#__PURE__*/ - function () { - function Alert(element) { - this._element = element; - } // Getters - - - var _proto = Alert.prototype; - - // Public - _proto.close = function close(element) { - var rootElement = this._element; - - if (element) { - rootElement = this._getRootElement(element); - } - - var customEvent = this._triggerCloseEvent(rootElement); - - if (customEvent.isDefaultPrevented()) { - return; - } - - this._removeElement(rootElement); - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY); - this._element = null; - } // Private - ; - - _proto._getRootElement = function _getRootElement(element) { - var selector = Util.getSelectorFromElement(element); - var parent = false; - - if (selector) { - parent = document.querySelector(selector); - } - - if (!parent) { - parent = $(element).closest("." + ClassName.ALERT)[0]; - } - - return parent; - }; - - _proto._triggerCloseEvent = function _triggerCloseEvent(element) { - var closeEvent = $.Event(Event.CLOSE); - $(element).trigger(closeEvent); - return closeEvent; - }; - - _proto._removeElement = function _removeElement(element) { - var _this = this; - - $(element).removeClass(ClassName.SHOW); - - if (!$(element).hasClass(ClassName.FADE)) { - this._destroyElement(element); - - return; - } - - var transitionDuration = Util.getTransitionDurationFromElement(element); - $(element).one(Util.TRANSITION_END, function (event) { - return _this._destroyElement(element, event); - }).emulateTransitionEnd(transitionDuration); - }; - - _proto._destroyElement = function _destroyElement(element) { - $(element).detach().trigger(Event.CLOSED).remove(); - } // Static - ; - - Alert._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var $element = $(this); - var data = $element.data(DATA_KEY); - - if (!data) { - data = new Alert(this); - $element.data(DATA_KEY, data); - } - - if (config === 'close') { - data[config](this); - } - }); - }; - - Alert._handleDismiss = function _handleDismiss(alertInstance) { - return function (event) { - if (event) { - event.preventDefault(); - } - - alertInstance.close(this); - }; - }; - - _createClass(Alert, null, [{ - key: "VERSION", - get: function get() { - return VERSION; - } - }]); - - return Alert; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME] = Alert._jQueryInterface; - $.fn[NAME].Constructor = Alert; - - $.fn[NAME].noConflict = function () { - $.fn[NAME] = JQUERY_NO_CONFLICT; - return Alert._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$1 = 'button'; - var VERSION$1 = '4.3.1'; - var DATA_KEY$1 = 'bs.button'; - var EVENT_KEY$1 = "." + DATA_KEY$1; - var DATA_API_KEY$1 = '.data-api'; - var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1]; - var ClassName$1 = { - ACTIVE: 'active', - BUTTON: 'btn', - FOCUS: 'focus' - }; - var Selector$1 = { - DATA_TOGGLE_CARROT: '[data-toggle^="button"]', - DATA_TOGGLE: '[data-toggle="buttons"]', - INPUT: 'input:not([type="hidden"])', - ACTIVE: '.active', - BUTTON: '.btn' - }; - var Event$1 = { - CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1, - FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1) - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Button = - /*#__PURE__*/ - function () { - function Button(element) { - this._element = element; - } // Getters - - - var _proto = Button.prototype; - - // Public - _proto.toggle = function toggle() { - var triggerChangeEvent = true; - var addAriaPressed = true; - var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0]; - - if (rootElement) { - var input = this._element.querySelector(Selector$1.INPUT); - - if (input) { - if (input.type === 'radio') { - if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) { - triggerChangeEvent = false; - } else { - var activeElement = rootElement.querySelector(Selector$1.ACTIVE); - - if (activeElement) { - $(activeElement).removeClass(ClassName$1.ACTIVE); - } - } - } - - if (triggerChangeEvent) { - if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { - return; - } - - input.checked = !this._element.classList.contains(ClassName$1.ACTIVE); - $(input).trigger('change'); - } - - input.focus(); - addAriaPressed = false; - } - } - - if (addAriaPressed) { - this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE)); - } - - if (triggerChangeEvent) { - $(this._element).toggleClass(ClassName$1.ACTIVE); - } - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$1); - this._element = null; - } // Static - ; - - Button._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$1); - - if (!data) { - data = new Button(this); - $(this).data(DATA_KEY$1, data); - } - - if (config === 'toggle') { - data[config](); - } - }); - }; - - _createClass(Button, null, [{ - key: "VERSION", - get: function get() { - return VERSION$1; - } - }]); - - return Button; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { - event.preventDefault(); - var button = event.target; - - if (!$(button).hasClass(ClassName$1.BUTTON)) { - button = $(button).closest(Selector$1.BUTTON); - } - - Button._jQueryInterface.call($(button), 'toggle'); - }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { - var button = $(event.target).closest(Selector$1.BUTTON)[0]; - $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type)); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$1] = Button._jQueryInterface; - $.fn[NAME$1].Constructor = Button; - - $.fn[NAME$1].noConflict = function () { - $.fn[NAME$1] = JQUERY_NO_CONFLICT$1; - return Button._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$2 = 'carousel'; - var VERSION$2 = '4.3.1'; - var DATA_KEY$2 = 'bs.carousel'; - var EVENT_KEY$2 = "." + DATA_KEY$2; - var DATA_API_KEY$2 = '.data-api'; - var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2]; - var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key - - var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key - - var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch - - var SWIPE_THRESHOLD = 40; - var Default = { - interval: 5000, - keyboard: true, - slide: false, - pause: 'hover', - wrap: true, - touch: true - }; - var DefaultType = { - interval: '(number|boolean)', - keyboard: 'boolean', - slide: '(boolean|string)', - pause: '(string|boolean)', - wrap: 'boolean', - touch: 'boolean' - }; - var Direction = { - NEXT: 'next', - PREV: 'prev', - LEFT: 'left', - RIGHT: 'right' - }; - var Event$2 = { - SLIDE: "slide" + EVENT_KEY$2, - SLID: "slid" + EVENT_KEY$2, - KEYDOWN: "keydown" + EVENT_KEY$2, - MOUSEENTER: "mouseenter" + EVENT_KEY$2, - MOUSELEAVE: "mouseleave" + EVENT_KEY$2, - TOUCHSTART: "touchstart" + EVENT_KEY$2, - TOUCHMOVE: "touchmove" + EVENT_KEY$2, - TOUCHEND: "touchend" + EVENT_KEY$2, - POINTERDOWN: "pointerdown" + EVENT_KEY$2, - POINTERUP: "pointerup" + EVENT_KEY$2, - DRAG_START: "dragstart" + EVENT_KEY$2, - LOAD_DATA_API: "load" + EVENT_KEY$2 + DATA_API_KEY$2, - CLICK_DATA_API: "click" + EVENT_KEY$2 + DATA_API_KEY$2 - }; - var ClassName$2 = { - CAROUSEL: 'carousel', - ACTIVE: 'active', - SLIDE: 'slide', - RIGHT: 'carousel-item-right', - LEFT: 'carousel-item-left', - NEXT: 'carousel-item-next', - PREV: 'carousel-item-prev', - ITEM: 'carousel-item', - POINTER_EVENT: 'pointer-event' - }; - var Selector$2 = { - ACTIVE: '.active', - ACTIVE_ITEM: '.active.carousel-item', - ITEM: '.carousel-item', - ITEM_IMG: '.carousel-item img', - NEXT_PREV: '.carousel-item-next, .carousel-item-prev', - INDICATORS: '.carousel-indicators', - DATA_SLIDE: '[data-slide], [data-slide-to]', - DATA_RIDE: '[data-ride="carousel"]' - }; - var PointerType = { - TOUCH: 'touch', - PEN: 'pen' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Carousel = - /*#__PURE__*/ - function () { - function Carousel(element, config) { - this._items = null; - this._interval = null; - this._activeElement = null; - this._isPaused = false; - this._isSliding = false; - this.touchTimeout = null; - this.touchStartX = 0; - this.touchDeltaX = 0; - this._config = this._getConfig(config); - this._element = element; - this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS); - this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; - this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); - - this._addEventListeners(); - } // Getters - - - var _proto = Carousel.prototype; - - // Public - _proto.next = function next() { - if (!this._isSliding) { - this._slide(Direction.NEXT); - } - }; - - _proto.nextWhenVisible = function nextWhenVisible() { - // Don't call next when the page isn't visible - // or the carousel or its parent isn't visible - if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') { - this.next(); - } - }; - - _proto.prev = function prev() { - if (!this._isSliding) { - this._slide(Direction.PREV); - } - }; - - _proto.pause = function pause(event) { - if (!event) { - this._isPaused = true; - } - - if (this._element.querySelector(Selector$2.NEXT_PREV)) { - Util.triggerTransitionEnd(this._element); - this.cycle(true); - } - - clearInterval(this._interval); - this._interval = null; - }; - - _proto.cycle = function cycle(event) { - if (!event) { - this._isPaused = false; - } - - if (this._interval) { - clearInterval(this._interval); - this._interval = null; - } - - if (this._config.interval && !this._isPaused) { - this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); - } - }; - - _proto.to = function to(index) { - var _this = this; - - this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); - - var activeIndex = this._getItemIndex(this._activeElement); - - if (index > this._items.length - 1 || index < 0) { - return; - } - - if (this._isSliding) { - $(this._element).one(Event$2.SLID, function () { - return _this.to(index); - }); - return; - } - - if (activeIndex === index) { - this.pause(); - this.cycle(); - return; - } - - var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; - - this._slide(direction, this._items[index]); - }; - - _proto.dispose = function dispose() { - $(this._element).off(EVENT_KEY$2); - $.removeData(this._element, DATA_KEY$2); - this._items = null; - this._config = null; - this._element = null; - this._interval = null; - this._isPaused = null; - this._isSliding = null; - this._activeElement = null; - this._indicatorsElement = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default, config); - Util.typeCheckConfig(NAME$2, config, DefaultType); - return config; - }; - - _proto._handleSwipe = function _handleSwipe() { - var absDeltax = Math.abs(this.touchDeltaX); - - if (absDeltax <= SWIPE_THRESHOLD) { - return; - } - - var direction = absDeltax / this.touchDeltaX; // swipe left - - if (direction > 0) { - this.prev(); - } // swipe right - - - if (direction < 0) { - this.next(); - } - }; - - _proto._addEventListeners = function _addEventListeners() { - var _this2 = this; - - if (this._config.keyboard) { - $(this._element).on(Event$2.KEYDOWN, function (event) { - return _this2._keydown(event); - }); - } - - if (this._config.pause === 'hover') { - $(this._element).on(Event$2.MOUSEENTER, function (event) { - return _this2.pause(event); - }).on(Event$2.MOUSELEAVE, function (event) { - return _this2.cycle(event); - }); - } - - if (this._config.touch) { - this._addTouchEventListeners(); - } - }; - - _proto._addTouchEventListeners = function _addTouchEventListeners() { - var _this3 = this; - - if (!this._touchSupported) { - return; - } - - var start = function start(event) { - if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { - _this3.touchStartX = event.originalEvent.clientX; - } else if (!_this3._pointerEvent) { - _this3.touchStartX = event.originalEvent.touches[0].clientX; - } - }; - - var move = function move(event) { - // ensure swiping with one touch and not pinching - if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { - _this3.touchDeltaX = 0; - } else { - _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX; - } - }; - - var end = function end(event) { - if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { - _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; - } - - _this3._handleSwipe(); - - if (_this3._config.pause === 'hover') { - // If it's a touch-enabled device, mouseenter/leave are fired as - // part of the mouse compatibility events on first tap - the carousel - // would stop cycling until user tapped out of it; - // here, we listen for touchend, explicitly pause the carousel - // (as if it's the second time we tap on it, mouseenter compat event - // is NOT fired) and after a timeout (to allow for mouse compatibility - // events to fire) we explicitly restart cycling - _this3.pause(); - - if (_this3.touchTimeout) { - clearTimeout(_this3.touchTimeout); - } - - _this3.touchTimeout = setTimeout(function (event) { - return _this3.cycle(event); - }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); - } - }; - - $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) { - return e.preventDefault(); - }); - - if (this._pointerEvent) { - $(this._element).on(Event$2.POINTERDOWN, function (event) { - return start(event); - }); - $(this._element).on(Event$2.POINTERUP, function (event) { - return end(event); - }); - - this._element.classList.add(ClassName$2.POINTER_EVENT); - } else { - $(this._element).on(Event$2.TOUCHSTART, function (event) { - return start(event); - }); - $(this._element).on(Event$2.TOUCHMOVE, function (event) { - return move(event); - }); - $(this._element).on(Event$2.TOUCHEND, function (event) { - return end(event); - }); - } - }; - - _proto._keydown = function _keydown(event) { - if (/input|textarea/i.test(event.target.tagName)) { - return; - } - - switch (event.which) { - case ARROW_LEFT_KEYCODE: - event.preventDefault(); - this.prev(); - break; - - case ARROW_RIGHT_KEYCODE: - event.preventDefault(); - this.next(); - break; - - default: - } - }; - - _proto._getItemIndex = function _getItemIndex(element) { - this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : []; - return this._items.indexOf(element); - }; - - _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { - var isNextDirection = direction === Direction.NEXT; - var isPrevDirection = direction === Direction.PREV; - - var activeIndex = this._getItemIndex(activeElement); - - var lastItemIndex = this._items.length - 1; - var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; - - if (isGoingToWrap && !this._config.wrap) { - return activeElement; - } - - var delta = direction === Direction.PREV ? -1 : 1; - var itemIndex = (activeIndex + delta) % this._items.length; - return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; - }; - - _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { - var targetIndex = this._getItemIndex(relatedTarget); - - var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM)); - - var slideEvent = $.Event(Event$2.SLIDE, { - relatedTarget: relatedTarget, - direction: eventDirectionName, - from: fromIndex, - to: targetIndex - }); - $(this._element).trigger(slideEvent); - return slideEvent; - }; - - _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { - if (this._indicatorsElement) { - var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE)); - $(indicators).removeClass(ClassName$2.ACTIVE); - - var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; - - if (nextIndicator) { - $(nextIndicator).addClass(ClassName$2.ACTIVE); - } - } - }; - - _proto._slide = function _slide(direction, element) { - var _this4 = this; - - var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); - - var activeElementIndex = this._getItemIndex(activeElement); - - var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); - - var nextElementIndex = this._getItemIndex(nextElement); - - var isCycling = Boolean(this._interval); - var directionalClassName; - var orderClassName; - var eventDirectionName; - - if (direction === Direction.NEXT) { - directionalClassName = ClassName$2.LEFT; - orderClassName = ClassName$2.NEXT; - eventDirectionName = Direction.LEFT; - } else { - directionalClassName = ClassName$2.RIGHT; - orderClassName = ClassName$2.PREV; - eventDirectionName = Direction.RIGHT; - } - - if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) { - this._isSliding = false; - return; - } - - var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); - - if (slideEvent.isDefaultPrevented()) { - return; - } - - if (!activeElement || !nextElement) { - // Some weirdness is happening, so we bail - return; - } - - this._isSliding = true; - - if (isCycling) { - this.pause(); - } - - this._setActiveIndicatorElement(nextElement); - - var slidEvent = $.Event(Event$2.SLID, { - relatedTarget: nextElement, - direction: eventDirectionName, - from: activeElementIndex, - to: nextElementIndex - }); - - if ($(this._element).hasClass(ClassName$2.SLIDE)) { - $(nextElement).addClass(orderClassName); - Util.reflow(nextElement); - $(activeElement).addClass(directionalClassName); - $(nextElement).addClass(directionalClassName); - var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); - - if (nextElementInterval) { - this._config.defaultInterval = this._config.defaultInterval || this._config.interval; - this._config.interval = nextElementInterval; - } else { - this._config.interval = this._config.defaultInterval || this._config.interval; - } - - var transitionDuration = Util.getTransitionDurationFromElement(activeElement); - $(activeElement).one(Util.TRANSITION_END, function () { - $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE); - $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName); - _this4._isSliding = false; - setTimeout(function () { - return $(_this4._element).trigger(slidEvent); - }, 0); - }).emulateTransitionEnd(transitionDuration); - } else { - $(activeElement).removeClass(ClassName$2.ACTIVE); - $(nextElement).addClass(ClassName$2.ACTIVE); - this._isSliding = false; - $(this._element).trigger(slidEvent); - } - - if (isCycling) { - this.cycle(); - } - } // Static - ; - - Carousel._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$2); - - var _config = _objectSpread({}, Default, $(this).data()); - - if (typeof config === 'object') { - _config = _objectSpread({}, _config, config); - } - - var action = typeof config === 'string' ? config : _config.slide; - - if (!data) { - data = new Carousel(this, _config); - $(this).data(DATA_KEY$2, data); - } - - if (typeof config === 'number') { - data.to(config); - } else if (typeof action === 'string') { - if (typeof data[action] === 'undefined') { - throw new TypeError("No method named \"" + action + "\""); - } - - data[action](); - } else if (_config.interval && _config.ride) { - data.pause(); - data.cycle(); - } - }); - }; - - Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { - var selector = Util.getSelectorFromElement(this); - - if (!selector) { - return; - } - - var target = $(selector)[0]; - - if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) { - return; - } - - var config = _objectSpread({}, $(target).data(), $(this).data()); - - var slideIndex = this.getAttribute('data-slide-to'); - - if (slideIndex) { - config.interval = false; - } - - Carousel._jQueryInterface.call($(target), config); - - if (slideIndex) { - $(target).data(DATA_KEY$2).to(slideIndex); - } - - event.preventDefault(); - }; - - _createClass(Carousel, null, [{ - key: "VERSION", - get: function get() { - return VERSION$2; - } - }, { - key: "Default", - get: function get() { - return Default; - } - }]); - - return Carousel; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler); - $(window).on(Event$2.LOAD_DATA_API, function () { - var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE)); - - for (var i = 0, len = carousels.length; i < len; i++) { - var $carousel = $(carousels[i]); - - Carousel._jQueryInterface.call($carousel, $carousel.data()); - } - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$2] = Carousel._jQueryInterface; - $.fn[NAME$2].Constructor = Carousel; - - $.fn[NAME$2].noConflict = function () { - $.fn[NAME$2] = JQUERY_NO_CONFLICT$2; - return Carousel._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$3 = 'collapse'; - var VERSION$3 = '4.3.1'; - var DATA_KEY$3 = 'bs.collapse'; - var EVENT_KEY$3 = "." + DATA_KEY$3; - var DATA_API_KEY$3 = '.data-api'; - var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3]; - var Default$1 = { - toggle: true, - parent: '' - }; - var DefaultType$1 = { - toggle: 'boolean', - parent: '(string|element)' - }; - var Event$3 = { - SHOW: "show" + EVENT_KEY$3, - SHOWN: "shown" + EVENT_KEY$3, - HIDE: "hide" + EVENT_KEY$3, - HIDDEN: "hidden" + EVENT_KEY$3, - CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3 - }; - var ClassName$3 = { - SHOW: 'show', - COLLAPSE: 'collapse', - COLLAPSING: 'collapsing', - COLLAPSED: 'collapsed' - }; - var Dimension = { - WIDTH: 'width', - HEIGHT: 'height' - }; - var Selector$3 = { - ACTIVES: '.show, .collapsing', - DATA_TOGGLE: '[data-toggle="collapse"]' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Collapse = - /*#__PURE__*/ - function () { - function Collapse(element, config) { - this._isTransitioning = false; - this._element = element; - this._config = this._getConfig(config); - this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); - var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE)); - - for (var i = 0, len = toggleList.length; i < len; i++) { - var elem = toggleList[i]; - var selector = Util.getSelectorFromElement(elem); - var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { - return foundElem === element; - }); - - if (selector !== null && filterElement.length > 0) { - this._selector = selector; - - this._triggerArray.push(elem); - } - } - - this._parent = this._config.parent ? this._getParent() : null; - - if (!this._config.parent) { - this._addAriaAndCollapsedClass(this._element, this._triggerArray); - } - - if (this._config.toggle) { - this.toggle(); - } - } // Getters - - - var _proto = Collapse.prototype; - - // Public - _proto.toggle = function toggle() { - if ($(this._element).hasClass(ClassName$3.SHOW)) { - this.hide(); - } else { - this.show(); - } - }; - - _proto.show = function show() { - var _this = this; - - if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) { - return; - } - - var actives; - var activesData; - - if (this._parent) { - actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) { - if (typeof _this._config.parent === 'string') { - return elem.getAttribute('data-parent') === _this._config.parent; - } - - return elem.classList.contains(ClassName$3.COLLAPSE); - }); - - if (actives.length === 0) { - actives = null; - } - } - - if (actives) { - activesData = $(actives).not(this._selector).data(DATA_KEY$3); - - if (activesData && activesData._isTransitioning) { - return; - } - } - - var startEvent = $.Event(Event$3.SHOW); - $(this._element).trigger(startEvent); - - if (startEvent.isDefaultPrevented()) { - return; - } - - if (actives) { - Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide'); - - if (!activesData) { - $(actives).data(DATA_KEY$3, null); - } - } - - var dimension = this._getDimension(); - - $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING); - this._element.style[dimension] = 0; - - if (this._triggerArray.length) { - $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true); - } - - this.setTransitioning(true); - - var complete = function complete() { - $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW); - _this._element.style[dimension] = ''; - - _this.setTransitioning(false); - - $(_this._element).trigger(Event$3.SHOWN); - }; - - var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); - var scrollSize = "scroll" + capitalizedDimension; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - this._element.style[dimension] = this._element[scrollSize] + "px"; - }; - - _proto.hide = function hide() { - var _this2 = this; - - if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) { - return; - } - - var startEvent = $.Event(Event$3.HIDE); - $(this._element).trigger(startEvent); - - if (startEvent.isDefaultPrevented()) { - return; - } - - var dimension = this._getDimension(); - - this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; - Util.reflow(this._element); - $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW); - var triggerArrayLength = this._triggerArray.length; - - if (triggerArrayLength > 0) { - for (var i = 0; i < triggerArrayLength; i++) { - var trigger = this._triggerArray[i]; - var selector = Util.getSelectorFromElement(trigger); - - if (selector !== null) { - var $elem = $([].slice.call(document.querySelectorAll(selector))); - - if (!$elem.hasClass(ClassName$3.SHOW)) { - $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false); - } - } - } - } - - this.setTransitioning(true); - - var complete = function complete() { - _this2.setTransitioning(false); - - $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN); - }; - - this._element.style[dimension] = ''; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - }; - - _proto.setTransitioning = function setTransitioning(isTransitioning) { - this._isTransitioning = isTransitioning; - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$3); - this._config = null; - this._parent = null; - this._element = null; - this._triggerArray = null; - this._isTransitioning = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default$1, config); - config.toggle = Boolean(config.toggle); // Coerce string values - - Util.typeCheckConfig(NAME$3, config, DefaultType$1); - return config; - }; - - _proto._getDimension = function _getDimension() { - var hasWidth = $(this._element).hasClass(Dimension.WIDTH); - return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; - }; - - _proto._getParent = function _getParent() { - var _this3 = this; - - var parent; - - if (Util.isElement(this._config.parent)) { - parent = this._config.parent; // It's a jQuery object - - if (typeof this._config.parent.jquery !== 'undefined') { - parent = this._config.parent[0]; - } - } else { - parent = document.querySelector(this._config.parent); - } - - var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; - var children = [].slice.call(parent.querySelectorAll(selector)); - $(children).each(function (i, element) { - _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); - }); - return parent; - }; - - _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { - var isOpen = $(element).hasClass(ClassName$3.SHOW); - - if (triggerArray.length) { - $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); - } - } // Static - ; - - Collapse._getTargetFromElement = function _getTargetFromElement(element) { - var selector = Util.getSelectorFromElement(element); - return selector ? document.querySelector(selector) : null; - }; - - Collapse._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var $this = $(this); - var data = $this.data(DATA_KEY$3); - - var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {}); - - if (!data && _config.toggle && /show|hide/.test(config)) { - _config.toggle = false; - } - - if (!data) { - data = new Collapse(this, _config); - $this.data(DATA_KEY$3, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Collapse, null, [{ - key: "VERSION", - get: function get() { - return VERSION$3; - } - }, { - key: "Default", - get: function get() { - return Default$1; - } - }]); - - return Collapse; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) { - // preventDefault only for
    elements (which change the URL) not inside the collapsible element - if (event.currentTarget.tagName === 'A') { - event.preventDefault(); - } - - var $trigger = $(this); - var selector = Util.getSelectorFromElement(this); - var selectors = [].slice.call(document.querySelectorAll(selector)); - $(selectors).each(function () { - var $target = $(this); - var data = $target.data(DATA_KEY$3); - var config = data ? 'toggle' : $trigger.data(); - - Collapse._jQueryInterface.call($target, config); - }); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$3] = Collapse._jQueryInterface; - $.fn[NAME$3].Constructor = Collapse; - - $.fn[NAME$3].noConflict = function () { - $.fn[NAME$3] = JQUERY_NO_CONFLICT$3; - return Collapse._jQueryInterface; - }; - - /**! - * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.14.7 - * @license - * Copyright (c) 2016 Federico Zivolo and contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; - - var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; - var timeoutDuration = 0; - for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { - if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { - timeoutDuration = 1; - break; - } - } - - function microtaskDebounce(fn) { - var called = false; - return function () { - if (called) { - return; - } - called = true; - window.Promise.resolve().then(function () { - called = false; - fn(); - }); - }; - } - - function taskDebounce(fn) { - var scheduled = false; - return function () { - if (!scheduled) { - scheduled = true; - setTimeout(function () { - scheduled = false; - fn(); - }, timeoutDuration); - } - }; - } - - var supportsMicroTasks = isBrowser && window.Promise; - - /** - * Create a debounced version of a method, that's asynchronously deferred - * but called in the minimum time possible. - * - * @method - * @memberof Popper.Utils - * @argument {Function} fn - * @returns {Function} - */ - var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; - - /** - * Check if the given variable is a function - * @method - * @memberof Popper.Utils - * @argument {Any} functionToCheck - variable to check - * @returns {Boolean} answer to: is a function? - */ - function isFunction(functionToCheck) { - var getType = {}; - return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; - } - - /** - * Get CSS computed property of the given element - * @method - * @memberof Popper.Utils - * @argument {Eement} element - * @argument {String} property - */ - function getStyleComputedProperty(element, property) { - if (element.nodeType !== 1) { - return []; - } - // NOTE: 1 DOM access here - var window = element.ownerDocument.defaultView; - var css = window.getComputedStyle(element, null); - return property ? css[property] : css; - } - - /** - * Returns the parentNode or the host of the element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} parent - */ - function getParentNode(element) { - if (element.nodeName === 'HTML') { - return element; - } - return element.parentNode || element.host; - } - - /** - * Returns the scrolling parent of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} scroll parent - */ - function getScrollParent(element) { - // Return body, `getScroll` will take care to get the correct `scrollTop` from it - if (!element) { - return document.body; - } - - switch (element.nodeName) { - case 'HTML': - case 'BODY': - return element.ownerDocument.body; - case '#document': - return element.body; - } - - // Firefox want us to check `-x` and `-y` variations as well - - var _getStyleComputedProp = getStyleComputedProperty(element), - overflow = _getStyleComputedProp.overflow, - overflowX = _getStyleComputedProp.overflowX, - overflowY = _getStyleComputedProp.overflowY; - - if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { - return element; - } - - return getScrollParent(getParentNode(element)); - } - - var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); - var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); - - /** - * Determines if the browser is Internet Explorer - * @method - * @memberof Popper.Utils - * @param {Number} version to check - * @returns {Boolean} isIE - */ - function isIE(version) { - if (version === 11) { - return isIE11; - } - if (version === 10) { - return isIE10; - } - return isIE11 || isIE10; - } - - /** - * Returns the offset parent of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} offset parent - */ - function getOffsetParent(element) { - if (!element) { - return document.documentElement; - } - - var noOffsetParent = isIE(10) ? document.body : null; - - // NOTE: 1 DOM access here - var offsetParent = element.offsetParent || null; - // Skip hidden elements which don't have an offsetParent - while (offsetParent === noOffsetParent && element.nextElementSibling) { - offsetParent = (element = element.nextElementSibling).offsetParent; - } - - var nodeName = offsetParent && offsetParent.nodeName; - - if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { - return element ? element.ownerDocument.documentElement : document.documentElement; - } - - // .offsetParent will return the closest TH, TD or TABLE in case - // no offsetParent is present, I hate this job... - if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { - return getOffsetParent(offsetParent); - } - - return offsetParent; - } - - function isOffsetContainer(element) { - var nodeName = element.nodeName; - - if (nodeName === 'BODY') { - return false; - } - return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; - } - - /** - * Finds the root node (document, shadowDOM root) of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} node - * @returns {Element} root node - */ - function getRoot(node) { - if (node.parentNode !== null) { - return getRoot(node.parentNode); - } - - return node; - } - - /** - * Finds the offset parent common to the two provided nodes - * @method - * @memberof Popper.Utils - * @argument {Element} element1 - * @argument {Element} element2 - * @returns {Element} common offset parent - */ - function findCommonOffsetParent(element1, element2) { - // This check is needed to avoid errors in case one of the elements isn't defined for any reason - if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { - return document.documentElement; - } - - // Here we make sure to give as "start" the element that comes first in the DOM - var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; - var start = order ? element1 : element2; - var end = order ? element2 : element1; - - // Get common ancestor container - var range = document.createRange(); - range.setStart(start, 0); - range.setEnd(end, 0); - var commonAncestorContainer = range.commonAncestorContainer; - - // Both nodes are inside #document - - if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { - if (isOffsetContainer(commonAncestorContainer)) { - return commonAncestorContainer; - } - - return getOffsetParent(commonAncestorContainer); - } - - // one of the nodes is inside shadowDOM, find which one - var element1root = getRoot(element1); - if (element1root.host) { - return findCommonOffsetParent(element1root.host, element2); - } else { - return findCommonOffsetParent(element1, getRoot(element2).host); - } - } - - /** - * Gets the scroll value of the given element in the given side (top and left) - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @argument {String} side `top` or `left` - * @returns {number} amount of scrolled pixels - */ - function getScroll(element) { - var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; - - var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; - var nodeName = element.nodeName; - - if (nodeName === 'BODY' || nodeName === 'HTML') { - var html = element.ownerDocument.documentElement; - var scrollingElement = element.ownerDocument.scrollingElement || html; - return scrollingElement[upperSide]; - } - - return element[upperSide]; - } - - /* - * Sum or subtract the element scroll values (left and top) from a given rect object - * @method - * @memberof Popper.Utils - * @param {Object} rect - Rect object you want to change - * @param {HTMLElement} element - The element from the function reads the scroll values - * @param {Boolean} subtract - set to true if you want to subtract the scroll values - * @return {Object} rect - The modifier rect object - */ - function includeScroll(rect, element) { - var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var scrollTop = getScroll(element, 'top'); - var scrollLeft = getScroll(element, 'left'); - var modifier = subtract ? -1 : 1; - rect.top += scrollTop * modifier; - rect.bottom += scrollTop * modifier; - rect.left += scrollLeft * modifier; - rect.right += scrollLeft * modifier; - return rect; - } - - /* - * Helper to detect borders of a given element - * @method - * @memberof Popper.Utils - * @param {CSSStyleDeclaration} styles - * Result of `getStyleComputedProperty` on the given element - * @param {String} axis - `x` or `y` - * @return {number} borders - The borders size of the given axis - */ - - function getBordersSize(styles, axis) { - var sideA = axis === 'x' ? 'Left' : 'Top'; - var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; - - return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10); - } - - function getSize(axis, body, html, computedStyle) { - return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); - } - - function getWindowSizes(document) { - var body = document.body; - var html = document.documentElement; - var computedStyle = isIE(10) && getComputedStyle(html); - - return { - height: getSize('Height', body, html, computedStyle), - width: getSize('Width', body, html, computedStyle) - }; - } - - var classCallCheck = function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - }; - - var createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - - - - - - var defineProperty = function (obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - }; - - var _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - /** - * Given element offsets, generate an output similar to getBoundingClientRect - * @method - * @memberof Popper.Utils - * @argument {Object} offsets - * @returns {Object} ClientRect like output - */ - function getClientRect(offsets) { - return _extends({}, offsets, { - right: offsets.left + offsets.width, - bottom: offsets.top + offsets.height - }); - } - - /** - * Get bounding client rect of given element - * @method - * @memberof Popper.Utils - * @param {HTMLElement} element - * @return {Object} client rect - */ - function getBoundingClientRect(element) { - var rect = {}; - - // IE10 10 FIX: Please, don't ask, the element isn't - // considered in DOM in some circumstances... - // This isn't reproducible in IE10 compatibility mode of IE11 - try { - if (isIE(10)) { - rect = element.getBoundingClientRect(); - var scrollTop = getScroll(element, 'top'); - var scrollLeft = getScroll(element, 'left'); - rect.top += scrollTop; - rect.left += scrollLeft; - rect.bottom += scrollTop; - rect.right += scrollLeft; - } else { - rect = element.getBoundingClientRect(); - } - } catch (e) {} - - var result = { - left: rect.left, - top: rect.top, - width: rect.right - rect.left, - height: rect.bottom - rect.top - }; - - // subtract scrollbar size from sizes - var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {}; - var width = sizes.width || element.clientWidth || result.right - result.left; - var height = sizes.height || element.clientHeight || result.bottom - result.top; - - var horizScrollbar = element.offsetWidth - width; - var vertScrollbar = element.offsetHeight - height; - - // if an hypothetical scrollbar is detected, we must be sure it's not a `border` - // we make this check conditional for performance reasons - if (horizScrollbar || vertScrollbar) { - var styles = getStyleComputedProperty(element); - horizScrollbar -= getBordersSize(styles, 'x'); - vertScrollbar -= getBordersSize(styles, 'y'); - - result.width -= horizScrollbar; - result.height -= vertScrollbar; - } - - return getClientRect(result); - } - - function getOffsetRectRelativeToArbitraryNode(children, parent) { - var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var isIE10 = isIE(10); - var isHTML = parent.nodeName === 'HTML'; - var childrenRect = getBoundingClientRect(children); - var parentRect = getBoundingClientRect(parent); - var scrollParent = getScrollParent(children); - - var styles = getStyleComputedProperty(parent); - var borderTopWidth = parseFloat(styles.borderTopWidth, 10); - var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); - - // In cases where the parent is fixed, we must ignore negative scroll in offset calc - if (fixedPosition && isHTML) { - parentRect.top = Math.max(parentRect.top, 0); - parentRect.left = Math.max(parentRect.left, 0); - } - var offsets = getClientRect({ - top: childrenRect.top - parentRect.top - borderTopWidth, - left: childrenRect.left - parentRect.left - borderLeftWidth, - width: childrenRect.width, - height: childrenRect.height - }); - offsets.marginTop = 0; - offsets.marginLeft = 0; - - // Subtract margins of documentElement in case it's being used as parent - // we do this only on HTML because it's the only element that behaves - // differently when margins are applied to it. The margins are included in - // the box of the documentElement, in the other cases not. - if (!isIE10 && isHTML) { - var marginTop = parseFloat(styles.marginTop, 10); - var marginLeft = parseFloat(styles.marginLeft, 10); - - offsets.top -= borderTopWidth - marginTop; - offsets.bottom -= borderTopWidth - marginTop; - offsets.left -= borderLeftWidth - marginLeft; - offsets.right -= borderLeftWidth - marginLeft; - - // Attach marginTop and marginLeft because in some circumstances we may need them - offsets.marginTop = marginTop; - offsets.marginLeft = marginLeft; - } - - if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { - offsets = includeScroll(offsets, parent); - } - - return offsets; - } - - function getViewportOffsetRectRelativeToArtbitraryNode(element) { - var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var html = element.ownerDocument.documentElement; - var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); - var width = Math.max(html.clientWidth, window.innerWidth || 0); - var height = Math.max(html.clientHeight, window.innerHeight || 0); - - var scrollTop = !excludeScroll ? getScroll(html) : 0; - var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; - - var offset = { - top: scrollTop - relativeOffset.top + relativeOffset.marginTop, - left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, - width: width, - height: height - }; - - return getClientRect(offset); - } - - /** - * Check if the given element is fixed or is inside a fixed parent - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @argument {Element} customContainer - * @returns {Boolean} answer to "isFixed?" - */ - function isFixed(element) { - var nodeName = element.nodeName; - if (nodeName === 'BODY' || nodeName === 'HTML') { - return false; - } - if (getStyleComputedProperty(element, 'position') === 'fixed') { - return true; - } - var parentNode = getParentNode(element); - if (!parentNode) { - return false; - } - return isFixed(parentNode); - } - - /** - * Finds the first parent of an element that has a transformed property defined - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} first transformed parent or documentElement - */ - - function getFixedPositionOffsetParent(element) { - // This check is needed to avoid errors in case one of the elements isn't defined for any reason - if (!element || !element.parentElement || isIE()) { - return document.documentElement; - } - var el = element.parentElement; - while (el && getStyleComputedProperty(el, 'transform') === 'none') { - el = el.parentElement; - } - return el || document.documentElement; - } - - /** - * Computed the boundaries limits and return them - * @method - * @memberof Popper.Utils - * @param {HTMLElement} popper - * @param {HTMLElement} reference - * @param {number} padding - * @param {HTMLElement} boundariesElement - Element used to define the boundaries - * @param {Boolean} fixedPosition - Is in fixed position mode - * @returns {Object} Coordinates of the boundaries - */ - function getBoundaries(popper, reference, padding, boundariesElement) { - var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; - - // NOTE: 1 DOM access here - - var boundaries = { top: 0, left: 0 }; - var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); - - // Handle viewport case - if (boundariesElement === 'viewport') { - boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); - } else { - // Handle other cases based on DOM element used as boundaries - var boundariesNode = void 0; - if (boundariesElement === 'scrollParent') { - boundariesNode = getScrollParent(getParentNode(reference)); - if (boundariesNode.nodeName === 'BODY') { - boundariesNode = popper.ownerDocument.documentElement; - } - } else if (boundariesElement === 'window') { - boundariesNode = popper.ownerDocument.documentElement; - } else { - boundariesNode = boundariesElement; - } - - var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); - - // In case of HTML, we need a different computation - if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { - var _getWindowSizes = getWindowSizes(popper.ownerDocument), - height = _getWindowSizes.height, - width = _getWindowSizes.width; - - boundaries.top += offsets.top - offsets.marginTop; - boundaries.bottom = height + offsets.top; - boundaries.left += offsets.left - offsets.marginLeft; - boundaries.right = width + offsets.left; - } else { - // for all the other DOM elements, this one is good - boundaries = offsets; - } - } - - // Add paddings - padding = padding || 0; - var isPaddingNumber = typeof padding === 'number'; - boundaries.left += isPaddingNumber ? padding : padding.left || 0; - boundaries.top += isPaddingNumber ? padding : padding.top || 0; - boundaries.right -= isPaddingNumber ? padding : padding.right || 0; - boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; - - return boundaries; - } - - function getArea(_ref) { - var width = _ref.width, - height = _ref.height; - - return width * height; - } - - /** - * Utility used to transform the `auto` placement to the placement with more - * available space. - * @method - * @memberof Popper.Utils - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { - var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; - - if (placement.indexOf('auto') === -1) { - return placement; - } - - var boundaries = getBoundaries(popper, reference, padding, boundariesElement); - - var rects = { - top: { - width: boundaries.width, - height: refRect.top - boundaries.top - }, - right: { - width: boundaries.right - refRect.right, - height: boundaries.height - }, - bottom: { - width: boundaries.width, - height: boundaries.bottom - refRect.bottom - }, - left: { - width: refRect.left - boundaries.left, - height: boundaries.height - } - }; - - var sortedAreas = Object.keys(rects).map(function (key) { - return _extends({ - key: key - }, rects[key], { - area: getArea(rects[key]) - }); - }).sort(function (a, b) { - return b.area - a.area; - }); - - var filteredAreas = sortedAreas.filter(function (_ref2) { - var width = _ref2.width, - height = _ref2.height; - return width >= popper.clientWidth && height >= popper.clientHeight; - }); - - var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; - - var variation = placement.split('-')[1]; - - return computedPlacement + (variation ? '-' + variation : ''); - } - - /** - * Get offsets to the reference element - * @method - * @memberof Popper.Utils - * @param {Object} state - * @param {Element} popper - the popper element - * @param {Element} reference - the reference element (the popper will be relative to this) - * @param {Element} fixedPosition - is in fixed position mode - * @returns {Object} An object containing the offsets which will be applied to the popper - */ - function getReferenceOffsets(state, popper, reference) { - var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - - var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); - return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); - } - - /** - * Get the outer sizes of the given element (offset size + margins) - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Object} object containing width and height properties - */ - function getOuterSizes(element) { - var window = element.ownerDocument.defaultView; - var styles = window.getComputedStyle(element); - var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0); - var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0); - var result = { - width: element.offsetWidth + y, - height: element.offsetHeight + x - }; - return result; - } - - /** - * Get the opposite placement of the given one - * @method - * @memberof Popper.Utils - * @argument {String} placement - * @returns {String} flipped placement - */ - function getOppositePlacement(placement) { - var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; - return placement.replace(/left|right|bottom|top/g, function (matched) { - return hash[matched]; - }); - } - - /** - * Get offsets to the popper - * @method - * @memberof Popper.Utils - * @param {Object} position - CSS position the Popper will get applied - * @param {HTMLElement} popper - the popper element - * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) - * @param {String} placement - one of the valid placement options - * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper - */ - function getPopperOffsets(popper, referenceOffsets, placement) { - placement = placement.split('-')[0]; - - // Get popper node sizes - var popperRect = getOuterSizes(popper); - - // Add position, width and height to our offsets object - var popperOffsets = { - width: popperRect.width, - height: popperRect.height - }; - - // depending by the popper placement we have to compute its offsets slightly differently - var isHoriz = ['right', 'left'].indexOf(placement) !== -1; - var mainSide = isHoriz ? 'top' : 'left'; - var secondarySide = isHoriz ? 'left' : 'top'; - var measurement = isHoriz ? 'height' : 'width'; - var secondaryMeasurement = !isHoriz ? 'height' : 'width'; - - popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; - if (placement === secondarySide) { - popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; - } else { - popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; - } - - return popperOffsets; - } - - /** - * Mimics the `find` method of Array - * @method - * @memberof Popper.Utils - * @argument {Array} arr - * @argument prop - * @argument value - * @returns index or -1 - */ - function find(arr, check) { - // use native find if supported - if (Array.prototype.find) { - return arr.find(check); - } - - // use `filter` to obtain the same behavior of `find` - return arr.filter(check)[0]; - } - - /** - * Return the index of the matching object - * @method - * @memberof Popper.Utils - * @argument {Array} arr - * @argument prop - * @argument value - * @returns index or -1 - */ - function findIndex(arr, prop, value) { - // use native findIndex if supported - if (Array.prototype.findIndex) { - return arr.findIndex(function (cur) { - return cur[prop] === value; - }); - } - - // use `find` + `indexOf` if `findIndex` isn't supported - var match = find(arr, function (obj) { - return obj[prop] === value; - }); - return arr.indexOf(match); - } - - /** - * Loop trough the list of modifiers and run them in order, - * each of them will then edit the data object. - * @method - * @memberof Popper.Utils - * @param {dataObject} data - * @param {Array} modifiers - * @param {String} ends - Optional modifier name used as stopper - * @returns {dataObject} - */ - function runModifiers(modifiers, data, ends) { - var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); - - modifiersToRun.forEach(function (modifier) { - if (modifier['function']) { - // eslint-disable-line dot-notation - console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); - } - var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation - if (modifier.enabled && isFunction(fn)) { - // Add properties to offsets to make them a complete clientRect object - // we do this before each modifier to make sure the previous one doesn't - // mess with these values - data.offsets.popper = getClientRect(data.offsets.popper); - data.offsets.reference = getClientRect(data.offsets.reference); - - data = fn(data, modifier); - } - }); - - return data; - } - - /** - * Updates the position of the popper, computing the new offsets and applying - * the new style.
    - * Prefer `scheduleUpdate` over `update` because of performance reasons. - * @method - * @memberof Popper - */ - function update() { - // if popper is destroyed, don't perform any further update - if (this.state.isDestroyed) { - return; - } - - var data = { - instance: this, - styles: {}, - arrowStyles: {}, - attributes: {}, - flipped: false, - offsets: {} - }; - - // compute reference element offsets - data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); - - // compute auto placement, store placement inside the data object, - // modifiers will be able to edit `placement` if needed - // and refer to originalPlacement to know the original value - data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); - - // store the computed placement inside `originalPlacement` - data.originalPlacement = data.placement; - - data.positionFixed = this.options.positionFixed; - - // compute the popper offsets - data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); - - data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; - - // run the modifiers - data = runModifiers(this.modifiers, data); - - // the first `update` will call `onCreate` callback - // the other ones will call `onUpdate` callback - if (!this.state.isCreated) { - this.state.isCreated = true; - this.options.onCreate(data); - } else { - this.options.onUpdate(data); - } - } - - /** - * Helper used to know if the given modifier is enabled. - * @method - * @memberof Popper.Utils - * @returns {Boolean} - */ - function isModifierEnabled(modifiers, modifierName) { - return modifiers.some(function (_ref) { - var name = _ref.name, - enabled = _ref.enabled; - return enabled && name === modifierName; - }); - } - - /** - * Get the prefixed supported property name - * @method - * @memberof Popper.Utils - * @argument {String} property (camelCase) - * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) - */ - function getSupportedPropertyName(property) { - var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; - var upperProp = property.charAt(0).toUpperCase() + property.slice(1); - - for (var i = 0; i < prefixes.length; i++) { - var prefix = prefixes[i]; - var toCheck = prefix ? '' + prefix + upperProp : property; - if (typeof document.body.style[toCheck] !== 'undefined') { - return toCheck; - } - } - return null; - } - - /** - * Destroys the popper. - * @method - * @memberof Popper - */ - function destroy() { - this.state.isDestroyed = true; - - // touch DOM only if `applyStyle` modifier is enabled - if (isModifierEnabled(this.modifiers, 'applyStyle')) { - this.popper.removeAttribute('x-placement'); - this.popper.style.position = ''; - this.popper.style.top = ''; - this.popper.style.left = ''; - this.popper.style.right = ''; - this.popper.style.bottom = ''; - this.popper.style.willChange = ''; - this.popper.style[getSupportedPropertyName('transform')] = ''; - } - - this.disableEventListeners(); - - // remove the popper if user explicity asked for the deletion on destroy - // do not use `remove` because IE11 doesn't support it - if (this.options.removeOnDestroy) { - this.popper.parentNode.removeChild(this.popper); - } - return this; - } - - /** - * Get the window associated with the element - * @argument {Element} element - * @returns {Window} - */ - function getWindow(element) { - var ownerDocument = element.ownerDocument; - return ownerDocument ? ownerDocument.defaultView : window; - } - - function attachToScrollParents(scrollParent, event, callback, scrollParents) { - var isBody = scrollParent.nodeName === 'BODY'; - var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; - target.addEventListener(event, callback, { passive: true }); - - if (!isBody) { - attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); - } - scrollParents.push(target); - } - - /** - * Setup needed event listeners used to update the popper position - * @method - * @memberof Popper.Utils - * @private - */ - function setupEventListeners(reference, options, state, updateBound) { - // Resize event listener on window - state.updateBound = updateBound; - getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); - - // Scroll event listener on scroll parents - var scrollElement = getScrollParent(reference); - attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); - state.scrollElement = scrollElement; - state.eventsEnabled = true; - - return state; - } - - /** - * It will add resize/scroll events and start recalculating - * position of the popper element when they are triggered. - * @method - * @memberof Popper - */ - function enableEventListeners() { - if (!this.state.eventsEnabled) { - this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); - } - } - - /** - * Remove event listeners used to update the popper position - * @method - * @memberof Popper.Utils - * @private - */ - function removeEventListeners(reference, state) { - // Remove resize event listener on window - getWindow(reference).removeEventListener('resize', state.updateBound); - - // Remove scroll event listener on scroll parents - state.scrollParents.forEach(function (target) { - target.removeEventListener('scroll', state.updateBound); - }); - - // Reset state - state.updateBound = null; - state.scrollParents = []; - state.scrollElement = null; - state.eventsEnabled = false; - return state; - } - - /** - * It will remove resize/scroll events and won't recalculate popper position - * when they are triggered. It also won't trigger `onUpdate` callback anymore, - * unless you call `update` method manually. - * @method - * @memberof Popper - */ - function disableEventListeners() { - if (this.state.eventsEnabled) { - cancelAnimationFrame(this.scheduleUpdate); - this.state = removeEventListeners(this.reference, this.state); - } - } - - /** - * Tells if a given input is a number - * @method - * @memberof Popper.Utils - * @param {*} input to check - * @return {Boolean} - */ - function isNumeric(n) { - return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); - } - - /** - * Set the style to the given popper - * @method - * @memberof Popper.Utils - * @argument {Element} element - Element to apply the style to - * @argument {Object} styles - * Object with a list of properties and values which will be applied to the element - */ - function setStyles(element, styles) { - Object.keys(styles).forEach(function (prop) { - var unit = ''; - // add unit if the value is numeric and is one of the following - if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { - unit = 'px'; - } - element.style[prop] = styles[prop] + unit; - }); - } - - /** - * Set the attributes to the given popper - * @method - * @memberof Popper.Utils - * @argument {Element} element - Element to apply the attributes to - * @argument {Object} styles - * Object with a list of properties and values which will be applied to the element - */ - function setAttributes(element, attributes) { - Object.keys(attributes).forEach(function (prop) { - var value = attributes[prop]; - if (value !== false) { - element.setAttribute(prop, attributes[prop]); - } else { - element.removeAttribute(prop); - } - }); - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} data.styles - List of style properties - values to apply to popper element - * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The same data object - */ - function applyStyle(data) { - // any property present in `data.styles` will be applied to the popper, - // in this way we can make the 3rd party modifiers add custom styles to it - // Be aware, modifiers could override the properties defined in the previous - // lines of this modifier! - setStyles(data.instance.popper, data.styles); - - // any property present in `data.attributes` will be applied to the popper, - // they will be set as HTML attributes of the element - setAttributes(data.instance.popper, data.attributes); - - // if arrowElement is defined and arrowStyles has some properties - if (data.arrowElement && Object.keys(data.arrowStyles).length) { - setStyles(data.arrowElement, data.arrowStyles); - } - - return data; - } - - /** - * Set the x-placement attribute before everything else because it could be used - * to add margins to the popper margins needs to be calculated to get the - * correct popper offsets. - * @method - * @memberof Popper.modifiers - * @param {HTMLElement} reference - The reference element used to position the popper - * @param {HTMLElement} popper - The HTML element used as popper - * @param {Object} options - Popper.js options - */ - function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { - // compute reference element offsets - var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); - - // compute auto placement, store placement inside the data object, - // modifiers will be able to edit `placement` if needed - // and refer to originalPlacement to know the original value - var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); - - popper.setAttribute('x-placement', placement); - - // Apply `position` to popper before anything else because - // without the position applied we can't guarantee correct computations - setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); - - return options; - } - - /** - * @function - * @memberof Popper.Utils - * @argument {Object} data - The data object generated by `update` method - * @argument {Boolean} shouldRound - If the offsets should be rounded at all - * @returns {Object} The popper's position offsets rounded - * - * The tale of pixel-perfect positioning. It's still not 100% perfect, but as - * good as it can be within reason. - * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 - * - * Low DPI screens cause a popper to be blurry if not using full pixels (Safari - * as well on High DPI screens). - * - * Firefox prefers no rounding for positioning and does not have blurriness on - * high DPI screens. - * - * Only horizontal placement and left/right values need to be considered. - */ - function getRoundedOffsets(data, shouldRound) { - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - var round = Math.round, - floor = Math.floor; - - var noRound = function noRound(v) { - return v; - }; - - var referenceWidth = round(reference.width); - var popperWidth = round(popper.width); - - var isVertical = ['left', 'right'].indexOf(data.placement) !== -1; - var isVariation = data.placement.indexOf('-') !== -1; - var sameWidthParity = referenceWidth % 2 === popperWidth % 2; - var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1; - - var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor; - var verticalToInteger = !shouldRound ? noRound : round; - - return { - left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), - top: verticalToInteger(popper.top), - bottom: verticalToInteger(popper.bottom), - right: horizontalToInteger(popper.right) - }; - } - - var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function computeStyle(data, options) { - var x = options.x, - y = options.y; - var popper = data.offsets.popper; - - // Remove this legacy support in Popper.js v2 - - var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { - return modifier.name === 'applyStyle'; - }).gpuAcceleration; - if (legacyGpuAccelerationOption !== undefined) { - console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); - } - var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; - - var offsetParent = getOffsetParent(data.instance.popper); - var offsetParentRect = getBoundingClientRect(offsetParent); - - // Styles - var styles = { - position: popper.position - }; - - var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox); - - var sideA = x === 'bottom' ? 'top' : 'bottom'; - var sideB = y === 'right' ? 'left' : 'right'; - - // if gpuAcceleration is set to `true` and transform is supported, - // we use `translate3d` to apply the position to the popper we - // automatically use the supported prefixed version if needed - var prefixedProperty = getSupportedPropertyName('transform'); - - // now, let's make a step back and look at this code closely (wtf?) - // If the content of the popper grows once it's been positioned, it - // may happen that the popper gets misplaced because of the new content - // overflowing its reference element - // To avoid this problem, we provide two options (x and y), which allow - // the consumer to define the offset origin. - // If we position a popper on top of a reference element, we can set - // `x` to `top` to make the popper grow towards its top instead of - // its bottom. - var left = void 0, - top = void 0; - if (sideA === 'bottom') { - // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar) - // and not the bottom of the html element - if (offsetParent.nodeName === 'HTML') { - top = -offsetParent.clientHeight + offsets.bottom; - } else { - top = -offsetParentRect.height + offsets.bottom; - } - } else { - top = offsets.top; - } - if (sideB === 'right') { - if (offsetParent.nodeName === 'HTML') { - left = -offsetParent.clientWidth + offsets.right; - } else { - left = -offsetParentRect.width + offsets.right; - } - } else { - left = offsets.left; - } - if (gpuAcceleration && prefixedProperty) { - styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; - styles[sideA] = 0; - styles[sideB] = 0; - styles.willChange = 'transform'; - } else { - // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties - var invertTop = sideA === 'bottom' ? -1 : 1; - var invertLeft = sideB === 'right' ? -1 : 1; - styles[sideA] = top * invertTop; - styles[sideB] = left * invertLeft; - styles.willChange = sideA + ', ' + sideB; - } - - // Attributes - var attributes = { - 'x-placement': data.placement - }; - - // Update `data` attributes, styles and arrowStyles - data.attributes = _extends({}, attributes, data.attributes); - data.styles = _extends({}, styles, data.styles); - data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); - - return data; - } - - /** - * Helper used to know if the given modifier depends from another one.
    - * It checks if the needed modifier is listed and enabled. - * @method - * @memberof Popper.Utils - * @param {Array} modifiers - list of modifiers - * @param {String} requestingName - name of requesting modifier - * @param {String} requestedName - name of requested modifier - * @returns {Boolean} - */ - function isModifierRequired(modifiers, requestingName, requestedName) { - var requesting = find(modifiers, function (_ref) { - var name = _ref.name; - return name === requestingName; - }); - - var isRequired = !!requesting && modifiers.some(function (modifier) { - return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; - }); - - if (!isRequired) { - var _requesting = '`' + requestingName + '`'; - var requested = '`' + requestedName + '`'; - console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); - } - return isRequired; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function arrow(data, options) { - var _data$offsets$arrow; - - // arrow depends on keepTogether in order to work - if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { - return data; - } - - var arrowElement = options.element; - - // if arrowElement is a string, suppose it's a CSS selector - if (typeof arrowElement === 'string') { - arrowElement = data.instance.popper.querySelector(arrowElement); - - // if arrowElement is not found, don't run the modifier - if (!arrowElement) { - return data; - } - } else { - // if the arrowElement isn't a query selector we must check that the - // provided DOM node is child of its popper node - if (!data.instance.popper.contains(arrowElement)) { - console.warn('WARNING: `arrow.element` must be child of its popper element!'); - return data; - } - } - - var placement = data.placement.split('-')[0]; - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var isVertical = ['left', 'right'].indexOf(placement) !== -1; - - var len = isVertical ? 'height' : 'width'; - var sideCapitalized = isVertical ? 'Top' : 'Left'; - var side = sideCapitalized.toLowerCase(); - var altSide = isVertical ? 'left' : 'top'; - var opSide = isVertical ? 'bottom' : 'right'; - var arrowElementSize = getOuterSizes(arrowElement)[len]; - - // - // extends keepTogether behavior making sure the popper and its - // reference have enough pixels in conjunction - // - - // top/left side - if (reference[opSide] - arrowElementSize < popper[side]) { - data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); - } - // bottom/right side - if (reference[side] + arrowElementSize > popper[opSide]) { - data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; - } - data.offsets.popper = getClientRect(data.offsets.popper); - - // compute center of the popper - var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; - - // Compute the sideValue using the updated popper offsets - // take popper margin in account because we don't have this info available - var css = getStyleComputedProperty(data.instance.popper); - var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10); - var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10); - var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; - - // prevent arrowElement from being placed not contiguously to its popper - sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); - - data.arrowElement = arrowElement; - data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); - - return data; - } - - /** - * Get the opposite placement variation of the given one - * @method - * @memberof Popper.Utils - * @argument {String} placement variation - * @returns {String} flipped placement variation - */ - function getOppositeVariation(variation) { - if (variation === 'end') { - return 'start'; - } else if (variation === 'start') { - return 'end'; - } - return variation; - } - - /** - * List of accepted placements to use as values of the `placement` option.
    - * Valid placements are: - * - `auto` - * - `top` - * - `right` - * - `bottom` - * - `left` - * - * Each placement can have a variation from this list: - * - `-start` - * - `-end` - * - * Variations are interpreted easily if you think of them as the left to right - * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` - * is right.
    - * Vertically (`left` and `right`), `start` is top and `end` is bottom. - * - * Some valid examples are: - * - `top-end` (on top of reference, right aligned) - * - `right-start` (on right of reference, top aligned) - * - `bottom` (on bottom, centered) - * - `auto-end` (on the side with more space available, alignment depends by placement) - * - * @static - * @type {Array} - * @enum {String} - * @readonly - * @method placements - * @memberof Popper - */ - var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; - - // Get rid of `auto` `auto-start` and `auto-end` - var validPlacements = placements.slice(3); - - /** - * Given an initial placement, returns all the subsequent placements - * clockwise (or counter-clockwise). - * - * @method - * @memberof Popper.Utils - * @argument {String} placement - A valid placement (it accepts variations) - * @argument {Boolean} counter - Set to true to walk the placements counterclockwise - * @returns {Array} placements including their variations - */ - function clockwise(placement) { - var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var index = validPlacements.indexOf(placement); - var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); - return counter ? arr.reverse() : arr; - } - - var BEHAVIORS = { - FLIP: 'flip', - CLOCKWISE: 'clockwise', - COUNTERCLOCKWISE: 'counterclockwise' - }; - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function flip(data, options) { - // if `inner` modifier is enabled, we can't use the `flip` modifier - if (isModifierEnabled(data.instance.modifiers, 'inner')) { - return data; - } - - if (data.flipped && data.placement === data.originalPlacement) { - // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides - return data; - } - - var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); - - var placement = data.placement.split('-')[0]; - var placementOpposite = getOppositePlacement(placement); - var variation = data.placement.split('-')[1] || ''; - - var flipOrder = []; - - switch (options.behavior) { - case BEHAVIORS.FLIP: - flipOrder = [placement, placementOpposite]; - break; - case BEHAVIORS.CLOCKWISE: - flipOrder = clockwise(placement); - break; - case BEHAVIORS.COUNTERCLOCKWISE: - flipOrder = clockwise(placement, true); - break; - default: - flipOrder = options.behavior; - } - - flipOrder.forEach(function (step, index) { - if (placement !== step || flipOrder.length === index + 1) { - return data; - } - - placement = data.placement.split('-')[0]; - placementOpposite = getOppositePlacement(placement); - - var popperOffsets = data.offsets.popper; - var refOffsets = data.offsets.reference; - - // using floor because the reference offsets may contain decimals we are not going to consider here - var floor = Math.floor; - var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); - - var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); - var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); - var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); - var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); - - var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; - - // flip the variation if required - var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; - var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); - - if (overlapsRef || overflowsBoundaries || flippedVariation) { - // this boolean to detect any flip loop - data.flipped = true; - - if (overlapsRef || overflowsBoundaries) { - placement = flipOrder[index + 1]; - } - - if (flippedVariation) { - variation = getOppositeVariation(variation); - } - - data.placement = placement + (variation ? '-' + variation : ''); - - // this object contains `position`, we want to preserve it along with - // any additional property we may add in the future - data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); - - data = runModifiers(data.instance.modifiers, data, 'flip'); - } - }); - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function keepTogether(data) { - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var placement = data.placement.split('-')[0]; - var floor = Math.floor; - var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; - var side = isVertical ? 'right' : 'bottom'; - var opSide = isVertical ? 'left' : 'top'; - var measurement = isVertical ? 'width' : 'height'; - - if (popper[side] < floor(reference[opSide])) { - data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; - } - if (popper[opSide] > floor(reference[side])) { - data.offsets.popper[opSide] = floor(reference[side]); - } - - return data; - } - - /** - * Converts a string containing value + unit into a px value number - * @function - * @memberof {modifiers~offset} - * @private - * @argument {String} str - Value + unit string - * @argument {String} measurement - `height` or `width` - * @argument {Object} popperOffsets - * @argument {Object} referenceOffsets - * @returns {Number|String} - * Value in pixels, or original string if no values were extracted - */ - function toValue(str, measurement, popperOffsets, referenceOffsets) { - // separate value from unit - var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); - var value = +split[1]; - var unit = split[2]; - - // If it's not a number it's an operator, I guess - if (!value) { - return str; - } - - if (unit.indexOf('%') === 0) { - var element = void 0; - switch (unit) { - case '%p': - element = popperOffsets; - break; - case '%': - case '%r': - default: - element = referenceOffsets; - } - - var rect = getClientRect(element); - return rect[measurement] / 100 * value; - } else if (unit === 'vh' || unit === 'vw') { - // if is a vh or vw, we calculate the size based on the viewport - var size = void 0; - if (unit === 'vh') { - size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); - } else { - size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); - } - return size / 100 * value; - } else { - // if is an explicit pixel unit, we get rid of the unit and keep the value - // if is an implicit unit, it's px, and we return just the value - return value; - } - } - - /** - * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. - * @function - * @memberof {modifiers~offset} - * @private - * @argument {String} offset - * @argument {Object} popperOffsets - * @argument {Object} referenceOffsets - * @argument {String} basePlacement - * @returns {Array} a two cells array with x and y offsets in numbers - */ - function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { - var offsets = [0, 0]; - - // Use height if placement is left or right and index is 0 otherwise use width - // in this way the first offset will use an axis and the second one - // will use the other one - var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; - - // Split the offset string to obtain a list of values and operands - // The regex addresses values with the plus or minus sign in front (+10, -20, etc) - var fragments = offset.split(/(\+|\-)/).map(function (frag) { - return frag.trim(); - }); - - // Detect if the offset string contains a pair of values or a single one - // they could be separated by comma or space - var divider = fragments.indexOf(find(fragments, function (frag) { - return frag.search(/,|\s/) !== -1; - })); - - if (fragments[divider] && fragments[divider].indexOf(',') === -1) { - console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); - } - - // If divider is found, we divide the list of values and operands to divide - // them by ofset X and Y. - var splitRegex = /\s*,\s*|\s+/; - var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; - - // Convert the values with units to absolute pixels to allow our computations - ops = ops.map(function (op, index) { - // Most of the units rely on the orientation of the popper - var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; - var mergeWithPrevious = false; - return op - // This aggregates any `+` or `-` sign that aren't considered operators - // e.g.: 10 + +5 => [10, +, +5] - .reduce(function (a, b) { - if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { - a[a.length - 1] = b; - mergeWithPrevious = true; - return a; - } else if (mergeWithPrevious) { - a[a.length - 1] += b; - mergeWithPrevious = false; - return a; - } else { - return a.concat(b); - } - }, []) - // Here we convert the string values into number values (in px) - .map(function (str) { - return toValue(str, measurement, popperOffsets, referenceOffsets); - }); - }); - - // Loop trough the offsets arrays and execute the operations - ops.forEach(function (op, index) { - op.forEach(function (frag, index2) { - if (isNumeric(frag)) { - offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); - } - }); - }); - return offsets; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @argument {Number|String} options.offset=0 - * The offset value as described in the modifier description - * @returns {Object} The data object, properly modified - */ - function offset(data, _ref) { - var offset = _ref.offset; - var placement = data.placement, - _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var basePlacement = placement.split('-')[0]; - - var offsets = void 0; - if (isNumeric(+offset)) { - offsets = [+offset, 0]; - } else { - offsets = parseOffset(offset, popper, reference, basePlacement); - } - - if (basePlacement === 'left') { - popper.top += offsets[0]; - popper.left -= offsets[1]; - } else if (basePlacement === 'right') { - popper.top += offsets[0]; - popper.left += offsets[1]; - } else if (basePlacement === 'top') { - popper.left += offsets[0]; - popper.top -= offsets[1]; - } else if (basePlacement === 'bottom') { - popper.left += offsets[0]; - popper.top += offsets[1]; - } - - data.popper = popper; - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function preventOverflow(data, options) { - var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); - - // If offsetParent is the reference element, we really want to - // go one step up and use the next offsetParent as reference to - // avoid to make this modifier completely useless and look like broken - if (data.instance.reference === boundariesElement) { - boundariesElement = getOffsetParent(boundariesElement); - } - - // NOTE: DOM access here - // resets the popper's position so that the document size can be calculated excluding - // the size of the popper element itself - var transformProp = getSupportedPropertyName('transform'); - var popperStyles = data.instance.popper.style; // assignment to help minification - var top = popperStyles.top, - left = popperStyles.left, - transform = popperStyles[transformProp]; - - popperStyles.top = ''; - popperStyles.left = ''; - popperStyles[transformProp] = ''; - - var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); - - // NOTE: DOM access here - // restores the original style properties after the offsets have been computed - popperStyles.top = top; - popperStyles.left = left; - popperStyles[transformProp] = transform; - - options.boundaries = boundaries; - - var order = options.priority; - var popper = data.offsets.popper; - - var check = { - primary: function primary(placement) { - var value = popper[placement]; - if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { - value = Math.max(popper[placement], boundaries[placement]); - } - return defineProperty({}, placement, value); - }, - secondary: function secondary(placement) { - var mainSide = placement === 'right' ? 'left' : 'top'; - var value = popper[mainSide]; - if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { - value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); - } - return defineProperty({}, mainSide, value); - } - }; - - order.forEach(function (placement) { - var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; - popper = _extends({}, popper, check[side](placement)); - }); - - data.offsets.popper = popper; - - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function shift(data) { - var placement = data.placement; - var basePlacement = placement.split('-')[0]; - var shiftvariation = placement.split('-')[1]; - - // if shift shiftvariation is specified, run the modifier - if (shiftvariation) { - var _data$offsets = data.offsets, - reference = _data$offsets.reference, - popper = _data$offsets.popper; - - var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; - var side = isVertical ? 'left' : 'top'; - var measurement = isVertical ? 'width' : 'height'; - - var shiftOffsets = { - start: defineProperty({}, side, reference[side]), - end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) - }; - - data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); - } - - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function hide(data) { - if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { - return data; - } - - var refRect = data.offsets.reference; - var bound = find(data.instance.modifiers, function (modifier) { - return modifier.name === 'preventOverflow'; - }).boundaries; - - if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { - // Avoid unnecessary DOM access if visibility hasn't changed - if (data.hide === true) { - return data; - } - - data.hide = true; - data.attributes['x-out-of-boundaries'] = ''; - } else { - // Avoid unnecessary DOM access if visibility hasn't changed - if (data.hide === false) { - return data; - } - - data.hide = false; - data.attributes['x-out-of-boundaries'] = false; - } - - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function inner(data) { - var placement = data.placement; - var basePlacement = placement.split('-')[0]; - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; - - var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; - - popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); - - data.placement = getOppositePlacement(placement); - data.offsets.popper = getClientRect(popper); - - return data; - } - - /** - * Modifier function, each modifier can have a function of this type assigned - * to its `fn` property.
    - * These functions will be called on each update, this means that you must - * make sure they are performant enough to avoid performance bottlenecks. - * - * @function ModifierFn - * @argument {dataObject} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {dataObject} The data object, properly modified - */ - - /** - * Modifiers are plugins used to alter the behavior of your poppers.
    - * Popper.js uses a set of 9 modifiers to provide all the basic functionalities - * needed by the library. - * - * Usually you don't want to override the `order`, `fn` and `onLoad` props. - * All the other properties are configurations that could be tweaked. - * @namespace modifiers - */ - var modifiers = { - /** - * Modifier used to shift the popper on the start or end of its reference - * element.
    - * It will read the variation of the `placement` property.
    - * It can be one either `-end` or `-start`. - * @memberof modifiers - * @inner - */ - shift: { - /** @prop {number} order=100 - Index used to define the order of execution */ - order: 100, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: shift - }, - - /** - * The `offset` modifier can shift your popper on both its axis. - * - * It accepts the following units: - * - `px` or unit-less, interpreted as pixels - * - `%` or `%r`, percentage relative to the length of the reference element - * - `%p`, percentage relative to the length of the popper element - * - `vw`, CSS viewport width unit - * - `vh`, CSS viewport height unit - * - * For length is intended the main axis relative to the placement of the popper.
    - * This means that if the placement is `top` or `bottom`, the length will be the - * `width`. In case of `left` or `right`, it will be the `height`. - * - * You can provide a single value (as `Number` or `String`), or a pair of values - * as `String` divided by a comma or one (or more) white spaces.
    - * The latter is a deprecated method because it leads to confusion and will be - * removed in v2.
    - * Additionally, it accepts additions and subtractions between different units. - * Note that multiplications and divisions aren't supported. - * - * Valid examples are: - * ``` - * 10 - * '10%' - * '10, 10' - * '10%, 10' - * '10 + 10%' - * '10 - 5vh + 3%' - * '-10px + 5vh, 5px - 6%' - * ``` - * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap - * > with their reference element, unfortunately, you will have to disable the `flip` modifier. - * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). - * - * @memberof modifiers - * @inner - */ - offset: { - /** @prop {number} order=200 - Index used to define the order of execution */ - order: 200, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: offset, - /** @prop {Number|String} offset=0 - * The offset value as described in the modifier description - */ - offset: 0 - }, - - /** - * Modifier used to prevent the popper from being positioned outside the boundary. - * - * A scenario exists where the reference itself is not within the boundaries.
    - * We can say it has "escaped the boundaries" — or just "escaped".
    - * In this case we need to decide whether the popper should either: - * - * - detach from the reference and remain "trapped" in the boundaries, or - * - if it should ignore the boundary and "escape with its reference" - * - * When `escapeWithReference` is set to`true` and reference is completely - * outside its boundaries, the popper will overflow (or completely leave) - * the boundaries in order to remain attached to the edge of the reference. - * - * @memberof modifiers - * @inner - */ - preventOverflow: { - /** @prop {number} order=300 - Index used to define the order of execution */ - order: 300, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: preventOverflow, - /** - * @prop {Array} [priority=['left','right','top','bottom']] - * Popper will try to prevent overflow following these priorities by default, - * then, it could overflow on the left and on top of the `boundariesElement` - */ - priority: ['left', 'right', 'top', 'bottom'], - /** - * @prop {number} padding=5 - * Amount of pixel used to define a minimum distance between the boundaries - * and the popper. This makes sure the popper always has a little padding - * between the edges of its container - */ - padding: 5, - /** - * @prop {String|HTMLElement} boundariesElement='scrollParent' - * Boundaries used by the modifier. Can be `scrollParent`, `window`, - * `viewport` or any DOM element. - */ - boundariesElement: 'scrollParent' - }, - - /** - * Modifier used to make sure the reference and its popper stay near each other - * without leaving any gap between the two. Especially useful when the arrow is - * enabled and you want to ensure that it points to its reference element. - * It cares only about the first axis. You can still have poppers with margin - * between the popper and its reference element. - * @memberof modifiers - * @inner - */ - keepTogether: { - /** @prop {number} order=400 - Index used to define the order of execution */ - order: 400, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: keepTogether - }, - - /** - * This modifier is used to move the `arrowElement` of the popper to make - * sure it is positioned between the reference element and its popper element. - * It will read the outer size of the `arrowElement` node to detect how many - * pixels of conjunction are needed. - * - * It has no effect if no `arrowElement` is provided. - * @memberof modifiers - * @inner - */ - arrow: { - /** @prop {number} order=500 - Index used to define the order of execution */ - order: 500, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: arrow, - /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ - element: '[x-arrow]' - }, - - /** - * Modifier used to flip the popper's placement when it starts to overlap its - * reference element. - * - * Requires the `preventOverflow` modifier before it in order to work. - * - * **NOTE:** this modifier will interrupt the current update cycle and will - * restart it if it detects the need to flip the placement. - * @memberof modifiers - * @inner - */ - flip: { - /** @prop {number} order=600 - Index used to define the order of execution */ - order: 600, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: flip, - /** - * @prop {String|Array} behavior='flip' - * The behavior used to change the popper's placement. It can be one of - * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid - * placements (with optional variations) - */ - behavior: 'flip', - /** - * @prop {number} padding=5 - * The popper will flip if it hits the edges of the `boundariesElement` - */ - padding: 5, - /** - * @prop {String|HTMLElement} boundariesElement='viewport' - * The element which will define the boundaries of the popper position. - * The popper will never be placed outside of the defined boundaries - * (except if `keepTogether` is enabled) - */ - boundariesElement: 'viewport' - }, - - /** - * Modifier used to make the popper flow toward the inner of the reference element. - * By default, when this modifier is disabled, the popper will be placed outside - * the reference element. - * @memberof modifiers - * @inner - */ - inner: { - /** @prop {number} order=700 - Index used to define the order of execution */ - order: 700, - /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ - enabled: false, - /** @prop {ModifierFn} */ - fn: inner - }, - - /** - * Modifier used to hide the popper when its reference element is outside of the - * popper boundaries. It will set a `x-out-of-boundaries` attribute which can - * be used to hide with a CSS selector the popper when its reference is - * out of boundaries. - * - * Requires the `preventOverflow` modifier before it in order to work. - * @memberof modifiers - * @inner - */ - hide: { - /** @prop {number} order=800 - Index used to define the order of execution */ - order: 800, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: hide - }, - - /** - * Computes the style that will be applied to the popper element to gets - * properly positioned. - * - * Note that this modifier will not touch the DOM, it just prepares the styles - * so that `applyStyle` modifier can apply it. This separation is useful - * in case you need to replace `applyStyle` with a custom implementation. - * - * This modifier has `850` as `order` value to maintain backward compatibility - * with previous versions of Popper.js. Expect the modifiers ordering method - * to change in future major versions of the library. - * - * @memberof modifiers - * @inner - */ - computeStyle: { - /** @prop {number} order=850 - Index used to define the order of execution */ - order: 850, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: computeStyle, - /** - * @prop {Boolean} gpuAcceleration=true - * If true, it uses the CSS 3D transformation to position the popper. - * Otherwise, it will use the `top` and `left` properties - */ - gpuAcceleration: true, - /** - * @prop {string} [x='bottom'] - * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. - * Change this if your popper should grow in a direction different from `bottom` - */ - x: 'bottom', - /** - * @prop {string} [x='left'] - * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. - * Change this if your popper should grow in a direction different from `right` - */ - y: 'right' - }, - - /** - * Applies the computed styles to the popper element. - * - * All the DOM manipulations are limited to this modifier. This is useful in case - * you want to integrate Popper.js inside a framework or view library and you - * want to delegate all the DOM manipulations to it. - * - * Note that if you disable this modifier, you must make sure the popper element - * has its position set to `absolute` before Popper.js can do its work! - * - * Just disable this modifier and define your own to achieve the desired effect. - * - * @memberof modifiers - * @inner - */ - applyStyle: { - /** @prop {number} order=900 - Index used to define the order of execution */ - order: 900, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: applyStyle, - /** @prop {Function} */ - onLoad: applyStyleOnLoad, - /** - * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier - * @prop {Boolean} gpuAcceleration=true - * If true, it uses the CSS 3D transformation to position the popper. - * Otherwise, it will use the `top` and `left` properties - */ - gpuAcceleration: undefined - } - }; - - /** - * The `dataObject` is an object containing all the information used by Popper.js. - * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. - * @name dataObject - * @property {Object} data.instance The Popper.js instance - * @property {String} data.placement Placement applied to popper - * @property {String} data.originalPlacement Placement originally defined on init - * @property {Boolean} data.flipped True if popper has been flipped by flip modifier - * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper - * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier - * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) - * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) - * @property {Object} data.boundaries Offsets of the popper boundaries - * @property {Object} data.offsets The measurements of popper, reference and arrow elements - * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values - * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values - * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 - */ - - /** - * Default options provided to Popper.js constructor.
    - * These can be overridden using the `options` argument of Popper.js.
    - * To override an option, simply pass an object with the same - * structure of the `options` object, as the 3rd argument. For example: - * ``` - * new Popper(ref, pop, { - * modifiers: { - * preventOverflow: { enabled: false } - * } - * }) - * ``` - * @type {Object} - * @static - * @memberof Popper - */ - var Defaults = { - /** - * Popper's placement. - * @prop {Popper.placements} placement='bottom' - */ - placement: 'bottom', - - /** - * Set this to true if you want popper to position it self in 'fixed' mode - * @prop {Boolean} positionFixed=false - */ - positionFixed: false, - - /** - * Whether events (resize, scroll) are initially enabled. - * @prop {Boolean} eventsEnabled=true - */ - eventsEnabled: true, - - /** - * Set to true if you want to automatically remove the popper when - * you call the `destroy` method. - * @prop {Boolean} removeOnDestroy=false - */ - removeOnDestroy: false, - - /** - * Callback called when the popper is created.
    - * By default, it is set to no-op.
    - * Access Popper.js instance with `data.instance`. - * @prop {onCreate} - */ - onCreate: function onCreate() {}, - - /** - * Callback called when the popper is updated. This callback is not called - * on the initialization/creation of the popper, but only on subsequent - * updates.
    - * By default, it is set to no-op.
    - * Access Popper.js instance with `data.instance`. - * @prop {onUpdate} - */ - onUpdate: function onUpdate() {}, - - /** - * List of modifiers used to modify the offsets before they are applied to the popper. - * They provide most of the functionalities of Popper.js. - * @prop {modifiers} - */ - modifiers: modifiers - }; - - /** - * @callback onCreate - * @param {dataObject} data - */ - - /** - * @callback onUpdate - * @param {dataObject} data - */ - - // Utils - // Methods - var Popper = function () { - /** - * Creates a new Popper.js instance. - * @class Popper - * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper - * @param {HTMLElement} popper - The HTML element used as the popper - * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) - * @return {Object} instance - The generated Popper.js instance - */ - function Popper(reference, popper) { - var _this = this; - - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - classCallCheck(this, Popper); - - this.scheduleUpdate = function () { - return requestAnimationFrame(_this.update); - }; - - // make update() debounced, so that it only runs at most once-per-tick - this.update = debounce(this.update.bind(this)); - - // with {} we create a new object with the options inside it - this.options = _extends({}, Popper.Defaults, options); - - // init state - this.state = { - isDestroyed: false, - isCreated: false, - scrollParents: [] - }; - - // get reference and popper elements (allow jQuery wrappers) - this.reference = reference && reference.jquery ? reference[0] : reference; - this.popper = popper && popper.jquery ? popper[0] : popper; - - // Deep merge modifiers options - this.options.modifiers = {}; - Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { - _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); - }); - - // Refactoring modifiers' list (Object => Array) - this.modifiers = Object.keys(this.options.modifiers).map(function (name) { - return _extends({ - name: name - }, _this.options.modifiers[name]); - }) - // sort the modifiers by order - .sort(function (a, b) { - return a.order - b.order; - }); - - // modifiers have the ability to execute arbitrary code when Popper.js get inited - // such code is executed in the same order of its modifier - // they could add new properties to their options configuration - // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! - this.modifiers.forEach(function (modifierOptions) { - if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { - modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); - } - }); - - // fire the first update to position the popper in the right place - this.update(); - - var eventsEnabled = this.options.eventsEnabled; - if (eventsEnabled) { - // setup event listeners, they will take care of update the position in specific situations - this.enableEventListeners(); - } - - this.state.eventsEnabled = eventsEnabled; - } - - // We can't use class properties because they don't get listed in the - // class prototype and break stuff like Sinon stubs - - - createClass(Popper, [{ - key: 'update', - value: function update$$1() { - return update.call(this); - } - }, { - key: 'destroy', - value: function destroy$$1() { - return destroy.call(this); - } - }, { - key: 'enableEventListeners', - value: function enableEventListeners$$1() { - return enableEventListeners.call(this); - } - }, { - key: 'disableEventListeners', - value: function disableEventListeners$$1() { - return disableEventListeners.call(this); - } - - /** - * Schedules an update. It will run on the next UI update available. - * @method scheduleUpdate - * @memberof Popper - */ - - - /** - * Collection of utilities useful when writing custom modifiers. - * Starting from version 1.7, this method is available only if you - * include `popper-utils.js` before `popper.js`. - * - * **DEPRECATION**: This way to access PopperUtils is deprecated - * and will be removed in v2! Use the PopperUtils module directly instead. - * Due to the high instability of the methods contained in Utils, we can't - * guarantee them to follow semver. Use them at your own risk! - * @static - * @private - * @type {Object} - * @deprecated since version 1.8 - * @member Utils - * @memberof Popper - */ - - }]); - return Popper; - }(); - - /** - * The `referenceObject` is an object that provides an interface compatible with Popper.js - * and lets you use it as replacement of a real DOM node.
    - * You can use this method to position a popper relatively to a set of coordinates - * in case you don't have a DOM node to use as reference. - * - * ``` - * new Popper(referenceObject, popperNode); - * ``` - * - * NB: This feature isn't supported in Internet Explorer 10. - * @name referenceObject - * @property {Function} data.getBoundingClientRect - * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. - * @property {number} data.clientWidth - * An ES6 getter that will return the width of the virtual reference element. - * @property {number} data.clientHeight - * An ES6 getter that will return the height of the virtual reference element. - */ - - - Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; - Popper.placements = placements; - Popper.Defaults = Defaults; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$4 = 'dropdown'; - var VERSION$4 = '4.3.1'; - var DATA_KEY$4 = 'bs.dropdown'; - var EVENT_KEY$4 = "." + DATA_KEY$4; - var DATA_API_KEY$4 = '.data-api'; - var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4]; - var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key - - var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key - - var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key - - var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key - - var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key - - var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) - - var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); - var Event$4 = { - HIDE: "hide" + EVENT_KEY$4, - HIDDEN: "hidden" + EVENT_KEY$4, - SHOW: "show" + EVENT_KEY$4, - SHOWN: "shown" + EVENT_KEY$4, - CLICK: "click" + EVENT_KEY$4, - CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4, - KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4, - KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4 - }; - var ClassName$4 = { - DISABLED: 'disabled', - SHOW: 'show', - DROPUP: 'dropup', - DROPRIGHT: 'dropright', - DROPLEFT: 'dropleft', - MENURIGHT: 'dropdown-menu-right', - MENULEFT: 'dropdown-menu-left', - POSITION_STATIC: 'position-static' - }; - var Selector$4 = { - DATA_TOGGLE: '[data-toggle="dropdown"]', - FORM_CHILD: '.dropdown form', - MENU: '.dropdown-menu', - NAVBAR_NAV: '.navbar-nav', - VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' - }; - var AttachmentMap = { - TOP: 'top-start', - TOPEND: 'top-end', - BOTTOM: 'bottom-start', - BOTTOMEND: 'bottom-end', - RIGHT: 'right-start', - RIGHTEND: 'right-end', - LEFT: 'left-start', - LEFTEND: 'left-end' - }; - var Default$2 = { - offset: 0, - flip: true, - boundary: 'scrollParent', - reference: 'toggle', - display: 'dynamic' - }; - var DefaultType$2 = { - offset: '(number|string|function)', - flip: 'boolean', - boundary: '(string|element)', - reference: '(string|element)', - display: 'string' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Dropdown = - /*#__PURE__*/ - function () { - function Dropdown(element, config) { - this._element = element; - this._popper = null; - this._config = this._getConfig(config); - this._menu = this._getMenuElement(); - this._inNavbar = this._detectNavbar(); - - this._addEventListeners(); - } // Getters - - - var _proto = Dropdown.prototype; - - // Public - _proto.toggle = function toggle() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) { - return; - } - - var parent = Dropdown._getParentFromElement(this._element); - - var isActive = $(this._menu).hasClass(ClassName$4.SHOW); - - Dropdown._clearMenus(); - - if (isActive) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var showEvent = $.Event(Event$4.SHOW, relatedTarget); - $(parent).trigger(showEvent); - - if (showEvent.isDefaultPrevented()) { - return; - } // Disable totally Popper.js for Dropdown in Navbar - - - if (!this._inNavbar) { - /** - * Check for Popper dependency - * Popper - https://popper.js.org - */ - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); - } - - var referenceElement = this._element; - - if (this._config.reference === 'parent') { - referenceElement = parent; - } else if (Util.isElement(this._config.reference)) { - referenceElement = this._config.reference; // Check if it's jQuery element - - if (typeof this._config.reference.jquery !== 'undefined') { - referenceElement = this._config.reference[0]; - } - } // If boundary is not `scrollParent`, then set position to `static` - // to allow the menu to "escape" the scroll parent's boundaries - // https://github.com/twbs/bootstrap/issues/24251 - - - if (this._config.boundary !== 'scrollParent') { - $(parent).addClass(ClassName$4.POSITION_STATIC); - } - - this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); - } // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - - if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) { - $(document.body).children().on('mouseover', null, $.noop); - } - - this._element.focus(); - - this._element.setAttribute('aria-expanded', true); - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); - }; - - _proto.show = function show() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var showEvent = $.Event(Event$4.SHOW, relatedTarget); - - var parent = Dropdown._getParentFromElement(this._element); - - $(parent).trigger(showEvent); - - if (showEvent.isDefaultPrevented()) { - return; - } - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); - }; - - _proto.hide = function hide() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var hideEvent = $.Event(Event$4.HIDE, relatedTarget); - - var parent = Dropdown._getParentFromElement(this._element); - - $(parent).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - return; - } - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$4); - $(this._element).off(EVENT_KEY$4); - this._element = null; - this._menu = null; - - if (this._popper !== null) { - this._popper.destroy(); - - this._popper = null; - } - }; - - _proto.update = function update() { - this._inNavbar = this._detectNavbar(); - - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - } // Private - ; - - _proto._addEventListeners = function _addEventListeners() { - var _this = this; - - $(this._element).on(Event$4.CLICK, function (event) { - event.preventDefault(); - event.stopPropagation(); - - _this.toggle(); - }); - }; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config); - Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); - return config; - }; - - _proto._getMenuElement = function _getMenuElement() { - if (!this._menu) { - var parent = Dropdown._getParentFromElement(this._element); - - if (parent) { - this._menu = parent.querySelector(Selector$4.MENU); - } - } - - return this._menu; - }; - - _proto._getPlacement = function _getPlacement() { - var $parentDropdown = $(this._element.parentNode); - var placement = AttachmentMap.BOTTOM; // Handle dropup - - if ($parentDropdown.hasClass(ClassName$4.DROPUP)) { - placement = AttachmentMap.TOP; - - if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { - placement = AttachmentMap.TOPEND; - } - } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) { - placement = AttachmentMap.RIGHT; - } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) { - placement = AttachmentMap.LEFT; - } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { - placement = AttachmentMap.BOTTOMEND; - } - - return placement; - }; - - _proto._detectNavbar = function _detectNavbar() { - return $(this._element).closest('.navbar').length > 0; - }; - - _proto._getOffset = function _getOffset() { - var _this2 = this; - - var offset = {}; - - if (typeof this._config.offset === 'function') { - offset.fn = function (data) { - data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {}); - return data; - }; - } else { - offset.offset = this._config.offset; - } - - return offset; - }; - - _proto._getPopperConfig = function _getPopperConfig() { - var popperConfig = { - placement: this._getPlacement(), - modifiers: { - offset: this._getOffset(), - flip: { - enabled: this._config.flip - }, - preventOverflow: { - boundariesElement: this._config.boundary - } - } // Disable Popper.js if we have a static display - - }; - - if (this._config.display === 'static') { - popperConfig.modifiers.applyStyle = { - enabled: false - }; - } - - return popperConfig; - } // Static - ; - - Dropdown._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$4); - - var _config = typeof config === 'object' ? config : null; - - if (!data) { - data = new Dropdown(this, _config); - $(this).data(DATA_KEY$4, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - Dropdown._clearMenus = function _clearMenus(event) { - if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { - return; - } - - var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE)); - - for (var i = 0, len = toggles.length; i < len; i++) { - var parent = Dropdown._getParentFromElement(toggles[i]); - - var context = $(toggles[i]).data(DATA_KEY$4); - var relatedTarget = { - relatedTarget: toggles[i] - }; - - if (event && event.type === 'click') { - relatedTarget.clickEvent = event; - } - - if (!context) { - continue; - } - - var dropdownMenu = context._menu; - - if (!$(parent).hasClass(ClassName$4.SHOW)) { - continue; - } - - if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { - continue; - } - - var hideEvent = $.Event(Event$4.HIDE, relatedTarget); - $(parent).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - continue; - } // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().off('mouseover', null, $.noop); - } - - toggles[i].setAttribute('aria-expanded', 'false'); - $(dropdownMenu).removeClass(ClassName$4.SHOW); - $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); - } - }; - - Dropdown._getParentFromElement = function _getParentFromElement(element) { - var parent; - var selector = Util.getSelectorFromElement(element); - - if (selector) { - parent = document.querySelector(selector); - } - - return parent || element.parentNode; - } // eslint-disable-next-line complexity - ; - - Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { - // If not input/textarea: - // - And not a key in REGEXP_KEYDOWN => not a dropdown command - // If input/textarea: - // - If space key => not a dropdown command - // - If key is other than escape - // - If key is not up or down => not a dropdown command - // - If trigger inside the menu => not a dropdown command - if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { - return; - } - - event.preventDefault(); - event.stopPropagation(); - - if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) { - return; - } - - var parent = Dropdown._getParentFromElement(this); - - var isActive = $(parent).hasClass(ClassName$4.SHOW); - - if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { - if (event.which === ESCAPE_KEYCODE) { - var toggle = parent.querySelector(Selector$4.DATA_TOGGLE); - $(toggle).trigger('focus'); - } - - $(this).trigger('click'); - return; - } - - var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)); - - if (items.length === 0) { - return; - } - - var index = items.indexOf(event.target); - - if (event.which === ARROW_UP_KEYCODE && index > 0) { - // Up - index--; - } - - if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { - // Down - index++; - } - - if (index < 0) { - index = 0; - } - - items[index].focus(); - }; - - _createClass(Dropdown, null, [{ - key: "VERSION", - get: function get() { - return VERSION$4; - } - }, { - key: "Default", - get: function get() { - return Default$2; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$2; - } - }]); - - return Dropdown; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) { - event.preventDefault(); - event.stopPropagation(); - - Dropdown._jQueryInterface.call($(this), 'toggle'); - }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) { - e.stopPropagation(); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$4] = Dropdown._jQueryInterface; - $.fn[NAME$4].Constructor = Dropdown; - - $.fn[NAME$4].noConflict = function () { - $.fn[NAME$4] = JQUERY_NO_CONFLICT$4; - return Dropdown._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$5 = 'modal'; - var VERSION$5 = '4.3.1'; - var DATA_KEY$5 = 'bs.modal'; - var EVENT_KEY$5 = "." + DATA_KEY$5; - var DATA_API_KEY$5 = '.data-api'; - var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5]; - var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key - - var Default$3 = { - backdrop: true, - keyboard: true, - focus: true, - show: true - }; - var DefaultType$3 = { - backdrop: '(boolean|string)', - keyboard: 'boolean', - focus: 'boolean', - show: 'boolean' - }; - var Event$5 = { - HIDE: "hide" + EVENT_KEY$5, - HIDDEN: "hidden" + EVENT_KEY$5, - SHOW: "show" + EVENT_KEY$5, - SHOWN: "shown" + EVENT_KEY$5, - FOCUSIN: "focusin" + EVENT_KEY$5, - RESIZE: "resize" + EVENT_KEY$5, - CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5, - KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5, - MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5, - MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5, - CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5 - }; - var ClassName$5 = { - SCROLLABLE: 'modal-dialog-scrollable', - SCROLLBAR_MEASURER: 'modal-scrollbar-measure', - BACKDROP: 'modal-backdrop', - OPEN: 'modal-open', - FADE: 'fade', - SHOW: 'show' - }; - var Selector$5 = { - DIALOG: '.modal-dialog', - MODAL_BODY: '.modal-body', - DATA_TOGGLE: '[data-toggle="modal"]', - DATA_DISMISS: '[data-dismiss="modal"]', - FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', - STICKY_CONTENT: '.sticky-top' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Modal = - /*#__PURE__*/ - function () { - function Modal(element, config) { - this._config = this._getConfig(config); - this._element = element; - this._dialog = element.querySelector(Selector$5.DIALOG); - this._backdrop = null; - this._isShown = false; - this._isBodyOverflowing = false; - this._ignoreBackdropClick = false; - this._isTransitioning = false; - this._scrollbarWidth = 0; - } // Getters - - - var _proto = Modal.prototype; - - // Public - _proto.toggle = function toggle(relatedTarget) { - return this._isShown ? this.hide() : this.show(relatedTarget); - }; - - _proto.show = function show(relatedTarget) { - var _this = this; - - if (this._isShown || this._isTransitioning) { - return; - } - - if ($(this._element).hasClass(ClassName$5.FADE)) { - this._isTransitioning = true; - } - - var showEvent = $.Event(Event$5.SHOW, { - relatedTarget: relatedTarget - }); - $(this._element).trigger(showEvent); - - if (this._isShown || showEvent.isDefaultPrevented()) { - return; - } - - this._isShown = true; - - this._checkScrollbar(); - - this._setScrollbar(); - - this._adjustDialog(); - - this._setEscapeEvent(); - - this._setResizeEvent(); - - $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) { - return _this.hide(event); - }); - $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () { - $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) { - if ($(event.target).is(_this._element)) { - _this._ignoreBackdropClick = true; - } - }); - }); - - this._showBackdrop(function () { - return _this._showElement(relatedTarget); - }); - }; - - _proto.hide = function hide(event) { - var _this2 = this; - - if (event) { - event.preventDefault(); - } - - if (!this._isShown || this._isTransitioning) { - return; - } - - var hideEvent = $.Event(Event$5.HIDE); - $(this._element).trigger(hideEvent); - - if (!this._isShown || hideEvent.isDefaultPrevented()) { - return; - } - - this._isShown = false; - var transition = $(this._element).hasClass(ClassName$5.FADE); - - if (transition) { - this._isTransitioning = true; - } - - this._setEscapeEvent(); - - this._setResizeEvent(); - - $(document).off(Event$5.FOCUSIN); - $(this._element).removeClass(ClassName$5.SHOW); - $(this._element).off(Event$5.CLICK_DISMISS); - $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS); - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, function (event) { - return _this2._hideModal(event); - }).emulateTransitionEnd(transitionDuration); - } else { - this._hideModal(); - } - }; - - _proto.dispose = function dispose() { - [window, this._element, this._dialog].forEach(function (htmlElement) { - return $(htmlElement).off(EVENT_KEY$5); - }); - /** - * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` - * Do not move `document` in `htmlElements` array - * It will remove `Event.CLICK_DATA_API` event that should remain - */ - - $(document).off(Event$5.FOCUSIN); - $.removeData(this._element, DATA_KEY$5); - this._config = null; - this._element = null; - this._dialog = null; - this._backdrop = null; - this._isShown = null; - this._isBodyOverflowing = null; - this._ignoreBackdropClick = null; - this._isTransitioning = null; - this._scrollbarWidth = null; - }; - - _proto.handleUpdate = function handleUpdate() { - this._adjustDialog(); - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default$3, config); - Util.typeCheckConfig(NAME$5, config, DefaultType$3); - return config; - }; - - _proto._showElement = function _showElement(relatedTarget) { - var _this3 = this; - - var transition = $(this._element).hasClass(ClassName$5.FADE); - - if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { - // Don't move modal's DOM position - document.body.appendChild(this._element); - } - - this._element.style.display = 'block'; - - this._element.removeAttribute('aria-hidden'); - - this._element.setAttribute('aria-modal', true); - - if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) { - this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0; - } else { - this._element.scrollTop = 0; - } - - if (transition) { - Util.reflow(this._element); - } - - $(this._element).addClass(ClassName$5.SHOW); - - if (this._config.focus) { - this._enforceFocus(); - } - - var shownEvent = $.Event(Event$5.SHOWN, { - relatedTarget: relatedTarget - }); - - var transitionComplete = function transitionComplete() { - if (_this3._config.focus) { - _this3._element.focus(); - } - - _this3._isTransitioning = false; - $(_this3._element).trigger(shownEvent); - }; - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); - $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); - } else { - transitionComplete(); - } - }; - - _proto._enforceFocus = function _enforceFocus() { - var _this4 = this; - - $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop - .on(Event$5.FOCUSIN, function (event) { - if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) { - _this4._element.focus(); - } - }); - }; - - _proto._setEscapeEvent = function _setEscapeEvent() { - var _this5 = this; - - if (this._isShown && this._config.keyboard) { - $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) { - if (event.which === ESCAPE_KEYCODE$1) { - event.preventDefault(); - - _this5.hide(); - } - }); - } else if (!this._isShown) { - $(this._element).off(Event$5.KEYDOWN_DISMISS); - } - }; - - _proto._setResizeEvent = function _setResizeEvent() { - var _this6 = this; - - if (this._isShown) { - $(window).on(Event$5.RESIZE, function (event) { - return _this6.handleUpdate(event); - }); - } else { - $(window).off(Event$5.RESIZE); - } - }; - - _proto._hideModal = function _hideModal() { - var _this7 = this; - - this._element.style.display = 'none'; - - this._element.setAttribute('aria-hidden', true); - - this._element.removeAttribute('aria-modal'); - - this._isTransitioning = false; - - this._showBackdrop(function () { - $(document.body).removeClass(ClassName$5.OPEN); - - _this7._resetAdjustments(); - - _this7._resetScrollbar(); - - $(_this7._element).trigger(Event$5.HIDDEN); - }); - }; - - _proto._removeBackdrop = function _removeBackdrop() { - if (this._backdrop) { - $(this._backdrop).remove(); - this._backdrop = null; - } - }; - - _proto._showBackdrop = function _showBackdrop(callback) { - var _this8 = this; - - var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : ''; - - if (this._isShown && this._config.backdrop) { - this._backdrop = document.createElement('div'); - this._backdrop.className = ClassName$5.BACKDROP; - - if (animate) { - this._backdrop.classList.add(animate); - } - - $(this._backdrop).appendTo(document.body); - $(this._element).on(Event$5.CLICK_DISMISS, function (event) { - if (_this8._ignoreBackdropClick) { - _this8._ignoreBackdropClick = false; - return; - } - - if (event.target !== event.currentTarget) { - return; - } - - if (_this8._config.backdrop === 'static') { - _this8._element.focus(); - } else { - _this8.hide(); - } - }); - - if (animate) { - Util.reflow(this._backdrop); - } - - $(this._backdrop).addClass(ClassName$5.SHOW); - - if (!callback) { - return; - } - - if (!animate) { - callback(); - return; - } - - var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); - } else if (!this._isShown && this._backdrop) { - $(this._backdrop).removeClass(ClassName$5.SHOW); - - var callbackRemove = function callbackRemove() { - _this8._removeBackdrop(); - - if (callback) { - callback(); - } - }; - - if ($(this._element).hasClass(ClassName$5.FADE)) { - var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - - $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); - } else { - callbackRemove(); - } - } else if (callback) { - callback(); - } - } // ---------------------------------------------------------------------- - // the following methods are used to handle overflowing modals - // todo (fat): these should probably be refactored out of modal.js - // ---------------------------------------------------------------------- - ; - - _proto._adjustDialog = function _adjustDialog() { - var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; - - if (!this._isBodyOverflowing && isModalOverflowing) { - this._element.style.paddingLeft = this._scrollbarWidth + "px"; - } - - if (this._isBodyOverflowing && !isModalOverflowing) { - this._element.style.paddingRight = this._scrollbarWidth + "px"; - } - }; - - _proto._resetAdjustments = function _resetAdjustments() { - this._element.style.paddingLeft = ''; - this._element.style.paddingRight = ''; - }; - - _proto._checkScrollbar = function _checkScrollbar() { - var rect = document.body.getBoundingClientRect(); - this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; - this._scrollbarWidth = this._getScrollbarWidth(); - }; - - _proto._setScrollbar = function _setScrollbar() { - var _this9 = this; - - if (this._isBodyOverflowing) { - // Note: DOMNode.style.paddingRight returns the actual value or '' if not set - // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set - var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); - var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding - - $(fixedContent).each(function (index, element) { - var actualPadding = element.style.paddingRight; - var calculatedPadding = $(element).css('padding-right'); - $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); - }); // Adjust sticky content margin - - $(stickyContent).each(function (index, element) { - var actualMargin = element.style.marginRight; - var calculatedMargin = $(element).css('margin-right'); - $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); - }); // Adjust body padding - - var actualPadding = document.body.style.paddingRight; - var calculatedPadding = $(document.body).css('padding-right'); - $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); - } - - $(document.body).addClass(ClassName$5.OPEN); - }; - - _proto._resetScrollbar = function _resetScrollbar() { - // Restore fixed content padding - var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); - $(fixedContent).each(function (index, element) { - var padding = $(element).data('padding-right'); - $(element).removeData('padding-right'); - element.style.paddingRight = padding ? padding : ''; - }); // Restore sticky content - - var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT)); - $(elements).each(function (index, element) { - var margin = $(element).data('margin-right'); - - if (typeof margin !== 'undefined') { - $(element).css('margin-right', margin).removeData('margin-right'); - } - }); // Restore body padding - - var padding = $(document.body).data('padding-right'); - $(document.body).removeData('padding-right'); - document.body.style.paddingRight = padding ? padding : ''; - }; - - _proto._getScrollbarWidth = function _getScrollbarWidth() { - // thx d.walsh - var scrollDiv = document.createElement('div'); - scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER; - document.body.appendChild(scrollDiv); - var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; - document.body.removeChild(scrollDiv); - return scrollbarWidth; - } // Static - ; - - Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { - return this.each(function () { - var data = $(this).data(DATA_KEY$5); - - var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {}); - - if (!data) { - data = new Modal(this, _config); - $(this).data(DATA_KEY$5, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](relatedTarget); - } else if (_config.show) { - data.show(relatedTarget); - } - }); - }; - - _createClass(Modal, null, [{ - key: "VERSION", - get: function get() { - return VERSION$5; - } - }, { - key: "Default", - get: function get() { - return Default$3; - } - }]); - - return Modal; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) { - var _this10 = this; - - var target; - var selector = Util.getSelectorFromElement(this); - - if (selector) { - target = document.querySelector(selector); - } - - var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data()); - - if (this.tagName === 'A' || this.tagName === 'AREA') { - event.preventDefault(); - } - - var $target = $(target).one(Event$5.SHOW, function (showEvent) { - if (showEvent.isDefaultPrevented()) { - // Only register focus restorer if modal will actually get shown - return; - } - - $target.one(Event$5.HIDDEN, function () { - if ($(_this10).is(':visible')) { - _this10.focus(); - } - }); - }); - - Modal._jQueryInterface.call($(target), config, this); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$5] = Modal._jQueryInterface; - $.fn[NAME$5].Constructor = Modal; - - $.fn[NAME$5].noConflict = function () { - $.fn[NAME$5] = JQUERY_NO_CONFLICT$5; - return Modal._jQueryInterface; - }; - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.3.1): tools/sanitizer.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; - var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; - var DefaultWhitelist = { - // Global attributes allowed on any supplied element below. - '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], - a: ['target', 'href', 'title', 'rel'], - area: [], - b: [], - br: [], - col: [], - code: [], - div: [], - em: [], - hr: [], - h1: [], - h2: [], - h3: [], - h4: [], - h5: [], - h6: [], - i: [], - img: ['src', 'alt', 'title', 'width', 'height'], - li: [], - ol: [], - p: [], - pre: [], - s: [], - small: [], - span: [], - sub: [], - sup: [], - strong: [], - u: [], - ul: [] - /** - * A pattern that recognizes a commonly useful subset of URLs that are safe. - * - * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts - */ - - }; - var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi; - /** - * A pattern that matches safe data URLs. Only matches image, video and audio types. - * - * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts - */ - - var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i; - - function allowedAttribute(attr, allowedAttributeList) { - var attrName = attr.nodeName.toLowerCase(); - - if (allowedAttributeList.indexOf(attrName) !== -1) { - if (uriAttrs.indexOf(attrName) !== -1) { - return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)); - } - - return true; - } - - var regExp = allowedAttributeList.filter(function (attrRegex) { - return attrRegex instanceof RegExp; - }); // Check if a regular expression validates the attribute. - - for (var i = 0, l = regExp.length; i < l; i++) { - if (attrName.match(regExp[i])) { - return true; - } - } - - return false; - } - - function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { - if (unsafeHtml.length === 0) { - return unsafeHtml; - } - - if (sanitizeFn && typeof sanitizeFn === 'function') { - return sanitizeFn(unsafeHtml); - } - - var domParser = new window.DOMParser(); - var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); - var whitelistKeys = Object.keys(whiteList); - var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); - - var _loop = function _loop(i, len) { - var el = elements[i]; - var elName = el.nodeName.toLowerCase(); - - if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { - el.parentNode.removeChild(el); - return "continue"; - } - - var attributeList = [].slice.call(el.attributes); - var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); - attributeList.forEach(function (attr) { - if (!allowedAttribute(attr, whitelistedAttributes)) { - el.removeAttribute(attr.nodeName); - } - }); - }; - - for (var i = 0, len = elements.length; i < len; i++) { - var _ret = _loop(i, len); - - if (_ret === "continue") continue; - } - - return createdDocument.body.innerHTML; - } - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$6 = 'tooltip'; - var VERSION$6 = '4.3.1'; - var DATA_KEY$6 = 'bs.tooltip'; - var EVENT_KEY$6 = "." + DATA_KEY$6; - var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; - var CLASS_PREFIX = 'bs-tooltip'; - var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); - var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; - var DefaultType$4 = { - animation: 'boolean', - template: 'string', - title: '(string|element|function)', - trigger: 'string', - delay: '(number|object)', - html: 'boolean', - selector: '(string|boolean)', - placement: '(string|function)', - offset: '(number|string|function)', - container: '(string|element|boolean)', - fallbackPlacement: '(string|array)', - boundary: '(string|element)', - sanitize: 'boolean', - sanitizeFn: '(null|function)', - whiteList: 'object' - }; - var AttachmentMap$1 = { - AUTO: 'auto', - TOP: 'top', - RIGHT: 'right', - BOTTOM: 'bottom', - LEFT: 'left' - }; - var Default$4 = { - animation: true, - template: '', - trigger: 'hover focus', - title: '', - delay: 0, - html: false, - selector: false, - placement: 'top', - offset: 0, - container: false, - fallbackPlacement: 'flip', - boundary: 'scrollParent', - sanitize: true, - sanitizeFn: null, - whiteList: DefaultWhitelist - }; - var HoverState = { - SHOW: 'show', - OUT: 'out' - }; - var Event$6 = { - HIDE: "hide" + EVENT_KEY$6, - HIDDEN: "hidden" + EVENT_KEY$6, - SHOW: "show" + EVENT_KEY$6, - SHOWN: "shown" + EVENT_KEY$6, - INSERTED: "inserted" + EVENT_KEY$6, - CLICK: "click" + EVENT_KEY$6, - FOCUSIN: "focusin" + EVENT_KEY$6, - FOCUSOUT: "focusout" + EVENT_KEY$6, - MOUSEENTER: "mouseenter" + EVENT_KEY$6, - MOUSELEAVE: "mouseleave" + EVENT_KEY$6 - }; - var ClassName$6 = { - FADE: 'fade', - SHOW: 'show' - }; - var Selector$6 = { - TOOLTIP: '.tooltip', - TOOLTIP_INNER: '.tooltip-inner', - ARROW: '.arrow' - }; - var Trigger = { - HOVER: 'hover', - FOCUS: 'focus', - CLICK: 'click', - MANUAL: 'manual' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Tooltip = - /*#__PURE__*/ - function () { - function Tooltip(element, config) { - /** - * Check for Popper dependency - * Popper - https://popper.js.org - */ - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); - } // private - - - this._isEnabled = true; - this._timeout = 0; - this._hoverState = ''; - this._activeTrigger = {}; - this._popper = null; // Protected - - this.element = element; - this.config = this._getConfig(config); - this.tip = null; - - this._setListeners(); - } // Getters - - - var _proto = Tooltip.prototype; - - // Public - _proto.enable = function enable() { - this._isEnabled = true; - }; - - _proto.disable = function disable() { - this._isEnabled = false; - }; - - _proto.toggleEnabled = function toggleEnabled() { - this._isEnabled = !this._isEnabled; - }; - - _proto.toggle = function toggle(event) { - if (!this._isEnabled) { - return; - } - - if (event) { - var dataKey = this.constructor.DATA_KEY; - var context = $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - context._activeTrigger.click = !context._activeTrigger.click; - - if (context._isWithActiveTrigger()) { - context._enter(null, context); - } else { - context._leave(null, context); - } - } else { - if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) { - this._leave(null, this); - - return; - } - - this._enter(null, this); - } - }; - - _proto.dispose = function dispose() { - clearTimeout(this._timeout); - $.removeData(this.element, this.constructor.DATA_KEY); - $(this.element).off(this.constructor.EVENT_KEY); - $(this.element).closest('.modal').off('hide.bs.modal'); - - if (this.tip) { - $(this.tip).remove(); - } - - this._isEnabled = null; - this._timeout = null; - this._hoverState = null; - this._activeTrigger = null; - - if (this._popper !== null) { - this._popper.destroy(); - } - - this._popper = null; - this.element = null; - this.config = null; - this.tip = null; - }; - - _proto.show = function show() { - var _this = this; - - if ($(this.element).css('display') === 'none') { - throw new Error('Please use show on visible elements'); - } - - var showEvent = $.Event(this.constructor.Event.SHOW); - - if (this.isWithContent() && this._isEnabled) { - $(this.element).trigger(showEvent); - var shadowRoot = Util.findShadowRoot(this.element); - var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); - - if (showEvent.isDefaultPrevented() || !isInTheDom) { - return; - } - - var tip = this.getTipElement(); - var tipId = Util.getUID(this.constructor.NAME); - tip.setAttribute('id', tipId); - this.element.setAttribute('aria-describedby', tipId); - this.setContent(); - - if (this.config.animation) { - $(tip).addClass(ClassName$6.FADE); - } - - var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; - - var attachment = this._getAttachment(placement); - - this.addAttachmentClass(attachment); - - var container = this._getContainer(); - - $(tip).data(this.constructor.DATA_KEY, this); - - if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { - $(tip).appendTo(container); - } - - $(this.element).trigger(this.constructor.Event.INSERTED); - this._popper = new Popper(this.element, tip, { - placement: attachment, - modifiers: { - offset: this._getOffset(), - flip: { - behavior: this.config.fallbackPlacement - }, - arrow: { - element: Selector$6.ARROW - }, - preventOverflow: { - boundariesElement: this.config.boundary - } - }, - onCreate: function onCreate(data) { - if (data.originalPlacement !== data.placement) { - _this._handlePopperPlacementChange(data); - } - }, - onUpdate: function onUpdate(data) { - return _this._handlePopperPlacementChange(data); - } - }); - $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().on('mouseover', null, $.noop); - } - - var complete = function complete() { - if (_this.config.animation) { - _this._fixTransition(); - } - - var prevHoverState = _this._hoverState; - _this._hoverState = null; - $(_this.element).trigger(_this.constructor.Event.SHOWN); - - if (prevHoverState === HoverState.OUT) { - _this._leave(null, _this); - } - }; - - if ($(this.tip).hasClass(ClassName$6.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(this.tip); - $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } - } - }; - - _proto.hide = function hide(callback) { - var _this2 = this; - - var tip = this.getTipElement(); - var hideEvent = $.Event(this.constructor.Event.HIDE); - - var complete = function complete() { - if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { - tip.parentNode.removeChild(tip); - } - - _this2._cleanTipClass(); - - _this2.element.removeAttribute('aria-describedby'); - - $(_this2.element).trigger(_this2.constructor.Event.HIDDEN); - - if (_this2._popper !== null) { - _this2._popper.destroy(); - } - - if (callback) { - callback(); - } - }; - - $(this.element).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - return; - } - - $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().off('mouseover', null, $.noop); - } - - this._activeTrigger[Trigger.CLICK] = false; - this._activeTrigger[Trigger.FOCUS] = false; - this._activeTrigger[Trigger.HOVER] = false; - - if ($(this.tip).hasClass(ClassName$6.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(tip); - $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } - - this._hoverState = ''; - }; - - _proto.update = function update() { - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - } // Protected - ; - - _proto.isWithContent = function isWithContent() { - return Boolean(this.getTitle()); - }; - - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); - }; - - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $(this.config.template)[0]; - return this.tip; - }; - - _proto.setContent = function setContent() { - var tip = this.getTipElement(); - this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle()); - $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW); - }; - - _proto.setElementContent = function setElementContent($element, content) { - if (typeof content === 'object' && (content.nodeType || content.jquery)) { - // Content is a DOM node or a jQuery - if (this.config.html) { - if (!$(content).parent().is($element)) { - $element.empty().append(content); - } - } else { - $element.text($(content).text()); - } - - return; - } - - if (this.config.html) { - if (this.config.sanitize) { - content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); - } - - $element.html(content); - } else { - $element.text(content); - } - }; - - _proto.getTitle = function getTitle() { - var title = this.element.getAttribute('data-original-title'); - - if (!title) { - title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; - } - - return title; - } // Private - ; - - _proto._getOffset = function _getOffset() { - var _this3 = this; - - var offset = {}; - - if (typeof this.config.offset === 'function') { - offset.fn = function (data) { - data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {}); - return data; - }; - } else { - offset.offset = this.config.offset; - } - - return offset; - }; - - _proto._getContainer = function _getContainer() { - if (this.config.container === false) { - return document.body; - } - - if (Util.isElement(this.config.container)) { - return $(this.config.container); - } - - return $(document).find(this.config.container); - }; - - _proto._getAttachment = function _getAttachment(placement) { - return AttachmentMap$1[placement.toUpperCase()]; - }; - - _proto._setListeners = function _setListeners() { - var _this4 = this; - - var triggers = this.config.trigger.split(' '); - triggers.forEach(function (trigger) { - if (trigger === 'click') { - $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) { - return _this4.toggle(event); - }); - } else if (trigger !== Trigger.MANUAL) { - var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN; - var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT; - $(_this4.element).on(eventIn, _this4.config.selector, function (event) { - return _this4._enter(event); - }).on(eventOut, _this4.config.selector, function (event) { - return _this4._leave(event); - }); - } - }); - $(this.element).closest('.modal').on('hide.bs.modal', function () { - if (_this4.element) { - _this4.hide(); - } - }); - - if (this.config.selector) { - this.config = _objectSpread({}, this.config, { - trigger: 'manual', - selector: '' - }); - } else { - this._fixTitle(); - } - }; - - _proto._fixTitle = function _fixTitle() { - var titleType = typeof this.element.getAttribute('data-original-title'); - - if (this.element.getAttribute('title') || titleType !== 'string') { - this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); - this.element.setAttribute('title', ''); - } - }; - - _proto._enter = function _enter(event, context) { - var dataKey = this.constructor.DATA_KEY; - context = context || $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - if (event) { - context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; - } - - if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) { - context._hoverState = HoverState.SHOW; - return; - } - - clearTimeout(context._timeout); - context._hoverState = HoverState.SHOW; - - if (!context.config.delay || !context.config.delay.show) { - context.show(); - return; - } - - context._timeout = setTimeout(function () { - if (context._hoverState === HoverState.SHOW) { - context.show(); - } - }, context.config.delay.show); - }; - - _proto._leave = function _leave(event, context) { - var dataKey = this.constructor.DATA_KEY; - context = context || $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - if (event) { - context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; - } - - if (context._isWithActiveTrigger()) { - return; - } - - clearTimeout(context._timeout); - context._hoverState = HoverState.OUT; - - if (!context.config.delay || !context.config.delay.hide) { - context.hide(); - return; - } - - context._timeout = setTimeout(function () { - if (context._hoverState === HoverState.OUT) { - context.hide(); - } - }, context.config.delay.hide); - }; - - _proto._isWithActiveTrigger = function _isWithActiveTrigger() { - for (var trigger in this._activeTrigger) { - if (this._activeTrigger[trigger]) { - return true; - } - } - - return false; - }; - - _proto._getConfig = function _getConfig(config) { - var dataAttributes = $(this.element).data(); - Object.keys(dataAttributes).forEach(function (dataAttr) { - if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { - delete dataAttributes[dataAttr]; - } - }); - config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {}); - - if (typeof config.delay === 'number') { - config.delay = { - show: config.delay, - hide: config.delay - }; - } - - if (typeof config.title === 'number') { - config.title = config.title.toString(); - } - - if (typeof config.content === 'number') { - config.content = config.content.toString(); - } - - Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); - - if (config.sanitize) { - config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); - } - - return config; - }; - - _proto._getDelegateConfig = function _getDelegateConfig() { - var config = {}; - - if (this.config) { - for (var key in this.config) { - if (this.constructor.Default[key] !== this.config[key]) { - config[key] = this.config[key]; - } - } - } - - return config; - }; - - _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); - - if (tabClass !== null && tabClass.length) { - $tip.removeClass(tabClass.join('')); - } - }; - - _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { - var popperInstance = popperData.instance; - this.tip = popperInstance.popper; - - this._cleanTipClass(); - - this.addAttachmentClass(this._getAttachment(popperData.placement)); - }; - - _proto._fixTransition = function _fixTransition() { - var tip = this.getTipElement(); - var initConfigAnimation = this.config.animation; - - if (tip.getAttribute('x-placement') !== null) { - return; - } - - $(tip).removeClass(ClassName$6.FADE); - this.config.animation = false; - this.hide(); - this.show(); - this.config.animation = initConfigAnimation; - } // Static - ; - - Tooltip._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$6); - - var _config = typeof config === 'object' && config; - - if (!data && /dispose|hide/.test(config)) { - return; - } - - if (!data) { - data = new Tooltip(this, _config); - $(this).data(DATA_KEY$6, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Tooltip, null, [{ - key: "VERSION", - get: function get() { - return VERSION$6; - } - }, { - key: "Default", - get: function get() { - return Default$4; - } - }, { - key: "NAME", - get: function get() { - return NAME$6; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY$6; - } - }, { - key: "Event", - get: function get() { - return Event$6; - } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY$6; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$4; - } - }]); - - return Tooltip; - }(); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - - $.fn[NAME$6] = Tooltip._jQueryInterface; - $.fn[NAME$6].Constructor = Tooltip; - - $.fn[NAME$6].noConflict = function () { - $.fn[NAME$6] = JQUERY_NO_CONFLICT$6; - return Tooltip._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$7 = 'popover'; - var VERSION$7 = '4.3.1'; - var DATA_KEY$7 = 'bs.popover'; - var EVENT_KEY$7 = "." + DATA_KEY$7; - var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7]; - var CLASS_PREFIX$1 = 'bs-popover'; - var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g'); - - var Default$5 = _objectSpread({}, Tooltip.Default, { - placement: 'right', - trigger: 'click', - content: '', - template: '' - }); - - var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, { - content: '(string|element|function)' - }); - - var ClassName$7 = { - FADE: 'fade', - SHOW: 'show' - }; - var Selector$7 = { - TITLE: '.popover-header', - CONTENT: '.popover-body' - }; - var Event$7 = { - HIDE: "hide" + EVENT_KEY$7, - HIDDEN: "hidden" + EVENT_KEY$7, - SHOW: "show" + EVENT_KEY$7, - SHOWN: "shown" + EVENT_KEY$7, - INSERTED: "inserted" + EVENT_KEY$7, - CLICK: "click" + EVENT_KEY$7, - FOCUSIN: "focusin" + EVENT_KEY$7, - FOCUSOUT: "focusout" + EVENT_KEY$7, - MOUSEENTER: "mouseenter" + EVENT_KEY$7, - MOUSELEAVE: "mouseleave" + EVENT_KEY$7 - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Popover = - /*#__PURE__*/ - function (_Tooltip) { - _inheritsLoose(Popover, _Tooltip); - - function Popover() { - return _Tooltip.apply(this, arguments) || this; - } - - var _proto = Popover.prototype; - - // Overrides - _proto.isWithContent = function isWithContent() { - return this.getTitle() || this._getContent(); - }; - - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $(this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment); - }; - - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $(this.config.template)[0]; - return this.tip; - }; - - _proto.setContent = function setContent() { - var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events - - this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle()); - - var content = this._getContent(); - - if (typeof content === 'function') { - content = content.call(this.element); - } - - this.setElementContent($tip.find(Selector$7.CONTENT), content); - $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW); - } // Private - ; - - _proto._getContent = function _getContent() { - return this.element.getAttribute('data-content') || this.config.content; - }; - - _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1); - - if (tabClass !== null && tabClass.length > 0) { - $tip.removeClass(tabClass.join('')); - } - } // Static - ; - - Popover._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$7); - - var _config = typeof config === 'object' ? config : null; - - if (!data && /dispose|hide/.test(config)) { - return; - } - - if (!data) { - data = new Popover(this, _config); - $(this).data(DATA_KEY$7, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Popover, null, [{ - key: "VERSION", - // Getters - get: function get() { - return VERSION$7; - } - }, { - key: "Default", - get: function get() { - return Default$5; - } - }, { - key: "NAME", - get: function get() { - return NAME$7; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY$7; - } - }, { - key: "Event", - get: function get() { - return Event$7; - } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY$7; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$5; - } - }]); - - return Popover; - }(Tooltip); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - - $.fn[NAME$7] = Popover._jQueryInterface; - $.fn[NAME$7].Constructor = Popover; - - $.fn[NAME$7].noConflict = function () { - $.fn[NAME$7] = JQUERY_NO_CONFLICT$7; - return Popover._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$8 = 'scrollspy'; - var VERSION$8 = '4.3.1'; - var DATA_KEY$8 = 'bs.scrollspy'; - var EVENT_KEY$8 = "." + DATA_KEY$8; - var DATA_API_KEY$6 = '.data-api'; - var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8]; - var Default$6 = { - offset: 10, - method: 'auto', - target: '' - }; - var DefaultType$6 = { - offset: 'number', - method: 'string', - target: '(string|element)' - }; - var Event$8 = { - ACTIVATE: "activate" + EVENT_KEY$8, - SCROLL: "scroll" + EVENT_KEY$8, - LOAD_DATA_API: "load" + EVENT_KEY$8 + DATA_API_KEY$6 - }; - var ClassName$8 = { - DROPDOWN_ITEM: 'dropdown-item', - DROPDOWN_MENU: 'dropdown-menu', - ACTIVE: 'active' - }; - var Selector$8 = { - DATA_SPY: '[data-spy="scroll"]', - ACTIVE: '.active', - NAV_LIST_GROUP: '.nav, .list-group', - NAV_LINKS: '.nav-link', - NAV_ITEMS: '.nav-item', - LIST_ITEMS: '.list-group-item', - DROPDOWN: '.dropdown', - DROPDOWN_ITEMS: '.dropdown-item', - DROPDOWN_TOGGLE: '.dropdown-toggle' - }; - var OffsetMethod = { - OFFSET: 'offset', - POSITION: 'position' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var ScrollSpy = - /*#__PURE__*/ - function () { - function ScrollSpy(element, config) { - var _this = this; - - this._element = element; - this._scrollElement = element.tagName === 'BODY' ? window : element; - this._config = this._getConfig(config); - this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS); - this._offsets = []; - this._targets = []; - this._activeTarget = null; - this._scrollHeight = 0; - $(this._scrollElement).on(Event$8.SCROLL, function (event) { - return _this._process(event); - }); - this.refresh(); - - this._process(); - } // Getters - - - var _proto = ScrollSpy.prototype; - - // Public - _proto.refresh = function refresh() { - var _this2 = this; - - var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; - var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; - var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; - this._offsets = []; - this._targets = []; - this._scrollHeight = this._getScrollHeight(); - var targets = [].slice.call(document.querySelectorAll(this._selector)); - targets.map(function (element) { - var target; - var targetSelector = Util.getSelectorFromElement(element); - - if (targetSelector) { - target = document.querySelector(targetSelector); - } - - if (target) { - var targetBCR = target.getBoundingClientRect(); - - if (targetBCR.width || targetBCR.height) { - // TODO (fat): remove sketch reliance on jQuery position/offset - return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; - } - } - - return null; - }).filter(function (item) { - return item; - }).sort(function (a, b) { - return a[0] - b[0]; - }).forEach(function (item) { - _this2._offsets.push(item[0]); - - _this2._targets.push(item[1]); - }); - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$8); - $(this._scrollElement).off(EVENT_KEY$8); - this._element = null; - this._scrollElement = null; - this._config = null; - this._selector = null; - this._offsets = null; - this._targets = null; - this._activeTarget = null; - this._scrollHeight = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {}); - - if (typeof config.target !== 'string') { - var id = $(config.target).attr('id'); - - if (!id) { - id = Util.getUID(NAME$8); - $(config.target).attr('id', id); - } - - config.target = "#" + id; - } - - Util.typeCheckConfig(NAME$8, config, DefaultType$6); - return config; - }; - - _proto._getScrollTop = function _getScrollTop() { - return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; - }; - - _proto._getScrollHeight = function _getScrollHeight() { - return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); - }; - - _proto._getOffsetHeight = function _getOffsetHeight() { - return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; - }; - - _proto._process = function _process() { - var scrollTop = this._getScrollTop() + this._config.offset; - - var scrollHeight = this._getScrollHeight(); - - var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); - - if (this._scrollHeight !== scrollHeight) { - this.refresh(); - } - - if (scrollTop >= maxScroll) { - var target = this._targets[this._targets.length - 1]; - - if (this._activeTarget !== target) { - this._activate(target); - } - - return; - } - - if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { - this._activeTarget = null; - - this._clear(); - - return; - } - - var offsetLength = this._offsets.length; - - for (var i = offsetLength; i--;) { - var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); - - if (isActiveTarget) { - this._activate(this._targets[i]); - } - } - }; - - _proto._activate = function _activate(target) { - this._activeTarget = target; - - this._clear(); - - var queries = this._selector.split(',').map(function (selector) { - return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; - }); - - var $link = $([].slice.call(document.querySelectorAll(queries.join(',')))); - - if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) { - $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE); - $link.addClass(ClassName$8.ACTIVE); - } else { - // Set triggered link as active - $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active - // With both
    ',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:vn},Ln="show",xn="out",Pn={HIDE:"hide"+Tn,HIDDEN:"hidden"+Tn,SHOW:"show"+Tn,SHOWN:"shown"+Tn,INSERTED:"inserted"+Tn,CLICK:"click"+Tn,FOCUSIN:"focusin"+Tn,FOCUSOUT:"focusout"+Tn,MOUSEENTER:"mouseenter"+Tn,MOUSELEAVE:"mouseleave"+Tn},Hn="fade",jn="show",Rn=".tooltip-inner",Fn=".arrow",Mn="hover",Wn="focus",Un="click",Bn="manual",qn=function(){function i(t,e){if("undefined"==typeof be)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=p(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p(this.getTipElement()).hasClass(jn))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),p.removeData(this.element,this.constructor.DATA_KEY),p(this.element).off(this.constructor.EVENT_KEY),p(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&p(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===p(this.element).css("display"))throw new Error("Please use show on visible elements");var t=p.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p(this.element).trigger(t);var n=m.findShadowRoot(this.element),i=p.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=m.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&p(o).addClass(Hn);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();p(o).data(this.constructor.DATA_KEY,this),p.contains(this.element.ownerDocument.documentElement,this.tip)||p(o).appendTo(l),p(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new be(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Fn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),p(o).addClass(jn),"ontouchstart"in document.documentElement&&p(document.body).children().on("mouseover",null,p.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,p(e.element).trigger(e.constructor.Event.SHOWN),t===xn&&e._leave(null,e)};if(p(this.tip).hasClass(Hn)){var h=m.getTransitionDurationFromElement(this.tip);p(this.tip).one(m.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=p.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==Ln&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),p(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(p(this.element).trigger(i),!i.isDefaultPrevented()){if(p(n).removeClass(jn),"ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),this._activeTrigger[Un]=!1,this._activeTrigger[Wn]=!1,this._activeTrigger[Mn]=!1,p(this.tip).hasClass(Hn)){var r=m.getTransitionDurationFromElement(n);p(n).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){p(this.getTipElement()).addClass(Dn+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(p(t.querySelectorAll(Rn)),this.getTitle()),p(t).removeClass(Hn+" "+jn)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=bn(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?p(e).parent().is(t)||t.empty().append(e):t.text(p(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:m.isElement(this.config.container)?p(this.config.container):p(document).find(this.config.container)},t._getAttachment=function(t){return Nn[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)p(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Bn){var e=t===Mn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Mn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;p(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),p(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Wn:Mn]=!0),p(e.getTipElement()).hasClass(jn)||e._hoverState===Ln?e._hoverState=Ln:(clearTimeout(e._timeout),e._hoverState=Ln,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Ln&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Wn:Mn]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=xn,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===xn&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=p(this.element).data();return Object.keys(e).forEach(function(t){-1!==An.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),m.typeCheckConfig(wn,t,this.constructor.DefaultType),t.sanitize&&(t.template=bn(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=p(this.getTipElement()),e=t.attr("class").match(In);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(p(t).removeClass(Hn),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=p(this).data(Cn),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),p(this).data(Cn,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return kn}},{key:"NAME",get:function(){return wn}},{key:"DATA_KEY",get:function(){return Cn}},{key:"Event",get:function(){return Pn}},{key:"EVENT_KEY",get:function(){return Tn}},{key:"DefaultType",get:function(){return On}}]),i}();p.fn[wn]=qn._jQueryInterface,p.fn[wn].Constructor=qn,p.fn[wn].noConflict=function(){return p.fn[wn]=Sn,qn._jQueryInterface};var Kn="popover",Qn="bs.popover",Vn="."+Qn,Yn=p.fn[Kn],zn="bs-popover",Xn=new RegExp("(^|\\s)"+zn+"\\S+","g"),Gn=l({},qn.Default,{placement:"right",trigger:"click",content:"",template:''}),$n=l({},qn.DefaultType,{content:"(string|element|function)"}),Jn="fade",Zn="show",ti=".popover-header",ei=".popover-body",ni={HIDE:"hide"+Vn,HIDDEN:"hidden"+Vn,SHOW:"show"+Vn,SHOWN:"shown"+Vn,INSERTED:"inserted"+Vn,CLICK:"click"+Vn,FOCUSIN:"focusin"+Vn,FOCUSOUT:"focusout"+Vn,MOUSEENTER:"mouseenter"+Vn,MOUSELEAVE:"mouseleave"+Vn},ii=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){p(this.getTipElement()).addClass(zn+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},o.setContent=function(){var t=p(this.getTipElement());this.setElementContent(t.find(ti),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ei),e),t.removeClass(Jn+" "+Zn)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=p(this.getTipElement()),e=t.attr("class").match(Xn);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (err) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n }\n}\n\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n}\n\nconst Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n}\n\nconst Selector = {\n DATA_TOGGLE_CARROT : '[data-toggle^=\"button\"]',\n DATA_TOGGLE : '[data-toggle=\"buttons\"]',\n INPUT : 'input:not([type=\"hidden\"])',\n ACTIVE : '.active',\n BUTTON : '.btn'\n}\n\nconst Event = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n Selector.DATA_TOGGLE\n )[0]\n\n if (rootElement) {\n const input = this._element.querySelector(Selector.INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(Selector.ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') ||\n rootElement.hasAttribute('disabled') ||\n input.classList.contains('disabled') ||\n rootElement.classList.contains('disabled')) {\n return\n }\n input.checked = !this._element.classList.contains(ClassName.ACTIVE)\n $(input).trigger('change')\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed',\n !this._element.classList.contains(ClassName.ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE)\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n event.preventDefault()\n\n let button = event.target\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)\n }\n\n Button._jQueryInterface.call($(button), 'toggle')\n })\n .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(Selector.BUTTON)[0]\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true,\n touch : true\n}\n\nconst DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean',\n touch : 'boolean'\n}\n\nconst Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n}\n\nconst Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHSTART : `touchstart${EVENT_KEY}`,\n TOUCHMOVE : `touchmove${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n POINTERDOWN : `pointerdown${EVENT_KEY}`,\n POINTERUP : `pointerup${EVENT_KEY}`,\n DRAG_START : `dragstart${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item',\n POINTER_EVENT : 'pointer-event'\n}\n\nconst Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n ITEM_IMG : '.carousel-item img',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n}\n\nconst PointerType = {\n TOUCH : 'touch',\n PEN : 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = (event) => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, (e) => e.preventDefault())\n if (this._pointerEvent) {\n $(this._element).on(Event.POINTERDOWN, (event) => start(event))\n $(this._element).on(Event.POINTERUP, (event) => end(event))\n\n this._element.classList.add(ClassName.POINTER_EVENT)\n } else {\n $(this._element).on(Event.TOUCHSTART, (event) => start(event))\n $(this._element).on(Event.TOUCHMOVE, (event) => move(event))\n $(this._element).on(Event.TOUCHEND, (event) => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM))\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE))\n $(indicators)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(Event.LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle : true,\n parent : ''\n}\n\nconst DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n}\n\nconst Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n}\n\nconst Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n}\n\nconst Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter((foundElem) => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))\n .filter((elem) => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(ClassName.COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n const children = [].slice.call(parent.querySelectorAll(selector))\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.14.7\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
    \n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
    \n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
    \n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
    \n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
    \n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
    \n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
    \n * It will read the variation of the `placement` property.
    \n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
    \n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
    \n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
    \n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
    \n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
    \n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
    \n * These can be overridden using the `options` argument of Popper.js.
    \n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
    \n * By default, it is set to no-op.
    \n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
    \n * By default, it is set to no-op.
    \n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
    \n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n DROPRIGHT : 'dropright',\n DROPLEFT : 'dropleft',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left',\n POSITION_STATIC : 'position-static'\n}\n\nconst Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n}\n\nconst AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end',\n RIGHT : 'right-start',\n RIGHTEND : 'right-end',\n LEFT : 'left-start',\n LEFTEND : 'left-end'\n}\n\nconst Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic'\n}\n\nconst DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this._element)\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n show() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(Selector.MENU)\n }\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets, this._element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return popperConfig\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName)\n ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = parent.querySelector(Selector.DATA_TOGGLE)\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n}\n\nconst DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SCROLLABLE : 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n DIALOG : '.modal-dialog',\n MODAL_BODY : '.modal-body',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(Selector.DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach((htmlElement) => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n $(document).off(Event.FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n\n if ($(this._dialog).hasClass(ClassName.SCROLLABLE)) {\n this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(ClassName.OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter((attrRegex) => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach((attr) => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : '(number|string|function)',\n container : '(string|element|boolean)',\n fallbackPlacement : '(string|array)',\n boundary : '(string|element)',\n sanitize : 'boolean',\n sanitizeFn : '(null|function)',\n whiteList : 'object'\n}\n\nconst AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n}\n\nconst Default = {\n animation : true,\n template : '
    ' +\n '
    ' +\n '
    ',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : 0,\n container : false,\n fallbackPlacement : 'flip',\n boundary : 'scrollParent',\n sanitize : true,\n sanitizeFn : null,\n whiteList : DefaultWhitelist\n}\n\nconst HoverState = {\n SHOW : 'show',\n OUT : 'out'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\nconst ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n ARROW : '.arrow'\n}\n\nconst Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n}\n\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal')\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function'\n ? this.config.placement.call(this, tip, this.element)\n : this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: (data) => this._handlePopperPlacementChange(data)\n })\n\n $(tip).addClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function'\n ? this.config.title.call(this.element)\n : this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this.config.offset(data.offsets, this.element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSEENTER\n : this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSELEAVE\n : this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n })\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n () => {\n if (this.element) {\n this.hide()\n }\n }\n )\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach((dataAttr) => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n const popperInstance = popperData.instance\n this.tip = popperInstance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
    ' +\n '
    ' +\n '

    ' +\n '
    '\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content : '(string|element|function)'\n}\n\nconst ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n TITLE : '.popover-header',\n CONTENT : '.popover-body'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n this.setElementContent($tip.find(Selector.CONTENT), content)\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset : 10,\n method : 'auto',\n target : ''\n}\n\nconst DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n}\n\nconst Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n}\n\nconst Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n}\n\nconst OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n const offsetLength = this._offsets.length\n for (let i = offsetLength; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map((selector) => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both