diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..d398bf70b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.js] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.github/workflows/build-artifact-iota.yaml b/.github/workflows/build-artifact-iota.yaml index e974def7e..9484e8442 100644 --- a/.github/workflows/build-artifact-iota.yaml +++ b/.github/workflows/build-artifact-iota.yaml @@ -9,15 +9,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Use Node.js 14 + - name: Use Node.js 20 uses: actions/setup-node@v2 with: - node-version: '14' - - name: Install dependencies - run: cd src && yarn - - name: add webpack - run: npm link webpack - - name: Build and create zip + node-version: '20' + - name: Install dependencies && build + run: cd src && npm install && npm run build + - name: Create zip run: zip -r liebling.zip ./* -x 'node_modules/*' -x '*src*' - name: 'Upload Artifact' uses: actions/upload-artifact@v3 diff --git a/.github/workflows/build-artifact-shimmer.yaml b/.github/workflows/build-artifact-shimmer.yaml index d86e27315..85b759ed9 100644 --- a/.github/workflows/build-artifact-shimmer.yaml +++ b/.github/workflows/build-artifact-shimmer.yaml @@ -9,12 +9,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Use Node.js 14 + - name: Use Node.js 20 uses: actions/setup-node@v2 with: - node-version: '14' + node-version: '20' - name: Install dependencies && build - run: cd src && yarn && yarn build + run: cd src && npm install && npm run build - name: Create zip run: zip -r liebling.zip ./* -x 'node_modules/*' -x '*src*' - name: 'Upload Artifact' diff --git a/.gitignore b/.gitignore index b994475ab..714987967 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,6 @@ node_modules .DS_Store .idea -.vscode \ No newline at end of file +.vscode + +.nvmrc \ No newline at end of file diff --git a/README.md b/README.md index 6f59e57e0..3a3bb5178 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ If you find this theme useful, please consider to make a donation to support its Donate -## Ghost 4 +## Ghost 5 -This theme has been optimized for Ghost 4, if you are looking for a Ghost 3 compatible version please refer to [this link](https://github.com/eddiesigner/liebling/releases/tag/v.0.9.4). +This theme has been optimized for Ghost 5, if you are looking for a Ghost 4 compatible version please refer to [this link](https://github.com/eddiesigner/liebling/releases/tag/v1.5.2). ## Preview @@ -30,23 +30,34 @@ To know how to enable the search, comments, newsletter and more, please head to ### General features -* Clean and beautiful design 💅🏼 -* Lightning fast ⚡️ -* Fully responsive, looks great on any device 📱 -* Compatible with modern browsers 💻 -* Fast support 📞 +* Clean and beautiful design +* Lightning fast +* Lightweight and high performance +* Fully responsive, looks great on any device +* Compatible with modern browsers ### Ghost features -* Subscription form [more info here](https://github.com/eddiesigner/liebling/wiki/How-to-enable-subscribers) +* Subscription form * Multiple authors * Logo support * Secondary menu +* Accent color * Featured posts and pages * Post, Page, Tag, Authors, pages * Koenig editor * Bookmark card * Gallery card +* Button card +* NFT card +* Callouts +* Toggles +* Quotes +* Products +* Audio +* Video +* File uploads +* Headers * Blog title and description * Cover image for Home, Post, Page, Tag, Author pages * Author avatar, bio, location, website and social links @@ -59,6 +70,7 @@ To know how to enable the search, comments, newsletter and more, please head to * Dark mode * Search +* Custom settings * Custom Subscribe page * Custom authors page * Custom error page @@ -101,6 +113,9 @@ To know how to enable the search, comments, newsletter and more, please head to * Korean by [chocosobo](https://github.com/chocosobo) * Japanese by [ViaSnake](https://github.com/ViaSnake) * Czech by [Fjuro](https://github.com/Fjuro) +* Swedish by [momeenme](https://github.com/momeenme) +* Slovak by [jjuris](https://github.com/jjuris) +* Thai by [Parinya T.](https://github.com/pickyzz) ## Tests performed @@ -126,13 +141,19 @@ Contributions are very welcome. First, please read the [Pull Request Guidelines] ## Related +* [Glow](https://eddiesigner.gumroad.com/l/glow) - Beautiful, clean, minimalist and powerful Ghost theme perfect for writers which offers a pleasant reading experience. + +* [Bold](https://eddiesigner.gumroad.com/l/ltqtms) - Bold is a Ghost theme designed to be minimal and customizable, allowing individuals to create a sleek and modern online presence. + +* [Galerie](https://eddiesigner.gumroad.com/l/KgroF) - Modern and versatile theme that stands out for its sleek design, it's incredibly fast, it offers a great user experience and it has many options to customise it. + * [Firma](https://gum.co/ZXLha) - Ghost theme that can be used by startups to large companies to publish any kind of articles related to their business. It stands out for its clean design and is able to adapt to any company's identity. * [Weiss Pro](https://gum.co/pzvDn) - Modern and beautiful Ghost theme ready to make your content shine. ## License -Copyright (c) 2019-2020 Eduardo Gómez. Released under the [MIT license](https://github.com/eddiesigner/liebling/blob/master/LICENSE). +Copyright (c) 2019-present Eduardo Gómez. Released under the [MIT license](https://github.com/eddiesigner/liebling/blob/master/LICENSE). ## Credits diff --git a/amp.hbs b/amp.hbs new file mode 100644 index 000000000..c47e12683 --- /dev/null +++ b/amp.hbs @@ -0,0 +1,1180 @@ + + + + + + + + + {{meta_title}} + + {{amp_ghost_head}} + + + + {{!-- AMP Boilerplate --}} + + + + + + {{amp_components}} + + + + + {{#post}} + + + {{#if feature_image}} +
+ + +
+ + {{/if}} +
+
+
+

{{title}}

+ + {{#has tag="#deprecated"}} +
Disclaimer: This blog post has been marked as deprecated, therefore some of the content might be out of date.
+ {{/has}} +
+ +
+ + {{amp_content}} + +
+ +
+
+ {{/post}} + + {{> footer}} + + {{amp_analytics}} + + + \ No newline at end of file diff --git a/assets/css/404.css b/assets/css/404.css index d0dab0a22..eb000071b 100644 --- a/assets/css/404.css +++ b/assets/css/404.css @@ -1 +1,79 @@ -.l-fullscreen{display:flex;align-items:center;justify-content:center;height:100vh}.l-fullscreen__content{text-align:center;padding:0 20px}@media only screen and (min-width:48rem){.l-fullscreen__content{max-width:500px}}@media only screen and (min-width:48rem){.l-fullscreen__content.in-subscribe-page{padding:0}}@media only screen and (min-width:64rem){.l-fullscreen__content.in-subscribe-page{max-width:820px}}.m-404-title{color:var(--primary-foreground-color);letter-spacing:3px;line-height:1;font-size:9rem;font-weight:700;margin:0 0 10px}@media only screen and (min-width:48rem){.m-404-title{letter-spacing:4px;font-size:12rem;margin-bottom:5px}}.m-404-subtitle{color:var(--primary-foreground-color);letter-spacing:.4px;line-height:1;font-size:1.25rem;font-weight:600;margin-bottom:20px}@media only screen and (min-width:48rem){.m-404-subtitle{letter-spacing:.5px;font-size:1.5rem}}.m-404-text{letter-spacing:.3px;line-height:1.4;font-size:.875em;padding:0 20px;margin-bottom:25px}@media only screen and (min-width:48rem){.m-404-text{font-size:1rem;padding:0;margin-bottom:30px}} \ No newline at end of file +/** Mixins */ /** Colors */ +/** Config */ +:root { + --announcement-bar-height: 0px; + --show-fade-animation: 1; +} + +.l-fullscreen { + display: flex; + align-items: center; + justify-content: center; + height: 100vh; +} + +.l-fullscreen__content { + text-align: center; + padding: 0 20px; +} +@media only screen and (min-width: 48rem) { + .l-fullscreen__content { + max-width: 500px; + } +} +@media only screen and (min-width: 48rem) { + .l-fullscreen__content.in-subscribe-page { + padding: 0; + } +} +@media only screen and (min-width: 64rem) { + .l-fullscreen__content.in-subscribe-page { + max-width: 820px; + } +} + +.m-404-title { + color: var(--primary-foreground-color); + letter-spacing: 3px; + line-height: 1; + font-size: 9rem; + font-weight: 700; + margin: 0 0 10px; +} +@media only screen and (min-width: 48rem) { + .m-404-title { + letter-spacing: 4px; + font-size: 12rem; + margin-bottom: 5px; + } +} + +.m-404-subtitle { + color: var(--primary-foreground-color); + letter-spacing: 0.4px; + line-height: 1; + font-size: 1.25rem; + font-weight: 600; + margin-bottom: 20px; +} +@media only screen and (min-width: 48rem) { + .m-404-subtitle { + letter-spacing: 0.5px; + font-size: 1.5rem; + } +} + +.m-404-text { + letter-spacing: 0.3px; + line-height: 1.4; + font-size: 0.875em; + padding: 0 20px; + margin-bottom: 25px; +} +@media only screen and (min-width: 48rem) { + .m-404-text { + font-size: 1rem; + padding: 0; + margin-bottom: 30px; + } +} diff --git a/assets/css/app.css b/assets/css/app.css index 97093f521..efcbdd796 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -1 +1,3120 @@ -@charset "UTF-8";/*! sanitize.css v7.0.2 | CC0 License | github.com/csstools/sanitize.css */*,:after,:before{background-repeat:no-repeat;box-sizing:border-box}:after,:before{text-decoration:inherit;vertical-align:inherit}html{font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Oxygen,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.15;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-break:break-word}body{margin:0}h1{font-size:2em;margin:.67em 0}hr{height:0;overflow:visible}main{display:block}nav ol,nav ul{list-style:none}pre{font-family:Menlo,Consolas,Roboto Mono,Ubuntu Monospace,Oxygen Mono,Liberation Mono,monospace;font-size:1em}a{background-color:transparent}abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:Menlo,Consolas,Roboto Mono,Ubuntu Monospace,Oxygen Mono,Liberation Mono,monospace;font-size:1em}small{font-size:80%}::-moz-selection{background-color:#b3d4fc;color:#000;text-shadow:none}::selection{background-color:#b3d4fc;color:#000;text-shadow:none}audio,canvas,iframe,img,svg,video{vertical-align:middle}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg{fill:currentColor}svg:not(:root){overflow:hidden}table{border-collapse:collapse}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select{margin:0}button{overflow:visible;text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}fieldset{padding:.35em .75em .625em}input{overflow:visible}legend{color:inherit;display:table;max-width:100%;white-space:normal}progress{display:inline-block;vertical-align:baseline}select{text-transform:none}textarea{margin:0;overflow:auto;resize:vertical}[type=checkbox],[type=radio]{padding:0}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}details,dialog{display:block}dialog{background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content}dialog:not([open]){display:none}summary{display:list-item}canvas{display:inline-block}template{display:none}[tabindex],a,area,button,input,label,select,summary,textarea{touch-action:manipulation}[hidden]{display:none}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled],[disabled]{cursor:disabled}[aria-hidden=false][hidden]:not(:focus){clip:rect(0,0,0,0);display:inherit;position:absolute}:root{--announcements-tag-color:#4140df;--regulatory-affairs-tag-color:#978df2;--social-impact-tag-color:#ca92f3;--mobility-tag-color:#d038ba}:root,[data-theme=light]{--background-color:#fff;--page-bg-color:#f6f8fc;--secondary-background-color:#fff;--primary-foreground-color:#4a4a4a;--secondary-foreground-color:#000;--titles-color:#131f37;--primary-border-color:#eef2fa;--secondary-border-color:#f0f8ff;--article-shadow-normal:0px 4px 10px rgba(132,147,173,0.1);--article-shadow-hover:0 4px 20px 0 rgba(132,147,173,0.1);--transparent-background-color:hsla(0,0%,100%,0.99);--footer-background-color:#133467;--submenu-shadow-color-opacity:0.25;--button-shadow-color-normal:hsla(0,0%,42.4%,0.2);--button-shadow-color-hover:hsla(0,0%,42.4%,0.3);--table-background-color-odd:#eef2fa;--table-head-border-bottom:#e2e2e2;--toggle-darkmode-button-display-moon:block;--toggle-darkmode-button-display-sun:none;--toggle-darkmode-background-color:rgba(0,0,0,0.05);--header-menu-gradient-first-color:hsla(0,0%,100%,0);--header-menu-gradient-secound-color:#fff}:root,[data-theme=dark],[data-theme=light]{--menu-list-color:#8493ad;--primary-subtle-color:#00e0ca;--secondary-subtle-color:#0fc1b7;--link-color:#0fc1b7}[data-theme=dark]{--background-color:#131f37;--page-bg-color:#131f37;--secondary-background-color:#243352;--primary-foreground-color:#ccc;--secondary-foreground-color:#fff;--titles-color:#fff;--primary-border-color:#485776;--secondary-border-color:#0f0f0f;--article-shadow-normal:0px 4px 10px #09142b;--article-shadow-hover:0 4px 20px 0 #09142b;--transparent-background-color:rgba(0,0,0,0.99);--footer-background-color:#080808;--submenu-shadow-color-opacity:0.55;--button-shadow-color-normal:rgba(10,10,10,0.5);--button-shadow-color-hover:rgba(10,10,10,0.5);--table-background-color-odd:#050505;--table-head-border-bottom:#485776;--toggle-darkmode-button-display-moon:none;--toggle-darkmode-button-display-sun:block;--toggle-darkmode-background-color:rgba(0,0,0,0.5);--header-menu-gradient-first-color:rgba(17,17,17,0);--header-menu-gradient-secound-color:rgba(17,17,17,0.65)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--background-color:#131f37;--page-bg-color:#131f37;--secondary-background-color:#243352;--menu-list-color:#8493ad;--primary-foreground-color:#ccc;--secondary-foreground-color:#fff;--primary-subtle-color:#00e0ca;--secondary-subtle-color:#0fc1b7;--titles-color:#fff;--link-color:#0fc1b7;--primary-border-color:#485776;--secondary-border-color:#0f0f0f;--article-shadow-normal:0px 4px 10px #09142b;--article-shadow-hover:0 4px 20px 0 #09142b;--transparent-background-color:rgba(0,0,0,0.99);--footer-background-color:#080808;--submenu-shadow-color-opacity:0.55;--button-shadow-color-normal:rgba(10,10,10,0.5);--button-shadow-color-hover:rgba(10,10,10,0.5);--table-background-color-odd:#050505;--table-head-border-bottom:#485776;--toggle-darkmode-button-display-moon:none;--toggle-darkmode-button-display-sun:block;--toggle-darkmode-background-color:rgba(0,0,0,0.5);--header-menu-gradient-first-color:rgba(17,17,17,0);--header-menu-gradient-secound-color:rgba(17,17,17,0.65)}}.hide{display:none}.sr-only{clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%);position:absolute;width:1px;height:1px;overflow:hidden;white-space:nowrap}.focusable:focus,.m-button:focus,.m-icon-button:focus,.m-toggle-darkmode input:focus{box-shadow:0 0 0 2px var(--primary-subtle-color)!important}.content-centered,.m-hero,.m-icon-button{display:flex;align-items:center;justify-content:center}.m-alert__close,.m-button,.m-icon-button,.m-input,.m-toggle-darkmode input,.no-appearance{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}.no-padding{padding:0}.no-margin{margin:0}.no-scroll-y{overflow-y:hidden}.align-center{text-align:center}.align-left{text-align:left}.align-right{text-align:right}.pos-relative{position:relative}.pos-absolute{position:absolute}.bold{font-weight:700}.underline{text-decoration:underline}.uppercase{text-transform:uppercase}.pointer{cursor:pointer}.only-desktop{display:none}@media only screen and (min-width:48rem){.only-desktop{display:block}}[class*=" icon-"],[class^=icon-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-moon:before{content:"\E90F"}.icon-sunny:before{content:"\E910"}.icon-chevron-down:before{content:"\E900"}.icon-star:before{content:"\E901"}.icon-arrow-left:before{content:"\E902"}.icon-arrow-right:before{content:"\E903"}.icon-arrow-top:before{content:"\E904"}.icon-close:before{content:"\E905"}.icon-comments:before{content:"\E906"}.icon-facebook:before{content:"\E907"}.icon-globe:before{content:"\E908"}.icon-menu:before{content:"\E909"}.icon-more:before{content:"\E90A"}.icon-search:before{content:"\E90B"}.icon-twitter:before{content:"\E90C"}.icon-imdb:before{content:"\E90D"}.icon-vk:before{content:"\E90E"}.icon-steam:before{content:"\E914"}.icon-twitch:before{content:"\E915"}.icon-youtube:before{content:"\E916"}.icon-vimeo:before{content:"\E917"}.icon-whatsapp:before{content:"\E918"}.icon-reddit:before{content:"\E919"}.icon-rss:before{content:"\E91A"}.icon-spotify:before{content:"\E91B"}.icon-telegram:before{content:"\E91C"}.icon-soundcloud:before{content:"\E91D"}.icon-flickr:before{content:"\E91E"}.icon-letterboxd:before{content:"\E91F"}.icon-odnoklassniki:before{content:"\E920"}.icon-pinterest:before{content:"\E921"}.icon-tiktok:before{content:"\E922"}.icon-tumblr:before{content:"\E923"}.icon-xing:before{content:"\E924"}.icon-mixcloud:before{content:"\E925"}.icon-mixer:before{content:"\E926"}.icon-wechat:before{content:"\E927"}.icon-deviantart:before{content:"\E928"}.icon-discord:before{content:"\E929"}.icon-instagram:before{content:"\E92A"}.icon-linkedin:before{content:"\E92B"}.icon-snapchat:before{content:"\E92C"}.icon-gitlab:before{content:"\E92D"}.icon-github:before{content:"\E930"}.icon-behance:before{content:"\E951"}body{display:flex;flex-direction:column;width:100%;min-height:100vh;color:var(--primary-foreground-color);font-size:1rem;line-height:1.5rem;font-family:Inter,sans-serif;font-display:swap;overflow-x:hidden;background-color:var(--page-bg-color);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.share-menu-displayed{padding-bottom:45px}@media only screen and (min-width:48rem){body.share-menu-displayed{padding-bottom:0}}.main-wrap{display:flex;flex-direction:column;flex-grow:1}p{line-height:1.3;margin:0}a{color:inherit;text-decoration:none}fieldset{padding:0;margin:0;border:0;position:relative}.tippy-popper *{text-align:left!important}.medium-zoom-overlay{background-color:var(--background-color)!important}.medium-zoom-image,.medium-zoom-overlay{z-index:5}h1,h2,h3,h4,h5,h6{font-family:Metropolis Bold;line-height:1.25;letter-spacing:.02rem;color:var(--titles-color)}h1{font-size:2.25rem}@media only screen and (min-width:48rem){h1{font-size:2.5rem;margin-bottom:20px}}h2{font-size:2rem}@media only screen and (min-width:48rem){h2{font-size:2.25rem}}h3{font-size:1.75rem}@media only screen and (min-width:48rem){h3{font-size:1.875rem}}h4,h5,h6{font-size:1.25rem}.headline-stick{height:4px;background-color:#00e0ca;margin-bottom:1.25rem;width:16px;margin-left:auto;margin-right:auto}.headline-stick.size-s{width:24px}.headline-stick.size-m{width:48px}.headline-stick.size-l{width:80px}.headline-stick.size-xl{width:120px}@font-face{font-family:Inter;font-style:normal;font-weight:100;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-Thin.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-Thin.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:100;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-ThinItalic.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-ThinItalic.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:200;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-ExtraLight.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-ExtraLight.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:200;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-ExtraLightItalic.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-ExtraLightItalic.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:300;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-Light.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-Light.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:300;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-LightItalic.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-LightItalic.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-Regular.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-Regular.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:400;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-Italic.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-Italic.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-Medium.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-Medium.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:500;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-MediumItalic.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-MediumItalic.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-SemiBold.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-SemiBold.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:600;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-SemiBoldItalic.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-SemiBoldItalic.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-Bold.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-Bold.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:700;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-BoldItalic.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-BoldItalic.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:800;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-ExtraBold.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-ExtraBold.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:800;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-ExtraBoldItalic.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-ExtraBoldItalic.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:900;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-Black.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-Black.woff?v=3.13) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:900;font-display:swap;src:url(https://webassets.iota.org/fonts/inter/Inter-BlackItalic.woff2?v=3.13) format("woff2"),url(https://webassets.iota.org/fonts/inter/Inter-BlackItalic.woff?v=3.13) format("woff")}@font-face{font-family:Inter var;font-style:normal;font-weight:100 900;font-display:swap;font-named-instance:"Regular";src:url(https://webassets.iota.org/fonts/inter/Inter-roman.var.woff2?v=3.13) format("woff2")}@font-face{font-family:Inter var;font-style:italic;font-weight:100 900;font-display:swap;font-named-instance:"Italic";src:url(https://webassets.iota.org/fonts/inter/Inter-italic.var.woff2?v=3.13) format("woff2")}@font-face{font-family:Metropolis Regular;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-Regular.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-Regular.woff?v=11) format("woff")}@font-face{font-family:Metropolis Regular Italic;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-RegularItalic.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-RegularItalic.woff?v=11) format("woff")}@font-face{font-family:Metropolis Extra Light;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-ExtraLight.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-ExtraLight.woff?v=11) format("woff")}@font-face{font-family:Metropolis Light;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-Light.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-Light.woff?v=11) format("woff")}@font-face{font-family:Metropolis Thin;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-Thin.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-Thin.woff?v=11) format("woff")}@font-face{font-family:Metropolis Extra Light Italic;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-ExtraLightItalic.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-ExtraLightItalic.woff?v=11) format("woff")}@font-face{font-family:Metropolis Light Italic;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-LightItalic.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-LightItalic.woff?v=11) format("woff")}@font-face{font-family:Metropolis Thin Italic;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-ThinItalic.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-ThinItalic.woff?v=11) format("woff")}@font-face{font-family:Metropolis Medium;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-Medium.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-Medium.woff?v=11) format("woff")}@font-face{font-family:Metropolis Semi Bold;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-SemiBold.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-SemiBold.woff?v=11) format("woff")}@font-face{font-family:Metropolis Bold;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-Bold.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-Bold.woff?v=11) format("woff")}@font-face{font-family:Metropolis Bold Italic;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-BoldItalic.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-BoldItalic.woff?v=11) format("woff")}@font-face{font-family:Metropolis Medium Italic;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-MediumItalic.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-MediumItalic.woff?v=11) format("woff")}@font-face{font-family:Metropolis Semi Bold Italic;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-SemiBoldItalic.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-SemiBoldItalic.woff?v=11) format("woff")}@font-face{font-family:Metropolis Extra Bold;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-ExtraBold.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-ExtraBold.woff?v=11) format("woff")}@font-face{font-family:Metropolis Extra Bold Italic;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-ExtraBoldItalic.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-ExtraBoldItalic.woff?v=11) format("woff")}@font-face{font-family:Metropolis Black;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-Black.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-Black.woff?v=11) format("woff")}@font-face{font-family:Metropolis Black Italic;font-style:normal;font-weight:400;src:url(https://webassets.iota.org/fonts/metropolis/Metropolis-BlackItalic.woff2?v=11) format("woff2"),url(https://webassets.iota.org/fonts/metropolis/Metropolis-BlackItalic.woff?v=11) format("woff")}.l-wrapper{position:relative;width:100%;margin:0 auto;padding:0 20px}@media only screen and (min-width:48rem){.l-wrapper{max-width:1200px}}@media only screen and (min-width:80rem){.l-wrapper{padding:0}}.l-wrapper.in-submenu{padding:0}@media only screen and (min-width:48rem){.l-wrapper.in-submenu{padding:0 20px}}@media only screen and (min-width:80rem){.l-wrapper.in-submenu{padding:0}}@media only screen and (min-width:48rem){.l-wrapper.in-post{max-width:960px}}@media only screen and (min-width:48rem){.l-wrapper.in-comments{max-width:820px}}@media only screen and (min-width:64rem){.l-wrapper.in-recommended{padding:0;max-width:calc(100% - 60px)}}@media only screen and (min-width:90rem){.l-wrapper.in-recommended{max-width:1200px}}.l-wrapper.in-post.no-image{padding-top:40px}@media only screen and (min-width:48rem){.l-wrapper.in-post.no-image{padding-top:80px}}.l-content{padding:40px 0 20px}@media only screen and (min-width:48rem){.l-content{padding:60px 0 40px}}.m-button{display:inline-block;color:#333;text-align:center;letter-spacing:.2px;line-height:1;font-size:1rem;font-weight:600;border-radius:5px;padding:13px 25px;cursor:pointer;outline:0;border:0;position:relative;background-color:transparent;transition:all .25s cubic-bezier(.02,.01,.47,1)}.m-button.outlined{color:var(--titles-color);border:1px solid var(--primary-foreground-color)}.m-button.filled,.m-button.primary{box-shadow:0 2px 4px var(--button-shadow-color-normal),0 0 0 transparent}.m-button.filled:hover,.m-button.primary:hover{transform:translateY(-2px);box-shadow:0 4px 8px var(--button-shadow-color-hover),0 0 0 transparent}.m-button.filled{border-radius:5px;background-color:#fff}.m-button.block{display:block;width:100%}.m-button.primary{color:#fff;background-color:var(--primary-subtle-color)}.m-button.loading{cursor:default;overflow:hidden}.m-button.loading:after{content:"";position:absolute;left:0;bottom:0;width:25%;height:2px;background-color:#fff;-webkit-animation:loading 1s infinite;animation:loading 1s infinite}@-webkit-keyframes loading{0%{transform:translatex(0)}50%{transform:translatex(300%)}to{transform:translatex(0)}}@keyframes loading{0%{transform:translatex(0)}50%{transform:translatex(300%)}to{transform:translatex(0)}}.m-icon-button{color:var(--titles-color);font-size:1.125rem;border:0;outline:0;padding:0;cursor:pointer;border-radius:50%;background-color:transparent}.m-icon-button.outlined{border:1px solid var(--primary-foreground-color)}.m-icon-button.filled{background-color:var(--background-color);box-shadow:0 2px 4px var(--button-shadow-color-normal),0 0 0 transparent;transition:all .25s cubic-bezier(.02,.01,.47,1)}.m-icon-button.filled:hover{box-shadow:0 4px 8px var(--button-shadow-color-hover),0 0 0 transparent}.m-icon-button:disabled{cursor:default;opacity:.5}.m-icon-button.in-mobile-topbar{width:50px;height:50px}.m-icon-button.as-close-menu{position:absolute;top:20px;right:20px;width:32px;height:32px;font-size:.625rem;z-index:2}@media only screen and (min-width:48rem){.m-icon-button.as-close-menu{display:none!important}}.m-icon-button.as-close-search{position:absolute;top:20px;right:20px;width:32px;height:32px;font-size:.625rem;z-index:2}@media only screen and (min-width:48rem){.m-icon-button.as-close-search{top:30px;right:30px;width:42px;height:42px;font-size:.875rem}}@media only screen and (min-width:80rem){.m-icon-button.as-close-search{top:40px;right:40px;width:50px;height:50px}}.m-icon-button.in-menu-main{display:none}@media only screen and (min-width:48rem){.m-icon-button.in-menu-main{display:flex;width:32px;height:32px}}.m-icon-button.more{font-size:1.25rem;z-index:6;position:relative}.m-icon-button.more.active{color:var(--primary-subtle-color)}.m-icon-button.in-pagination-left,.m-icon-button.in-pagination-right{width:40px;height:40px;font-size:.625rem}@media only screen and (min-width:48rem){.m-icon-button.in-pagination-left,.m-icon-button.in-pagination-right{width:46px;height:46px;font-size:.688rem}}.m-icon-button.in-pagination-left{margin-right:30px}.m-icon-button.in-pagination-right{margin-left:30px}.m-icon-button.in-featured-articles{position:absolute;color:#fff;font-size:.875rem;width:40px;height:40px;bottom:5px;z-index:2}@media only screen and (min-width:48rem){.m-icon-button.in-featured-articles{bottom:26px}}.m-icon-button.in-featured-articles.glide-prev{right:56px}@media only screen and (min-width:48rem){.m-icon-button.in-featured-articles.glide-prev{right:76px}}.m-icon-button.in-featured-articles.glide-next{right:16px}@media only screen and (min-width:48rem){.m-icon-button.in-featured-articles.glide-next{right:36px}}.m-icon-button.in-recommended-articles{position:absolute;font-size:.625rem;width:40px;height:40px;top:200px;z-index:2;transform:translateY(-50%)}@media only screen and (min-width:64rem){.m-icon-button.in-recommended-articles{display:none}}.m-icon-button.in-recommended-articles.glide-prev{left:0}.m-icon-button.in-recommended-articles.glide-next{right:0}.m-icon-button.as-load-comments{position:relative;width:60px;height:60px;font-size:1.25rem;margin:0 auto;z-index:2}@media only screen and (min-width:48rem){.m-icon-button.as-load-comments{width:80px;height:80px;font-size:1.625rem}}.m-icon-button.in-share{color:var(--titles-color);font-size:.75rem;text-decoration:none;width:31px;height:31px;margin:0 25px}@media only screen and (min-width:64rem){.m-icon-button.in-share{font-size:.875rem;width:40px;height:40px;margin:0 0 20px}}@media only screen and (min-width:80rem){.m-icon-button.in-share{font-size:1rem;width:50px;height:50px}}.m-icon-button.progress{position:relative}.m-icon-button.progress svg{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0}.m-icon-button.progress svg circle{stroke:var(--primary-subtle-color);transform-origin:50% 50%;transform:rotate(-90deg);transition:stroke-dashoffset .2s}.rtl .m-icon-button.in-featured-articles.glide-prev{right:auto;left:16px}@media only screen and (min-width:48rem){.rtl .m-icon-button.in-featured-articles.glide-prev{right:auto;left:36px}}.rtl .m-icon-button.in-featured-articles.glide-next{right:auto;left:52px}@media only screen and (min-width:48rem){.rtl .m-icon-button.in-featured-articles.glide-next{right:auto;left:72px}}.rtl .m-icon-button.in-recommended-articles.glide-prev{left:auto;right:0;transform:rotate(180deg)}.rtl .m-icon-button.in-recommended-articles.glide-next{right:auto;left:0;transform:rotate(180deg)}.m-input{color:var(--primary-foreground-color);letter-spacing:.2px;line-height:1.3;font-size:1rem;width:100%;border-radius:5px;padding:11px 15px;border:1px solid var(--primary-border-color);outline:0;background-color:var(--background-color)}.m-input:focus{border-color:var(--primary-subtle-color)}.m-input.in-search{font-weight:600;padding-left:40px}@media only screen and (min-width:48rem){.m-input.in-search{font-size:1.25rem;padding:15px 30px 15px 60px}}.m-input.in-subscribe-section{margin-bottom:15px}.m-section-title{color:var(--primary-foreground-color);text-align:center;letter-spacing:.3px;line-height:1.3;font-weight:400;font-size:1.25rem;margin:0 0 30px}@media only screen and (min-width:48rem){.m-section-title{font-size:1.5rem;margin-bottom:40px}}.m-section-title.in-recommended{margin-bottom:0!important}.m-small-text{color:var(--titles-color);font-size:.875rem}.m-small-text.in-subscribe-page{padding-top:30px;font-weight:600}.m-small-text.in-author-along-with{margin-bottom:20px}.m-small-text.in-author-along-with a{text-decoration:underline}.m-not-found{color:var(--primary-foreground-color);line-height:1.3;font-size:.875rem;font-weight:600}.m-not-found.in-recent-articles{margin-left:20px}@media only screen and (min-width:48rem){.m-not-found.in-recent-articles{margin-left:0}}.m-alert{color:#fff;text-align:center;letter-spacing:1px;line-height:1.4;font-size:.875rem;visibility:hidden;position:fixed;top:0;left:0;width:100%;padding:16px 45px 14px;z-index:11;transform:translateY(-100%);transition:transform .2s ease}@media only screen and (min-width:48rem){.m-alert{font-size:1rem;padding:24px 75px 22px}}.m-alert.success{background-color:var(--primary-subtle-color)}.m-alert.opened{visibility:visible;transform:translateY(0)}.m-alert__close{display:flex;align-items:center;justify-content:center;position:absolute;top:50%;right:20px;width:20px;height:20px;cursor:pointer;outline:0;border:0;padding:0;background-color:transparent;transform:translateY(-50%)}@media only screen and (min-width:48rem){.m-alert__close{right:40px;width:25px;height:25px}}.m-alert__close span{color:#fff;font-size:.75rem}@media only screen and (min-width:48rem){.m-alert__close span{font-size:.875rem}}.rtl .m-alert__close{right:auto;left:20px}@media only screen and (min-width:48rem){.rtl .m-alert__close{right:auto;left:40px}}.m-header{position:fixed;top:0;left:0;width:100%;z-index:4;background-color:var(--background-color);will-change:transform;transition:transform .4s cubic-bezier(.165,.84,.44,1)}@media only screen and (min-width:48rem){.m-header{padding:15px 0}}.m-header.mobile-menu-opened{height:100%}@media only screen and (min-width:48rem){.m-header.mobile-menu-opened{height:auto}}.m-header.headroom--pinned{box-shadow:0 4px 8px rgba(0,0,0,.05),0 0 0 transparent;transform:translateY(0)}.m-header.headroom--pinned .m-header__shadow{display:none}.m-header.headroom--unpinned{transform:translateY(-100%)}.m-header.submenu-is-active{background-color:var(--background-color)}.m-header.submenu-is-active .m-header__shadow{display:none}.m-header.with-picture{background-color:var(--background-color)}.m-logo img,[data-theme=light] .m-logo img{filter:invert(1)}[data-theme=dark] .m-logo img{filter:none}@media (prefers-color-scheme:dark){.m-logo img{filter:none}[data-theme=light] .m-logo img{filter:invert(1)}}.m-mobile-topbar{display:flex;align-items:center;justify-content:space-between;height:50px;position:relative;z-index:2}@media only screen and (min-width:48rem){.m-mobile-topbar{display:none!important}}.m-logo{display:inline-block;height:25px}.m-logo img{width:auto;max-width:150px;height:100%;-o-object-fit:contain;object-fit:contain}.m-logo.in-mobile-topbar{margin:0 20px}.m-site-name.in-mobile-topbar{color:var(--titles-color);font-weight:600}.m-site-name.in-desktop-menu{font-weight:700}.m-nav{font-family:Metropolis Medium;font-size:.875rem;line-height:1rem}@media only screen and (min-width:48rem){.m-nav{display:flex;align-items:center;justify-content:space-between;height:37px;overflow-y:hidden}}@media only screen and (min-width:90rem){.m-nav{margin:0 -5px}}@media only screen and (min-width:48rem){.m-nav.toggle-overflow{overflow-y:initial}}.m-nav__left{margin-bottom:30px}@media only screen and (min-width:48rem){.m-nav__left{display:flex;flex:1 1 auto;align-items:center;overflow-x:auto;overflow-y:hidden;white-space:nowrap;padding-top:40px;padding-bottom:40px;padding-left:5px;margin-bottom:0;-webkit-overflow-scrolling:touch}}@media only screen and (min-width:48rem){.m-nav__left.toggle-overflow{overflow-x:hidden}}.m-nav__left ul{padding:0;margin:0}@media only screen and (min-width:48rem){.m-nav__left ul{display:flex;align-items:center}}.m-nav__left li{color:var(--menu-list-color);letter-spacing:1;font-size:.875rem;line-height:1rem;margin-bottom:15px}@media only screen and (min-width:48rem){.m-nav__left li{margin-bottom:0;margin-right:35px;position:relative}}.m-nav__left li:last-of-type{margin-bottom:0}.m-nav__left li.nav-current{font-weight:600}.m-nav__left li a{color:inherit}.m-nav__left li.more a{display:inline-flex;align-items:center}@media only screen and (min-width:48rem){.m-nav__left li.more a{display:flex}}.m-nav__left li.more a span{display:inline-block;color:inherit;font-size:.375rem;margin-left:8px;transform:translateY(1px)}.m-nav__left li.submenu-option>div{cursor:pointer}.m-nav__left li.submenu-option .js-toggle-submenu{display:none}@media only screen and (min-width:48rem){.m-nav__left li.submenu-option .js-toggle-submenu{display:block}}@media only screen and (min-width:48rem){.m-nav__left li.submenu-option{z-index:2}}.m-nav__right{display:flex;align-items:center;justify-content:flex-end}@media only screen and (min-width:48rem){.m-nav__right{flex-shrink:0;position:relative;padding-left:20px;padding-right:5px}}@media only screen and (min-width:48rem){.m-nav__right:before{content:"";position:absolute;pointer-events:none;top:0;left:-20px;width:20px;height:100%;z-index:2}}@media only screen and (min-width:48rem){.rtl .m-nav__left{padding-left:0;padding-right:5px}}@media only screen and (min-width:48rem){.rtl .m-nav__left li{margin-right:0;margin-left:35px}}@media only screen and (min-width:48rem){.rtl .m-nav__right{padding-left:5px;padding-right:20px}}@media only screen and (min-width:48rem){.rtl .m-nav__right:before{left:auto;right:-20px;transform:rotate(180deg)}}.m-menu{visibility:hidden;position:fixed;top:0;left:0;width:100%;height:100%;opacity:0;overflow-y:auto;z-index:2;background-color:var(--background-color);-webkit-overflow-scrolling:touch;transform:scale(1.2);transition:all .4s cubic-bezier(.165,.84,.44,1)}.m-menu.opened{visibility:visible;opacity:1;z-index:10;transform:scale(1)}@media only screen and (min-width:48rem){.m-menu{visibility:visible!important;position:relative;top:auto;left:auto;height:auto;opacity:1!important;overflow:initial;background-color:transparent;transform:translateZ(0)!important}}.m-menu__main{padding:50px 0 5px;min-height:100%}@media only screen and (min-width:48rem){.m-menu__main{padding:0;min-height:0}}.rtl .m-menu__main{padding-top:75px}@media only screen and (min-width:48rem){.rtl .m-menu__main{padding:0}}.m-secondary-menu{padding:0;margin:0;list-style-type:none}.m-secondary-menu li{font-size:1rem}@media only screen and (min-width:48rem){.m-secondary-menu li{margin-left:0;margin-right:0}}.m-secondary-menu li.nav-current a{font-weight:600}.m-secondary-menu li a{display:block;padding:6px 10px;border-radius:4px;transition:background-color .1s linear}@media only screen and (min-width:48rem){.m-secondary-menu li a{padding:8px 10px}}.m-secondary-menu li a:hover{background-color:rgba(0,0,0,.1)}.rtl .m-secondary-menu .li,.rtl .m-secondary-menu .li a{text-align:right!important}.m-submenu{padding-top:25px}@media only screen and (min-width:48rem){.m-submenu{visibility:hidden;position:fixed;top:45px;left:0;width:100%;padding:30px 0 20px;background-color:var(--background-color);border-top:1px solid var(--secondary-border-color);z-index:5;box-shadow:0 60px 60px rgba(0,0,0,var(--submenu-shadow-color-opacity)),0 0 0 transparent}}@media only screen and (min-width:80rem){.m-submenu{padding:32px 0 23px}}@media only screen and (min-width:48rem){.m-submenu.opened{visibility:visible;-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation:openSubmenuAnimation .3s both;animation:openSubmenuAnimation .3s both}@-webkit-keyframes openSubmenuAnimation{0%{opacity:0;transform:translate3d(0,-5%,0)}to{opacity:1;transform:translateZ(0)}}@keyframes openSubmenuAnimation{0%{opacity:0;transform:translate3d(0,-5%,0)}to{opacity:1;transform:translateZ(0)}}}@media only screen and (min-width:48rem){.m-submenu.closed{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation:closeSubmenuAnimation .3s both;animation:closeSubmenuAnimation .3s both}@-webkit-keyframes closeSubmenuAnimation{0%{visibility:visible;opacity:1;transform:translateZ(0)}to{visibility:hidden;opacity:0;transform:translate3d(0,-2.5%,0)}}@keyframes closeSubmenuAnimation{0%{visibility:visible;opacity:1;transform:translateZ(0)}to{visibility:hidden;opacity:0;transform:translate3d(0,-2.5%,0)}}}@media only screen and (min-width:48rem){:root .m-submenu,_:-ms-fullscreen{top:65px}}.m-submenu-title{letter-spacing:.3px;line-height:1.3;font-size:1.125rem;font-weight:400;margin:0 0 25px}.m-submenu-title.in-recent-articles{padding:0 20px}@media only screen and (min-width:48rem){.m-submenu-title.in-recent-articles{padding:0}}.rtl .m-submenu-title{direction:rtl}.m-recent-articles{margin:0 -20px 40px;overflow:hidden}@media only screen and (min-width:48rem){.m-recent-articles{margin:0 0 40px}}.m-recent-articles ul{cursor:-webkit-grab;cursor:grab}.m-recent-article{display:block;width:230px;margin:0 20px}@media only screen and (min-width:48rem){.m-recent-article{margin:0 60px 0 0}}.m-recent-article:hover .m-recent-article__picture img{transform:scale(1.1)}@media only screen and (min-width:48rem){.rtl .m-recent-article{margin:0 0 0 60px}}.m-recent-article__picture{height:130px;position:relative;margin-bottom:15px;border-radius:5px;background-color:var(--secondary-subtle-color);overflow:hidden}.m-recent-article__picture.no-picture img{position:absolute;left:50%;top:50%;width:64px;height:64px;margin:-32px 0 0 -32px}.m-recent-article__picture img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-webkit-backface-visibility:visible!important;backface-visibility:visible!important;transition:transform .5s cubic-bezier(.165,.84,.44,1)}.m-recent-article__title{color:var(--titles-color);letter-spacing:.2px;line-height:1.438rem;font-size:1rem;font-weight:400;margin:0 0 10px}@media only screen and (min-width:48rem){.m-recent-article__title{letter-spacing:.25px;font-size:1.125rem}}.m-recent-article__date{color:var(--titles-color);letter-spacing:.15px;font-size:.813rem}.m-tags.in-post{padding-top:25px}.m-tags.in-post ul{padding:0;list-style-type:none}.m-tags.in-post a{text-decoration:none}.m-tags ul{display:flex;flex-wrap:wrap}.m-tags li{letter-spacing:.2px;font-size:.875rem;font-weight:600;margin-right:30px;margin-bottom:10px!important}.m-tags li:last-of-type{margin-right:0}.m-tags li a{color:var(--link-color)!important}.m-toggle-darkmode{position:fixed;right:20px;bottom:45px;width:28px;height:28px;border-radius:50%;overflow:hidden;z-index:2}@media only screen and (min-width:48rem){.m-toggle-darkmode{position:relative;right:auto;bottom:auto;margin-left:20px;z-index:auto}}.m-toggle-darkmode input{position:absolute;top:0;left:0;width:100%;height:100%;outline:0;border:0;opacity:0;cursor:pointer;z-index:2}.m-toggle-darkmode input::-moz-focus-inner{border:0}.m-toggle-darkmode div{display:flex;align-items:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;border-radius:50%;overflow:hidden;background-color:var(--toggle-darkmode-background-color);z-index:1}.m-toggle-darkmode span{color:var(--titles-color);font-size:.9375rem}.m-toggle-darkmode span.moon{display:var(--toggle-darkmode-button-display-moon)}.m-toggle-darkmode span.sun{display:var(--toggle-darkmode-button-display-sun)}:root .m-toggle-darkmode,_:-ms-fullscreen{display:none}.m-hero{position:relative;flex-direction:column;min-height:365px;overflow:hidden;padding:100px 0 75px;background-color:var(--background-color)}@media only screen and (min-width:48rem){.m-hero{min-height:400px;padding:150px 0 75px}}.m-hero.with-picture{color:#fff;background-color:#000}@media only screen and (min-width:48rem){.m-hero.with-picture{min-height:450px}}@media only screen and (min-width:80rem){.m-hero.with-picture{min-height:565px}}.m-hero.no-picture.in-post{display:none}.m-hero__picture{display:flex;align-items:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;opacity:.7}.m-hero__picture.in-post{opacity:1}.m-hero__picture img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.m-hero__content{position:relative;text-align:center;padding:0 20px;z-index:2}@media only screen and (min-width:48rem){.m-hero__content{max-width:700px}}@media only screen and (min-width:80rem){.m-hero__content{padding:0}}.m-hero__meta{margin:0 auto}@media only screen and (min-width:48rem){.m-hero__meta{display:flex;align-items:center;justify-content:center}}.rtl .m-hero__meta{direction:ltr}.m-hero-avatar{width:80px;height:80px;margin:0 auto 25px;border-radius:50%;background-color:#5c697c;background-repeat:no-repeat;background-position:50%;background-size:cover;box-shadow:inset 0 2px 4px rgba(0,0,0,.25),0 0 0 transparent}@media only screen and (min-width:48rem){.m-hero-avatar{width:100px;height:100px}}.m-hero-title{color:var(--titles-color);letter-spacing:.4px;line-height:1.3;font-size:1.75rem;font-weight:700;margin:0 0 15px}@media only screen and (min-width:48rem){.m-hero-title{letter-spacing:.5px;font-size:2.25rem}}.m-hero-title.bigger{letter-spacing:.5px;font-size:2rem}@media only screen and (min-width:48rem){.m-hero-title.bigger{letter-spacing:.8px;font-size:3.25rem;margin-bottom:10px}}.m-hero-description{font-weight:500;letter-spacing:.2px;line-height:1.5;font-size:.938rem;margin-bottom:20px;color:var(--titles-color)}@media only screen and (min-width:48rem){.m-hero-description{font-size:1.125rem}}.m-hero-description.bigger{line-height:1.3;font-size:1rem;margin-bottom:25px}@media only screen and (min-width:48rem){.m-hero-description.bigger{font-size:1rem}}.m-hero-social{text-align:center;list-style-type:none;padding:0;margin:0 0 15px}@media only screen and (min-width:48rem){.m-hero-social{margin-right:7px;margin-bottom:0}}.m-hero-social.with-picture{color:#fff}.m-hero-social li{display:inline-block;margin:0 11px}.m-hero-social li a{color:inherit;font-size:.938rem}.m-hero-social li a span{color:inherit}.rtl .m-hero-social{direction:ltr}.m-hero-stats{text-align:center;list-style-type:none;padding:0;margin:0}@media only screen and (min-width:48rem){.m-hero-stats{margin-left:7px}}.m-hero-stats.with-picture{color:#fff}.m-hero-stats li{display:inline-block;color:inherit;letter-spacing:.2px;font-size:.813rem;margin:0 4px}@media only screen and (min-width:48rem){.m-hero-stats li{letter-spacing:.3px;font-size:1rem}}.m-heading{text-align:center;margin:0 auto 40px}@media only screen and (min-width:48rem){.m-heading{margin-bottom:60px}}@media only screen and (min-width:48rem){.m-heading.in-subscribe-page{margin-bottom:50px}}.m-heading.no-margin{margin-bottom:0!important}.m-heading__title{line-height:1.25;letter-spacing:.02rem;color:var(--titles-color);margin:0 0 10px}@media only screen and (min-width:48rem){.m-heading__title{letter-spacing:.5px;font-size:2.25rem;margin-bottom:15px}}.m-heading__title.in-post{margin-bottom:15px;font-size:1.8rem;text-align:left}@media only screen and (min-width:48rem){.m-heading__title.in-post{font-size:2.75rem;margin-bottom:20px;text-align:center}}.m-heading__title.in-page{margin:0}.m-heading__description{letter-spacing:.2px;line-height:1.3;font-size:.938rem;margin:0 auto}@media only screen and (min-width:48rem){.m-heading__description{font-size:1.125rem}}@media only screen and (min-width:48rem){.m-heading__description.in-subscribe-page{max-width:420px;font-size:1rem}}.m-heading__description.in-newsletter-form{font-size:.875rem;max-width:80%}@media only screen and (min-width:48rem){.m-heading__description.in-newsletter-form{max-width:420px}}.m-heading__meta{display:flex;align-items:center;justify-content:center;letter-spacing:.2px;font-size:.875rem;font-weight:600}@media only screen and (min-width:48rem){.m-heading__meta{font-size:1rem}}.m-heading__meta__tag,.m-heading__meta__time{color:var(--link-color)!important}.m-heading__meta__tag{text-decoration:none!important}.m-heading__meta__divider{display:inline-block;color:var(--primary-border-color);margin:0 10px}.m-article-card{display:flex;flex-direction:column;position:relative;margin-bottom:20px;height:400px;background-color:var(--background-color);border-radius:10px;z-index:1;transition:all .25s cubic-bezier(.02,.01,.47,1)}.m-article-card:hover{transform:translateY(-5px)}.m-article-card:hover:before{box-shadow:var(--article-shadow-hover),0 0 0 transparent}.m-article-card:hover .m-article-card__author{box-shadow:0 4px 8px rgba(0,0,0,.3),0 0 0 transparent}@media only screen and (min-width:48rem){.m-article-card{width:calc(50% - 20px);height:420px;margin-left:10px;margin-right:10px;margin-bottom:20px}}@media only screen and (min-width:64rem){.m-article-card{width:calc(33.33333% - 40px);margin-left:20px;margin-right:20px;margin-bottom:40px}}.m-article-card.no-picture .m-article-card__picture{height:85px!important}.m-article-card.no-picture .m-article-card__info{background-color:var(--secondary-background-color)}.m-article-card.no-picture .m-article-card__title{line-height:1.4;font-size:1.625rem}.m-article-card.as-author .m-article-card__picture{background-color:#000}.m-article-card.as-author .m-article-card__picture-link{z-index:2}.m-article-card.as-author .m-article-card__picture-background{opacity:.75}.m-article-card.as-author .m-article-card__info{padding:0}.m-article-card.as-author .m-article-card__info-link{padding:20px 20px 60px}.m-article-card:before{content:"";position:absolute;top:10px;right:10px;bottom:0;left:10px;border-radius:10px;box-shadow:var(--article-shadow-normal),0 0 0 transparent;transition:all .25s cubic-bezier(.02,.01,.47,1)}.m-article-card__picture{position:relative;border-radius:10px 10px 0 0;background-color:var(--background-color);overflow:hidden;width:100%;padding-bottom:50%}.m-article-card__picture-link{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1}.m-article-card__picture-background{position:absolute;top:0;left:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover;z-index:0}.m-article-card__name{position:absolute;left:20px;right:20px;bottom:20px;color:#fff;letter-spacing:.4px;line-height:1.3;font-size:1.25rem;font-weight:600;margin:0;z-index:1}@media only screen and (min-width:48rem){.m-article-card__name{left:25px;bottom:25px}}.m-article-card__author{position:absolute;top:20px;left:20px;width:35px;height:35px;border-radius:50%;z-index:2;transition:all .25s cubic-bezier(.02,.01,.47,1);visibility:hidden}@media only screen and (min-width:48rem){.m-article-card__author{top:25px;left:25px}}.m-article-card__author div{width:100%;height:100%;border-radius:50%;border:2px solid #fff;background-color:#fff;background-repeat:no-repeat;background-position:50%;background-size:cover}.m-article-card__featured{display:flex;align-items:center;justify-content:center;position:absolute;top:26px;right:20px;width:24px;height:24px;color:#000;background-color:#fff;border-radius:50%;z-index:2;visibility:hidden}@media only screen and (min-width:48rem){.m-article-card__featured{top:31px;right:25px}}.m-article-card__featured span{color:inherit;font-size:.75rem}.m-article-card__info{flex:1;position:relative;padding-top:48px;height:200px;overflow:hidden;border-radius:0 0 10px 10px;background-color:var(--secondary-background-color)}@media only screen and (min-width:48rem){.m-article-card__info{padding-top:53px}}.m-article-card__info.no-tag{padding-top:0!important}.m-article-card__info.no-tag .m-article-card__info-link{padding-top:48px}@media only screen and (min-width:48rem){.m-article-card__info.no-tag .m-article-card__info-link{padding-top:53px}}.m-article-card__tag{position:absolute;top:15px;left:20px;right:20px;line-height:100%;font-size:.875rem;letter-spacing:.04em;color:var(--secondary-subtle-color);display:table;padding:6px;z-index:1;border-radius:4px;overflow:hidden}.m-article-card__tag:before{content:"";position:absolute;width:100%;height:100%;top:0;left:0;background:var(--secondary-subtle-color);opacity:.2}@media only screen and (min-width:48rem){.m-article-card__tag{top:18px;left:25px}}.m-article-card__info-link{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:100%;padding:0 20px 20px}@media only screen and (min-width:48rem){.m-article-card__info-link{padding:0 25px 25px}}.m-article-card__title{color:var(--titles-color);margin:0;font-size:1.25rem;line-height:1.5rem;letter-spacing:.02em}.m-article-card__excerpt{display:block;position:relative;overflow:hidden;height:100%;color:var(--titles-color);letter-spacing:.3px;line-height:1.5;font-size:1rem}.m-article-card__author-stats,.m-article-card__timestamp{display:flex;align-items:center;color:var(--titles-color);line-height:1.25rem;font-size:.75rem;letter-spacing:.02em;text-transform:uppercase}.m-article-card__author-stats span:nth-child(2),.m-article-card__timestamp span:nth-child(2){padding:0 10px}.m-article-card__author-stats{position:absolute;left:20px;right:20px;bottom:20px;justify-content:space-between}.m-article-card__author-stats span{padding:0!important}.m-article-card__social{display:flex;align-items:center;justify-content:flex-end;padding:0;margin:0}.m-article-card__social li{display:inline-block;margin-left:22px}.m-article-card__social li a{color:var(--primary-foreground-color);font-size:.938rem}.m-article-card__social li a span{color:inherit}.rtl .m-article-card__social{direction:ltr}.m-search{visibility:hidden;position:fixed;top:0;left:0;width:100%;height:100%;opacity:0;overflow-y:auto;z-index:2;background-color:var(--transparent-background-color);-webkit-overflow-scrolling:touch;transform:scale(1.2);transition:all .4s cubic-bezier(.165,.84,.44,1)}.m-search.opened{visibility:visible;opacity:1;z-index:10;transform:scale(1)}.m-search__content{padding:80px 20px 40px;margin:0 auto}@media only screen and (min-width:48rem){.m-search__content{padding-top:100px;padding-bottom:50px;max-width:700px}}@media only screen and (min-width:80rem){.m-search__content{padding-left:0;padding-right:0}}@media only screen and (min-width:90rem){.m-search__content{max-width:800px}}.m-search__form{margin-bottom:30px}@media only screen and (min-width:48rem){.m-search__form{max-width:500px;margin:0 auto 45px}}.m-search-icon{position:absolute;top:50%;left:15px;color:#9b9b9b;font-size:1rem;font-weight:500;pointer-events:none;transform:translateY(-45%)}@media only screen and (min-width:48rem){.m-search-icon{font-size:1.25em;left:25px}}.m-result{border-bottom:1px solid var(--primary-border-color)}.m-result.last{border-bottom:0}.m-result__link{display:block;width:100%;height:100%;padding:10px 0}@media only screen and (min-width:48rem){.m-result__link{padding:15px 0}}.m-result__title{color:var(--primary-foreground-color);letter-spacing:.3px;line-height:1.4;font-size:1rem;font-weight:400;margin:0 0 5px}@media only screen and (min-width:48rem){.m-result__title{letter-spacing:.4px;font-size:1.25rem;margin-bottom:10px}}@media only screen and (min-width:80rem){.m-result__title{font-size:1.375rem}}.m-result__date{color:var(--titles-color);letter-spacing:.2px;font-size:.813rem}@media only screen and (min-width:48rem){.m-result__date{letter-spacing:.3px;font-size:.938rem}}.m-footer{flex-shrink:0;background:linear-gradient(225deg,#485776,#131f37);background-repeat:no-repeat;background-position:0 100%}@media only screen and (min-width:48rem){.m-footer{background:url(/assets/images/footer_pattern.svg),linear-gradient(225deg,#485776,#131f37);background-repeat:no-repeat;background-position:0 100%}}.m-footer__content{color:#fff;text-align:center;padding:45px 20px}@media only screen and (min-width:48rem){.m-footer__content{padding:45px 0;max-width:680px;margin:0 auto}}@media only screen and (min-width:64rem){.m-footer__content{padding:45px 0;max-width:1032px;margin:0 auto}}.m-footer__nav-secondary{margin-bottom:25px}.m-footer__nav-secondary .m-secondary-menu{display:flex;justify-content:center;flex-wrap:wrap}@media only screen and (min-width:48rem){.m-footer__nav-secondary .m-secondary-menu li{margin:0 5px}}.m-footer-grid{display:block}@media only screen and (min-width:64rem){.m-footer-grid{display:grid;grid-template-columns:34% 66%}}.m-footer-copyright{margin-bottom:0;font-size:.75rem;line-height:1.5;text-align:center;letter-spacing:.04em;color:#8493ad}@media only screen and (min-width:48rem){.m-footer-copyright{font-size:.875rem}}.m-footer-copyright p{color:#c3d0e4;line-height:.5em}.m-footer-copyright span{display:inline}.m-footer-copyright a{text-decoration:underline;margin-left:.25rem}.m-footer-copyright a:hover{color:#00e0ca}.m-footer-copyright.jslicense{opacity:.7;margin-bottom:0}#foundationRegisteredAddress span{margin-right:.25rem}.m-footer-social{display:flex;align-items:center;justify-content:center;margin-bottom:20px}.m-footer-social a{display:inline-block;color:#c3d0e4;margin:0 15px}.m-footer-social a span{color:#c3d0e4;font-size:1rem}.rtl .m-footer-social{direction:ltr}.m-footer__logo{margin-bottom:14px}[data-aos-duration="50"] [data-aos],[data-aos][data-aos][data-aos-duration="50"]{transition-duration:50ms}[data-aos-delay="50"] [data-aos],[data-aos][data-aos][data-aos-delay="50"]{transition-delay:0}[data-aos-delay="50"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="50"].aos-animate{transition-delay:50ms}[data-aos-duration="100"] [data-aos],[data-aos][data-aos][data-aos-duration="100"]{transition-duration:.1s}[data-aos-delay="100"] [data-aos],[data-aos][data-aos][data-aos-delay="100"]{transition-delay:0}[data-aos-delay="100"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="100"].aos-animate{transition-delay:.1s}[data-aos-duration="150"] [data-aos],[data-aos][data-aos][data-aos-duration="150"]{transition-duration:.15s}[data-aos-delay="150"] [data-aos],[data-aos][data-aos][data-aos-delay="150"]{transition-delay:0}[data-aos-delay="150"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="150"].aos-animate{transition-delay:.15s}[data-aos-duration="200"] [data-aos],[data-aos][data-aos][data-aos-duration="200"]{transition-duration:.2s}[data-aos-delay="200"] [data-aos],[data-aos][data-aos][data-aos-delay="200"]{transition-delay:0}[data-aos-delay="200"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="200"].aos-animate{transition-delay:.2s}[data-aos-duration="250"] [data-aos],[data-aos][data-aos][data-aos-duration="250"]{transition-duration:.25s}[data-aos-delay="250"] [data-aos],[data-aos][data-aos][data-aos-delay="250"]{transition-delay:0}[data-aos-delay="250"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="250"].aos-animate{transition-delay:.25s}[data-aos-duration="300"] [data-aos],[data-aos][data-aos][data-aos-duration="300"]{transition-duration:.3s}[data-aos-delay="300"] [data-aos],[data-aos][data-aos][data-aos-delay="300"]{transition-delay:0}[data-aos-delay="300"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="300"].aos-animate{transition-delay:.3s}[data-aos-duration="350"] [data-aos],[data-aos][data-aos][data-aos-duration="350"]{transition-duration:.35s}[data-aos-delay="350"] [data-aos],[data-aos][data-aos][data-aos-delay="350"]{transition-delay:0}[data-aos-delay="350"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="350"].aos-animate{transition-delay:.35s}[data-aos-duration="400"] [data-aos],[data-aos][data-aos][data-aos-duration="400"]{transition-duration:.4s}[data-aos-delay="400"] [data-aos],[data-aos][data-aos][data-aos-delay="400"]{transition-delay:0}[data-aos-delay="400"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="400"].aos-animate{transition-delay:.4s}[data-aos-duration="450"] [data-aos],[data-aos][data-aos][data-aos-duration="450"]{transition-duration:.45s}[data-aos-delay="450"] [data-aos],[data-aos][data-aos][data-aos-delay="450"]{transition-delay:0}[data-aos-delay="450"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="450"].aos-animate{transition-delay:.45s}[data-aos-duration="500"] [data-aos],[data-aos][data-aos][data-aos-duration="500"]{transition-duration:.5s}[data-aos-delay="500"] [data-aos],[data-aos][data-aos][data-aos-delay="500"]{transition-delay:0}[data-aos-delay="500"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="500"].aos-animate{transition-delay:.5s}[data-aos-duration="550"] [data-aos],[data-aos][data-aos][data-aos-duration="550"]{transition-duration:.55s}[data-aos-delay="550"] [data-aos],[data-aos][data-aos][data-aos-delay="550"]{transition-delay:0}[data-aos-delay="550"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="550"].aos-animate{transition-delay:.55s}[data-aos-duration="600"] [data-aos],[data-aos][data-aos][data-aos-duration="600"]{transition-duration:.6s}[data-aos-delay="600"] [data-aos],[data-aos][data-aos][data-aos-delay="600"]{transition-delay:0}[data-aos-delay="600"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="600"].aos-animate{transition-delay:.6s}[data-aos-duration="650"] [data-aos],[data-aos][data-aos][data-aos-duration="650"]{transition-duration:.65s}[data-aos-delay="650"] [data-aos],[data-aos][data-aos][data-aos-delay="650"]{transition-delay:0}[data-aos-delay="650"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="650"].aos-animate{transition-delay:.65s}[data-aos-duration="700"] [data-aos],[data-aos][data-aos][data-aos-duration="700"]{transition-duration:.7s}[data-aos-delay="700"] [data-aos],[data-aos][data-aos][data-aos-delay="700"]{transition-delay:0}[data-aos-delay="700"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="700"].aos-animate{transition-delay:.7s}[data-aos-duration="750"] [data-aos],[data-aos][data-aos][data-aos-duration="750"]{transition-duration:.75s}[data-aos-delay="750"] [data-aos],[data-aos][data-aos][data-aos-delay="750"]{transition-delay:0}[data-aos-delay="750"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="750"].aos-animate{transition-delay:.75s}[data-aos-duration="800"] [data-aos],[data-aos][data-aos][data-aos-duration="800"]{transition-duration:.8s}[data-aos-delay="800"] [data-aos],[data-aos][data-aos][data-aos-delay="800"]{transition-delay:0}[data-aos-delay="800"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="800"].aos-animate{transition-delay:.8s}[data-aos-duration="850"] [data-aos],[data-aos][data-aos][data-aos-duration="850"]{transition-duration:.85s}[data-aos-delay="850"] [data-aos],[data-aos][data-aos][data-aos-delay="850"]{transition-delay:0}[data-aos-delay="850"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="850"].aos-animate{transition-delay:.85s}[data-aos-duration="900"] [data-aos],[data-aos][data-aos][data-aos-duration="900"]{transition-duration:.9s}[data-aos-delay="900"] [data-aos],[data-aos][data-aos][data-aos-delay="900"]{transition-delay:0}[data-aos-delay="900"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="900"].aos-animate{transition-delay:.9s}[data-aos-duration="950"] [data-aos],[data-aos][data-aos][data-aos-duration="950"]{transition-duration:.95s}[data-aos-delay="950"] [data-aos],[data-aos][data-aos][data-aos-delay="950"]{transition-delay:0}[data-aos-delay="950"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="950"].aos-animate{transition-delay:.95s}[data-aos-duration="1000"] [data-aos],[data-aos][data-aos][data-aos-duration="1000"]{transition-duration:1s}[data-aos-delay="1000"] [data-aos],[data-aos][data-aos][data-aos-delay="1000"]{transition-delay:0}[data-aos-delay="1000"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1000"].aos-animate{transition-delay:1s}[data-aos-duration="1050"] [data-aos],[data-aos][data-aos][data-aos-duration="1050"]{transition-duration:1.05s}[data-aos-delay="1050"] [data-aos],[data-aos][data-aos][data-aos-delay="1050"]{transition-delay:0}[data-aos-delay="1050"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1050"].aos-animate{transition-delay:1.05s}[data-aos-duration="1100"] [data-aos],[data-aos][data-aos][data-aos-duration="1100"]{transition-duration:1.1s}[data-aos-delay="1100"] [data-aos],[data-aos][data-aos][data-aos-delay="1100"]{transition-delay:0}[data-aos-delay="1100"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1100"].aos-animate{transition-delay:1.1s}[data-aos-duration="1150"] [data-aos],[data-aos][data-aos][data-aos-duration="1150"]{transition-duration:1.15s}[data-aos-delay="1150"] [data-aos],[data-aos][data-aos][data-aos-delay="1150"]{transition-delay:0}[data-aos-delay="1150"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1150"].aos-animate{transition-delay:1.15s}[data-aos-duration="1200"] [data-aos],[data-aos][data-aos][data-aos-duration="1200"]{transition-duration:1.2s}[data-aos-delay="1200"] [data-aos],[data-aos][data-aos][data-aos-delay="1200"]{transition-delay:0}[data-aos-delay="1200"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1200"].aos-animate{transition-delay:1.2s}[data-aos-duration="1250"] [data-aos],[data-aos][data-aos][data-aos-duration="1250"]{transition-duration:1.25s}[data-aos-delay="1250"] [data-aos],[data-aos][data-aos][data-aos-delay="1250"]{transition-delay:0}[data-aos-delay="1250"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1250"].aos-animate{transition-delay:1.25s}[data-aos-duration="1300"] [data-aos],[data-aos][data-aos][data-aos-duration="1300"]{transition-duration:1.3s}[data-aos-delay="1300"] [data-aos],[data-aos][data-aos][data-aos-delay="1300"]{transition-delay:0}[data-aos-delay="1300"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1300"].aos-animate{transition-delay:1.3s}[data-aos-duration="1350"] [data-aos],[data-aos][data-aos][data-aos-duration="1350"]{transition-duration:1.35s}[data-aos-delay="1350"] [data-aos],[data-aos][data-aos][data-aos-delay="1350"]{transition-delay:0}[data-aos-delay="1350"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1350"].aos-animate{transition-delay:1.35s}[data-aos-duration="1400"] [data-aos],[data-aos][data-aos][data-aos-duration="1400"]{transition-duration:1.4s}[data-aos-delay="1400"] [data-aos],[data-aos][data-aos][data-aos-delay="1400"]{transition-delay:0}[data-aos-delay="1400"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1400"].aos-animate{transition-delay:1.4s}[data-aos-duration="1450"] [data-aos],[data-aos][data-aos][data-aos-duration="1450"]{transition-duration:1.45s}[data-aos-delay="1450"] [data-aos],[data-aos][data-aos][data-aos-delay="1450"]{transition-delay:0}[data-aos-delay="1450"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1450"].aos-animate{transition-delay:1.45s}[data-aos-duration="1500"] [data-aos],[data-aos][data-aos][data-aos-duration="1500"]{transition-duration:1.5s}[data-aos-delay="1500"] [data-aos],[data-aos][data-aos][data-aos-delay="1500"]{transition-delay:0}[data-aos-delay="1500"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1500"].aos-animate{transition-delay:1.5s}[data-aos-duration="1550"] [data-aos],[data-aos][data-aos][data-aos-duration="1550"]{transition-duration:1.55s}[data-aos-delay="1550"] [data-aos],[data-aos][data-aos][data-aos-delay="1550"]{transition-delay:0}[data-aos-delay="1550"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1550"].aos-animate{transition-delay:1.55s}[data-aos-duration="1600"] [data-aos],[data-aos][data-aos][data-aos-duration="1600"]{transition-duration:1.6s}[data-aos-delay="1600"] [data-aos],[data-aos][data-aos][data-aos-delay="1600"]{transition-delay:0}[data-aos-delay="1600"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1600"].aos-animate{transition-delay:1.6s}[data-aos-duration="1650"] [data-aos],[data-aos][data-aos][data-aos-duration="1650"]{transition-duration:1.65s}[data-aos-delay="1650"] [data-aos],[data-aos][data-aos][data-aos-delay="1650"]{transition-delay:0}[data-aos-delay="1650"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1650"].aos-animate{transition-delay:1.65s}[data-aos-duration="1700"] [data-aos],[data-aos][data-aos][data-aos-duration="1700"]{transition-duration:1.7s}[data-aos-delay="1700"] [data-aos],[data-aos][data-aos][data-aos-delay="1700"]{transition-delay:0}[data-aos-delay="1700"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1700"].aos-animate{transition-delay:1.7s}[data-aos-duration="1750"] [data-aos],[data-aos][data-aos][data-aos-duration="1750"]{transition-duration:1.75s}[data-aos-delay="1750"] [data-aos],[data-aos][data-aos][data-aos-delay="1750"]{transition-delay:0}[data-aos-delay="1750"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1750"].aos-animate{transition-delay:1.75s}[data-aos-duration="1800"] [data-aos],[data-aos][data-aos][data-aos-duration="1800"]{transition-duration:1.8s}[data-aos-delay="1800"] [data-aos],[data-aos][data-aos][data-aos-delay="1800"]{transition-delay:0}[data-aos-delay="1800"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1800"].aos-animate{transition-delay:1.8s}[data-aos-duration="1850"] [data-aos],[data-aos][data-aos][data-aos-duration="1850"]{transition-duration:1.85s}[data-aos-delay="1850"] [data-aos],[data-aos][data-aos][data-aos-delay="1850"]{transition-delay:0}[data-aos-delay="1850"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1850"].aos-animate{transition-delay:1.85s}[data-aos-duration="1900"] [data-aos],[data-aos][data-aos][data-aos-duration="1900"]{transition-duration:1.9s}[data-aos-delay="1900"] [data-aos],[data-aos][data-aos][data-aos-delay="1900"]{transition-delay:0}[data-aos-delay="1900"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1900"].aos-animate{transition-delay:1.9s}[data-aos-duration="1950"] [data-aos],[data-aos][data-aos][data-aos-duration="1950"]{transition-duration:1.95s}[data-aos-delay="1950"] [data-aos],[data-aos][data-aos][data-aos-delay="1950"]{transition-delay:0}[data-aos-delay="1950"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="1950"].aos-animate{transition-delay:1.95s}[data-aos-duration="2000"] [data-aos],[data-aos][data-aos][data-aos-duration="2000"]{transition-duration:2s}[data-aos-delay="2000"] [data-aos],[data-aos][data-aos][data-aos-delay="2000"]{transition-delay:0}[data-aos-delay="2000"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2000"].aos-animate{transition-delay:2s}[data-aos-duration="2050"] [data-aos],[data-aos][data-aos][data-aos-duration="2050"]{transition-duration:2.05s}[data-aos-delay="2050"] [data-aos],[data-aos][data-aos][data-aos-delay="2050"]{transition-delay:0}[data-aos-delay="2050"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2050"].aos-animate{transition-delay:2.05s}[data-aos-duration="2100"] [data-aos],[data-aos][data-aos][data-aos-duration="2100"]{transition-duration:2.1s}[data-aos-delay="2100"] [data-aos],[data-aos][data-aos][data-aos-delay="2100"]{transition-delay:0}[data-aos-delay="2100"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2100"].aos-animate{transition-delay:2.1s}[data-aos-duration="2150"] [data-aos],[data-aos][data-aos][data-aos-duration="2150"]{transition-duration:2.15s}[data-aos-delay="2150"] [data-aos],[data-aos][data-aos][data-aos-delay="2150"]{transition-delay:0}[data-aos-delay="2150"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2150"].aos-animate{transition-delay:2.15s}[data-aos-duration="2200"] [data-aos],[data-aos][data-aos][data-aos-duration="2200"]{transition-duration:2.2s}[data-aos-delay="2200"] [data-aos],[data-aos][data-aos][data-aos-delay="2200"]{transition-delay:0}[data-aos-delay="2200"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2200"].aos-animate{transition-delay:2.2s}[data-aos-duration="2250"] [data-aos],[data-aos][data-aos][data-aos-duration="2250"]{transition-duration:2.25s}[data-aos-delay="2250"] [data-aos],[data-aos][data-aos][data-aos-delay="2250"]{transition-delay:0}[data-aos-delay="2250"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2250"].aos-animate{transition-delay:2.25s}[data-aos-duration="2300"] [data-aos],[data-aos][data-aos][data-aos-duration="2300"]{transition-duration:2.3s}[data-aos-delay="2300"] [data-aos],[data-aos][data-aos][data-aos-delay="2300"]{transition-delay:0}[data-aos-delay="2300"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2300"].aos-animate{transition-delay:2.3s}[data-aos-duration="2350"] [data-aos],[data-aos][data-aos][data-aos-duration="2350"]{transition-duration:2.35s}[data-aos-delay="2350"] [data-aos],[data-aos][data-aos][data-aos-delay="2350"]{transition-delay:0}[data-aos-delay="2350"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2350"].aos-animate{transition-delay:2.35s}[data-aos-duration="2400"] [data-aos],[data-aos][data-aos][data-aos-duration="2400"]{transition-duration:2.4s}[data-aos-delay="2400"] [data-aos],[data-aos][data-aos][data-aos-delay="2400"]{transition-delay:0}[data-aos-delay="2400"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2400"].aos-animate{transition-delay:2.4s}[data-aos-duration="2450"] [data-aos],[data-aos][data-aos][data-aos-duration="2450"]{transition-duration:2.45s}[data-aos-delay="2450"] [data-aos],[data-aos][data-aos][data-aos-delay="2450"]{transition-delay:0}[data-aos-delay="2450"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2450"].aos-animate{transition-delay:2.45s}[data-aos-duration="2500"] [data-aos],[data-aos][data-aos][data-aos-duration="2500"]{transition-duration:2.5s}[data-aos-delay="2500"] [data-aos],[data-aos][data-aos][data-aos-delay="2500"]{transition-delay:0}[data-aos-delay="2500"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2500"].aos-animate{transition-delay:2.5s}[data-aos-duration="2550"] [data-aos],[data-aos][data-aos][data-aos-duration="2550"]{transition-duration:2.55s}[data-aos-delay="2550"] [data-aos],[data-aos][data-aos][data-aos-delay="2550"]{transition-delay:0}[data-aos-delay="2550"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2550"].aos-animate{transition-delay:2.55s}[data-aos-duration="2600"] [data-aos],[data-aos][data-aos][data-aos-duration="2600"]{transition-duration:2.6s}[data-aos-delay="2600"] [data-aos],[data-aos][data-aos][data-aos-delay="2600"]{transition-delay:0}[data-aos-delay="2600"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2600"].aos-animate{transition-delay:2.6s}[data-aos-duration="2650"] [data-aos],[data-aos][data-aos][data-aos-duration="2650"]{transition-duration:2.65s}[data-aos-delay="2650"] [data-aos],[data-aos][data-aos][data-aos-delay="2650"]{transition-delay:0}[data-aos-delay="2650"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2650"].aos-animate{transition-delay:2.65s}[data-aos-duration="2700"] [data-aos],[data-aos][data-aos][data-aos-duration="2700"]{transition-duration:2.7s}[data-aos-delay="2700"] [data-aos],[data-aos][data-aos][data-aos-delay="2700"]{transition-delay:0}[data-aos-delay="2700"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2700"].aos-animate{transition-delay:2.7s}[data-aos-duration="2750"] [data-aos],[data-aos][data-aos][data-aos-duration="2750"]{transition-duration:2.75s}[data-aos-delay="2750"] [data-aos],[data-aos][data-aos][data-aos-delay="2750"]{transition-delay:0}[data-aos-delay="2750"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2750"].aos-animate{transition-delay:2.75s}[data-aos-duration="2800"] [data-aos],[data-aos][data-aos][data-aos-duration="2800"]{transition-duration:2.8s}[data-aos-delay="2800"] [data-aos],[data-aos][data-aos][data-aos-delay="2800"]{transition-delay:0}[data-aos-delay="2800"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2800"].aos-animate{transition-delay:2.8s}[data-aos-duration="2850"] [data-aos],[data-aos][data-aos][data-aos-duration="2850"]{transition-duration:2.85s}[data-aos-delay="2850"] [data-aos],[data-aos][data-aos][data-aos-delay="2850"]{transition-delay:0}[data-aos-delay="2850"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2850"].aos-animate{transition-delay:2.85s}[data-aos-duration="2900"] [data-aos],[data-aos][data-aos][data-aos-duration="2900"]{transition-duration:2.9s}[data-aos-delay="2900"] [data-aos],[data-aos][data-aos][data-aos-delay="2900"]{transition-delay:0}[data-aos-delay="2900"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2900"].aos-animate{transition-delay:2.9s}[data-aos-duration="2950"] [data-aos],[data-aos][data-aos][data-aos-duration="2950"]{transition-duration:2.95s}[data-aos-delay="2950"] [data-aos],[data-aos][data-aos][data-aos-delay="2950"]{transition-delay:0}[data-aos-delay="2950"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="2950"].aos-animate{transition-delay:2.95s}[data-aos-duration="3000"] [data-aos],[data-aos][data-aos][data-aos-duration="3000"]{transition-duration:3s}[data-aos-delay="3000"] [data-aos],[data-aos][data-aos][data-aos-delay="3000"]{transition-delay:0}[data-aos-delay="3000"] [data-aos].aos-animate,[data-aos][data-aos][data-aos-delay="3000"].aos-animate{transition-delay:3s}[data-aos-easing=linear] [data-aos],[data-aos][data-aos][data-aos-easing=linear]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos-easing=ease] [data-aos],[data-aos][data-aos][data-aos-easing=ease]{transition-timing-function:ease}[data-aos-easing=ease-in] [data-aos],[data-aos][data-aos][data-aos-easing=ease-in]{transition-timing-function:ease-in}[data-aos-easing=ease-out] [data-aos],[data-aos][data-aos][data-aos-easing=ease-out]{transition-timing-function:ease-out}[data-aos-easing=ease-in-out] [data-aos],[data-aos][data-aos][data-aos-easing=ease-in-out]{transition-timing-function:ease-in-out}[data-aos-easing=ease-in-back] [data-aos],[data-aos][data-aos][data-aos-easing=ease-in-back]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos-easing=ease-out-back] [data-aos],[data-aos][data-aos][data-aos-easing=ease-out-back]{transition-timing-function:cubic-bezier(.175,.885,.32,10.275)}[data-aos-easing=ease-in-out-back] [data-aos],[data-aos][data-aos][data-aos-easing=ease-in-out-back]{transition-timing-function:cubic-bezier(.68,-.55,.265,10.55)}[data-aos-easing=ease-in-sine] [data-aos],[data-aos][data-aos][data-aos-easing=ease-in-sine]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos-easing=ease-out-sine] [data-aos],[data-aos][data-aos][data-aos-easing=ease-out-sine]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos-easing=ease-in-out-sine] [data-aos],[data-aos][data-aos][data-aos-easing=ease-in-out-sine]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos-easing=ease-in-quad] [data-aos],[data-aos][data-aos][data-aos-easing=ease-in-quad]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos-easing=ease-out-quad] [data-aos],[data-aos][data-aos][data-aos-easing=ease-out-quad]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos-easing=ease-in-out-quad] [data-aos],[data-aos][data-aos][data-aos-easing=ease-in-out-quad]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos-easing=ease-in-cubic] [data-aos],[data-aos][data-aos][data-aos-easing=ease-in-cubic]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos-easing=ease-out-cubic] [data-aos],[data-aos][data-aos][data-aos-easing=ease-out-cubic]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos-easing=ease-in-out-cubic] [data-aos],[data-aos][data-aos][data-aos-easing=ease-in-out-cubic]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos-easing=ease-in-quart] [data-aos],[data-aos][data-aos][data-aos-easing=ease-in-quart]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos-easing=ease-out-quart] [data-aos],[data-aos][data-aos][data-aos-easing=ease-out-quart]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos-easing=ease-in-out-quart] [data-aos],[data-aos][data-aos][data-aos-easing=ease-in-out-quart]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos^=fade][data-aos^=fade]:not(.no-aos-animation){opacity:0;transition-property:opacity,transform}[data-aos^=fade][data-aos^=fade]:not(.no-aos-animation).aos-animate{opacity:1;transform:translateZ(0)}[data-aos=fade-up]:not(.no-aos-animation){transform:translate3d(0,100px,0)}[data-aos=fade-down]:not(.no-aos-animation){transform:translate3d(0,-100px,0)}.glide{position:relative;box-sizing:border-box}.glide *{box-sizing:inherit}.glide__track{height:100%;overflow:hidden}.glide__slides{position:relative;width:100%;list-style:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform-style:preserve-3d;touch-action:pan-Y;overflow:hidden;padding:0;white-space:nowrap;display:flex;flex-wrap:nowrap;will-change:transform}.glide__slide,.glide__slides--dragging{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.glide__slide{width:100%;height:100%;flex-shrink:0;white-space:normal;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.glide__slide a{-webkit-user-drag:none}.glide__arrows,.glide__bullets,.glide__slide a{-webkit-user-select:none;-moz-user-select:none;user-select:none;-ms-user-select:none}.glide__arrows,.glide__bullets{-webkit-touch-callout:none}.glide--rtl{direction:rtl} \ No newline at end of file +/*! sanitize.css v7.0.2 | CC0 License | github.com/csstools/sanitize.css */ +/* Document + * ========================================================================== */ +/** + * 1. Remove repeating backgrounds in all browsers (opinionated). + * 2. Add border box sizing in all browsers (opinionated). + */ +*, +::before, +::after { + background-repeat: no-repeat; /* 1 */ + box-sizing: border-box; /* 2 */ +} + +/** + * 1. Add text decoration inheritance in all browsers (opinionated). + * 2. Add vertical alignment inheritance in all browsers (opinionated). + */ +::before, +::after { + text-decoration: inherit; /* 1 */ + vertical-align: inherit; /* 2 */ +} + +/** + * 1. Use the default cursor in all browsers (opinionated). + * 2. Use the default user interface font in all browsers (opinionated). + * 3. Correct the line height in all browsers. + * 4. Use a 4-space tab width in all browsers (opinionated). + * 5. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + * 6. Breaks words to prevent overflow in all browsers (opinionated). + */ +html { + font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Oxygen, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 2 */ + line-height: 1.15; /* 3 */ + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; /* 4 */ + word-break: break-word; /* 6 */ +} + +/* Sections + * ========================================================================== */ +/** + * Remove the margin in all browsers (opinionated). + */ +body { + margin: 0; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + * ========================================================================== */ +/** + * 1. Add the correct sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * Add the correct display in IE. + */ +main { + display: block; +} + +/** + * Remove the list style on navigation lists in all browsers (opinionated). + */ +nav ol, +nav ul { + list-style: none; +} + +/** + * 1. Use the default monospace user interface font + * in all browsers (opinionated). + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: Menlo, Consolas, Roboto Mono, Ubuntu Monospace, Oxygen Mono, Liberation Mono, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + * ========================================================================== */ +/** + * Remove the gray background on active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * Add the correct text decoration in Edge, IE, Opera, and Safari. + */ +abbr[title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} + +/** + * 1. Use the default monospace user interface font + * in all browsers (opinionated). + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: Menlo, Consolas, Roboto Mono, Ubuntu Monospace, Oxygen Mono, Liberation Mono, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} + +/* + * Remove the text shadow on text selections in Firefox 61- (opinionated). + * 1. Restore the coloring undone by defining the text shadow + * in all browsers (opinionated). + */ +::-moz-selection { + background-color: #b3d4fc; /* 1 */ + color: #000; /* 1 */ + text-shadow: none; +} + +::selection { + background-color: #b3d4fc; /* 1 */ + color: #000; /* 1 */ + text-shadow: none; +} + +/* Embedded content + * ========================================================================== */ +/* + * Change the alignment on media elements in all browers (opinionated). + */ +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; +} + +/** + * Add the correct display in IE 9-. + */ +audio, +video { + display: inline-block; +} + +/** + * Add the correct display in iOS 4-7. + */ +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Remove the border on images inside links in IE 10-. + */ +img { + border-style: none; +} + +/** + * Change the fill color to match the text color in all browsers (opinionated). + */ +svg { + fill: currentColor; +} + +/** + * Hide the overflow in IE. + */ +svg:not(:root) { + overflow: hidden; +} + +/* Tabular data + * ========================================================================== */ +/** + * Collapse border spacing in all browsers (opinionated). + */ +table { + border-collapse: collapse; +} + +/* Forms + * ========================================================================== */ +/** + * Inherit styling in all browsers (opinionated). + */ +button, +input, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +/** + * Remove the margin in Safari. + */ +button, +input, +select { + margin: 0; +} + +/** + * 1. Show the overflow in IE. + * 2. Remove the inheritance of text transform in Edge, Firefox, and IE. + */ +button { + overflow: visible; /* 1 */ + text-transform: none; /* 2 */ +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button; +} + +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * Show the overflow in Edge and IE. + */ +input { + overflow: visible; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + */ +legend { + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + white-space: normal; /* 1 */ +} + +/** + * 1. Add the correct display in Edge and IE. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Remove the inheritance of text transform in Firefox. + */ +select { + text-transform: none; +} + +/** + * 1. Remove the margin in Firefox and Safari. + * 2. Remove the default vertical scrollbar in IE. + * 3. Change the resize direction on textareas in all browsers (opinionated). + */ +textarea { + margin: 0; /* 1 */ + overflow: auto; /* 2 */ + resize: vertical; /* 3 */ +} + +/** + * Remove the padding in IE 10-. + */ +[type=checkbox], +[type=radio] { + padding: 0; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type=search] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Safari. + */ +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/** + * Correct the text style of placeholders in Chrome, Edge, and Safari. + */ +::-webkit-input-placeholder { + color: inherit; + opacity: 0.54; +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/** + * Remove the inner border and padding of focus outlines in Firefox. + */ +::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus outline styles unset by the previous rule in Firefox. + */ +:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/* Interactive + * ========================================================================== */ +/* + * Add the correct display in Edge and IE. + */ +details { + display: block; +} + +/* + * Add the correct styles in Edge, IE, and Safari. + */ +dialog { + background-color: white; + border: solid; + color: black; + display: block; + height: -moz-fit-content; + height: -webkit-fit-content; + height: fit-content; + left: 0; + margin: auto; + padding: 1em; + position: absolute; + right: 0; + width: -moz-fit-content; + width: -webkit-fit-content; + width: fit-content; +} + +dialog:not([open]) { + display: none; +} + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} + +/* Scripting + * ========================================================================== */ +/** + * Add the correct display in IE 9-. + */ +canvas { + display: inline-block; +} + +/** + * Add the correct display in IE. + */ +template { + display: none; +} + +/* User interaction + * ========================================================================== */ +/* + * 1. Remove the tapping delay on clickable elements + in all browsers (opinionated). + * 2. Remove the tapping delay in IE 10. + */ +a, +area, +button, +input, +label, +select, +summary, +textarea, +[tabindex] { /* 1 */ + touch-action: manipulation; /* 2 */ +} + +/** + * Add the correct display in IE 10-. + */ +[hidden] { + display: none; +} + +/* Accessibility + * ========================================================================== */ +/** + * Change the cursor on busy elements in all browsers (opinionated). + */ +[aria-busy=true] { + cursor: progress; +} + +/* + * Change the cursor on control elements in all browsers (opinionated). + */ +[aria-controls] { + cursor: pointer; +} + +/* + * Change the cursor on disabled, not-editable, or otherwise + * inoperable elements in all browsers (opinionated). + */ +[aria-disabled], +[disabled] { + cursor: disabled; +} + +/* + * Change the display on visually hidden accessible elements + * in all browsers (opinionated). + */ +[aria-hidden=false][hidden]:not(:focus) { + clip: rect(0, 0, 0, 0); + display: inherit; + position: absolute; +} + +/** Mixins */ /** Colors */ +/** Config */ +:root { + --announcement-bar-height: 0px; + --show-fade-animation: 1; +} + +:root { + --announcements-tag-color: #4140df; + --regulatory-affairs-tag-color: #978df2; + --social-impact-tag-color: #ca92f3; + --mobility-tag-color: #d038ba; +} + +:root, +[data-theme=light] { + --background-color: #fff; + --page-bg-color: #f6f8fc; + --secondary-background-color: #fff; + --menu-list-color: #8493ad; + --primary-foreground-color: #4a4a4a; + --secondary-foreground-color: #000; + --primary-subtle-color: #00e0ca; + --secondary-subtle-color: #76e2cb; + --titles-color: #00121f; + --link-color: #76e2cb; + --primary-border-color: #eef2fa; + --secondary-border-color: aliceblue; + --article-shadow-normal: 0px 4px 10px rgba(132, 147, 173, 0.1); + --article-shadow-hover: 0 4px 20px 0 rgba(132, 147, 173, 0.1); + --transparent-background-color: rgba(255, 255, 255, 0.99); + --footer-background-color: #061a28; + --submenu-shadow-color-opacity: 0.25; + --button-shadow-color-normal: rgba(108, 108, 108, 0.2); + --button-shadow-color-hover: rgba(108, 108, 108, 0.3); + --table-background-color-odd: #eef2fa; + --table-head-border-bottom: #e2e2e2; + --toggle-darkmode-button-display-moon: block; + --toggle-darkmode-button-display-sun: none; + --toggle-darkmode-background-color: rgba(0, 0, 0, 0.05); + --header-menu-gradient-first-color: rgba(255, 255, 255, 0); + --header-menu-gradient-second-color: rgba(255, 255, 255, 1); + --kg-card-img-invert-color: 0; +} + +[data-theme=dark] { + --background-color: #00121f; + --page-bg-color: #00121f; + --secondary-background-color: #061a28; + --menu-list-color: #8493ad; + --primary-foreground-color: #ccc; + --secondary-foreground-color: #fff; + --primary-subtle-color: #00e0ca; + --secondary-subtle-color: #76e2cb; + --titles-color: #ffffff; + --link-color: #76e2cb; + --primary-border-color: #485776; + --secondary-border-color: #0f0f0f; + --article-shadow-normal: 0px 4px 10px #09142b; + --article-shadow-hover: 0 4px 20px 0 #09142b; + --transparent-background-color: rgba(0, 0, 0, 0.99); + --footer-background-color: #061a28; + --submenu-shadow-color-opacity: 0.55; + --button-shadow-color-normal: rgba(10, 10, 10, 0.5); + --button-shadow-color-hover: rgba(10, 10, 10, 0.5); + --table-background-color-odd: #050505; + --table-head-border-bottom: #485776; + --toggle-darkmode-button-display-moon: none; + --toggle-darkmode-button-display-sun: block; + --toggle-darkmode-background-color: rgba(0, 0, 0, 0.5); + --header-menu-gradient-first-color: rgba(17, 17, 17, 0); + --header-menu-gradient-second-color: rgba(17, 17, 17, 0.65); + --kg-card-img-invert-color: 1; +} + +@media (prefers-color-scheme: dark) { + :root:not([data-theme=light]) { + --background-color: #00121f; + --page-bg-color: #00121f; + --secondary-background-color: #061a28; + --menu-list-color: #8493ad; + --primary-foreground-color: #ccc; + --secondary-foreground-color: #fff; + --primary-subtle-color: #00e0ca; + --secondary-subtle-color: #76e2cb; + --titles-color: #ffffff; + --link-color: #76e2cb; + --primary-border-color: #485776; + --secondary-border-color: #0f0f0f; + --article-shadow-normal: 0px 4px 10px #09142b; + --article-shadow-hover: 0 4px 20px 0 #09142b; + --transparent-background-color: rgba(0, 0, 0, 0.99); + --footer-background-color: #061a28; + --submenu-shadow-color-opacity: 0.55; + --button-shadow-color-normal: rgba(10, 10, 10, 0.5); + --button-shadow-color-hover: rgba(10, 10, 10, 0.5); + --table-background-color-odd: #050505; + --table-head-border-bottom: #485776; + --toggle-darkmode-button-display-moon: none; + --toggle-darkmode-button-display-sun: block; + --toggle-darkmode-background-color: rgba(0, 0, 0, 0.5); + --header-menu-gradient-first-color: rgba(17, 17, 17, 0); + --header-menu-gradient-second-color: rgba(17, 17, 17, 0.65); + --kg-card-img-invert-color: 1; + } +} +/** Helpers */ +.hide { + display: none; +} + +.sr-only { + clip: rect(0 0 0 0); + -webkit-clip-path: inset(100%); + clip-path: inset(100%); + position: absolute; + width: 1px; + height: 1px; + overflow: hidden; + white-space: nowrap; +} + +.focusable:focus, .m-toggle-darkmode input:focus, .m-icon-button:focus, .m-button:focus { + box-shadow: 0 0 0 2px var(--primary-subtle-color) !important; +} + +.content-centered, .m-hero, .m-icon-button { + display: flex; + align-items: center; + justify-content: center; +} + +.no-appearance, .m-toggle-darkmode input, .m-input, .m-icon-button, .m-button { + -webkit-appearance: none !important; + -moz-appearance: none !important; + appearance: none !important; +} + +.no-padding { + padding: 0; +} + +.no-margin { + margin: 0; +} + +.no-scroll-y { + overflow-y: hidden; +} + +.align-center { + text-align: center; +} + +.align-left { + text-align: left; +} + +.align-right { + text-align: right; +} + +.pos-relative { + position: relative; +} + +.pos-absolute { + position: absolute; +} + +.bold { + font-weight: bold; +} + +.underline { + text-decoration: underline; +} + +.uppercase { + text-transform: uppercase; +} + +.pointer { + cursor: pointer; +} + +.only-desktop { + display: none; +} +@media only screen and (min-width: 48rem) { + .only-desktop { + display: block; + } +} + +/** Icons */ +[class^=icon-], [class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: "icomoon" !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-moon:before { + content: "\e90f"; +} + +.icon-sunny:before { + content: "\e910"; +} + +.icon-chevron-down:before { + content: "\e900"; +} + +.icon-star:before { + content: "\e901"; +} + +.icon-arrow-left:before { + content: "\e902"; +} + +.icon-arrow-right:before { + content: "\e903"; +} + +.icon-arrow-top:before { + content: "\e904"; +} + +.icon-close:before { + content: "\e905"; +} + +.icon-comments:before { + content: "\e906"; +} + +.icon-facebook:before { + content: "\e907"; +} + +.icon-globe:before { + content: "\e908"; +} + +.icon-menu:before { + content: "\e909"; +} + +.icon-more:before { + content: "\e90a"; +} + +.icon-search:before { + content: "\e90b"; +} + +.icon-twitter:before { + content: "\e90c"; +} + +.icon-imdb:before { + content: "\e90d"; +} + +.icon-vk:before { + content: "\e90e"; +} + +.icon-steam:before { + content: "\e914"; +} + +.icon-twitch:before { + content: "\e915"; +} + +.icon-youtube:before { + content: "\e916"; +} + +.icon-vimeo:before { + content: "\e917"; +} + +.icon-whatsapp:before { + content: "\e918"; +} + +.icon-reddit:before { + content: "\e919"; +} + +.icon-rss:before { + content: "\e91a"; +} + +.icon-spotify:before { + content: "\e91b"; +} + +.icon-telegram:before { + content: "\e91c"; +} + +.icon-soundcloud:before { + content: "\e91d"; +} + +.icon-flickr:before { + content: "\e91e"; +} + +.icon-letterboxd:before { + content: "\e91f"; +} + +.icon-odnoklassniki:before { + content: "\e920"; +} + +.icon-pinterest:before { + content: "\e921"; +} + +.icon-tiktok:before { + content: "\e922"; +} + +.icon-tumblr:before { + content: "\e923"; +} + +.icon-xing:before { + content: "\e924"; +} + +.icon-mixcloud:before { + content: "\e925"; +} + +.icon-mixer:before { + content: "\e926"; +} + +.icon-wechat:before { + content: "\e927"; +} + +.icon-deviantart:before { + content: "\e928"; +} + +.icon-discord:before { + content: "\e929"; +} + +.icon-instagram:before { + content: "\e92a"; +} + +.icon-linkedin:before { + content: "\e92b"; +} + +.icon-snapchat:before { + content: "\e92c"; +} + +.icon-gitlab:before { + content: "\e92d"; +} + +.icon-github:before { + content: "\e930"; +} + +.icon-behance:before { + content: "\e951"; +} + +/** Global styles */ +body { + display: flex; + flex-direction: column; + width: 100%; + min-height: 100vh; + color: var(--primary-foreground-color); + font-size: 1rem; + line-height: 1.5rem; + font-family: "Inter", sans-serif; + font-display: swap; + overflow-x: hidden; + background-color: var(--page-bg-color); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + transition: padding-top linear 0.2s; +} +body.share-menu-displayed { + padding-bottom: 45px; +} +@media only screen and (min-width: 48rem) { + body.share-menu-displayed { + padding-bottom: 0; + } +} + +.main-wrap { + display: flex; + flex-direction: column; + flex-grow: 1; +} + +p { + line-height: 1.3; + margin: 0; +} + +a { + color: inherit; + text-decoration: none; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; + position: relative; +} + +.tippy-popper * { + text-align: left !important; +} + +.medium-zoom-overlay { + background-color: var(--background-color) !important; +} + +.medium-zoom-overlay, +.medium-zoom-image { + z-index: 5; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: "Metropolis"; + font-weight: 700; + color: var(--titles-color); + line-height: 1.25; + letter-spacing: 0.02rem; + color: var(--titles-color); +} + +h1 { + font-size: 2.25rem; +} +@media only screen and (min-width: 48rem) { + h1 { + font-size: 2.5rem; + margin-bottom: 20px; + } +} + +h2 { + font-size: 2rem; +} +@media only screen and (min-width: 48rem) { + h2 { + font-size: 2.25rem; + } +} + +h3 { + font-size: 1.75rem; +} +@media only screen and (min-width: 48rem) { + h3 { + font-size: 1.875rem; + } +} + +h4, +h5, +h6 { + font-size: 1.25rem; +} + +.headline-stick { + height: 4px; + background-color: #00e0ca; + margin-bottom: 1.25rem; + width: 16px; + margin-left: auto; + margin-right: auto; +} +.headline-stick.size-s { + width: 24px; +} +.headline-stick.size-m { + width: 48px; +} +.headline-stick.size-l { + width: 80px; +} +.headline-stick.size-xl { + width: 120px; +} + +[data-animate^=fade] { + opacity: calc((var(--show-fade-animation) - 1) * -1); + -webkit-animation: fadeAnimation 500ms linear forwards; + animation: fadeAnimation 500ms linear forwards; +} +@-webkit-keyframes fadeAnimation { + 0% { + opacity: calc((var(--show-fade-animation) - 1) * -1); + } + 100% { + opacity: 1; + } +} +@keyframes fadeAnimation { + 0% { + opacity: calc((var(--show-fade-animation) - 1) * -1); + } + 100% { + opacity: 1; + } +} + +[data-animate=fade-up] { + -webkit-animation: fadeUpAnimation 500ms cubic-bezier(0.77,0,0.18,1) 300ms forwards; + animation: fadeUpAnimation 500ms cubic-bezier(0.77,0,0.18,1) 300ms forwards; +} +@-webkit-keyframes fadeUpAnimation { + 0% { + opacity: calc((var(--show-fade-animation) - 1) * -1); + transform: translateY(calc(100px * var(--show-fade-animation))); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} +@keyframes fadeUpAnimation { + 0% { + opacity: calc((var(--show-fade-animation) - 1) * -1); + transform: translateY(calc(100px * var(--show-fade-animation))); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +[data-animate=fade-down] { + -webkit-animation: fadeDownAnimation 500ms cubic-bezier(0.77,0,0.18,1) forwards; + animation: fadeDownAnimation 500ms cubic-bezier(0.77,0,0.18,1) forwards; +} +@-webkit-keyframes fadeDownAnimation { + 0% { + opacity: calc((var(--show-fade-animation) - 1) * -1); + transform: translateY(calc((100px * -1) * var(--show-fade-animation))); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} +@keyframes fadeDownAnimation { + 0% { + opacity: calc((var(--show-fade-animation) - 1) * -1); + transform: translateY(calc((100px * -1) * var(--show-fade-animation))); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +.l-wrapper { + position: relative; + width: 100%; + margin: 0 auto; + padding: 0 20px; +} +@media only screen and (min-width: 48rem) { + .l-wrapper { + max-width: 1200px; + } +} +@media only screen and (min-width: 80rem) { + .l-wrapper { + padding: 0; + } +} +.l-wrapper.in-submenu { + padding: 0; +} +@media only screen and (min-width: 48rem) { + .l-wrapper.in-submenu { + padding: 0 20px; + } +} +@media only screen and (min-width: 80rem) { + .l-wrapper.in-submenu { + padding: 0; + } +} +@media only screen and (min-width: 48rem) { + .l-wrapper.in-post { + max-width: 960px; + } +} +.l-wrapper.in-comments { + color: var(--primary-foreground-color); +} +@media only screen and (min-width: 48rem) { + .l-wrapper.in-comments { + max-width: 820px; + } +} +@media only screen and (min-width: 64rem) { + .l-wrapper.in-recommended { + padding: 0; + max-width: calc(100% - 60px); + } +} +@media only screen and (min-width: 90rem) { + .l-wrapper.in-recommended { + max-width: 1200px; + } +} + +.l-wrapper.in-post.no-image { + padding-top: 40px; +} +@media only screen and (min-width: 48rem) { + .l-wrapper.in-post.no-image { + padding-top: 80px; + } +} + +.l-wrapper.in-caption { + padding-top: 10px; +} + +.l-content { + padding: 40px 0 20px; +} +@media only screen and (min-width: 48rem) { + .l-content { + padding: 60px 0 40px; + } +} + +.m-button { + display: inline-block; + color: #333; + text-align: center; + letter-spacing: 0.2px; + line-height: 1; + font-size: 1rem; + font-weight: 600; + border-radius: 5px; + padding: 13px 25px; + cursor: pointer; + outline: 0; + border: 0; + position: relative; + background-color: transparent; + transition: all 0.25s cubic-bezier(0.02, 0.01, 0.47, 1); +} +.m-button.outlined { + color: var(--titles-color); + border: 1px solid var(--primary-foreground-color); +} +.m-button.filled, .m-button.primary { + box-shadow: 0 2px 4px var(--button-shadow-color-normal), 0 0 0 transparent; +} +.m-button.filled:hover, .m-button.primary:hover { + transform: translateY(-2px); + box-shadow: 0 4px 8px var(--button-shadow-color-hover), 0 0 0 transparent; +} +.m-button.filled { + border-radius: 5px; + background-color: #fff; +} +.m-button.block { + display: block; + width: 100%; +} +.m-button.primary { + color: #fff; + background-color: var(--primary-subtle-color); +} +.m-button.loading { + cursor: default; + overflow: hidden; +} +.m-button.loading:after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + width: 25%; + height: 2px; + background-color: #fff; + -webkit-animation: loading 1s infinite; + animation: loading 1s infinite; +} +@-webkit-keyframes loading { + 0% { + transform: translatex(0); + } + 50% { + transform: translatex(300%); + } + 100% { + transform: translatex(0); + } +} +@keyframes loading { + 0% { + transform: translatex(0); + } + 50% { + transform: translatex(300%); + } + 100% { + transform: translatex(0); + } +} + +.m-icon-button { + color: var(--titles-color); + font-size: 1.125rem; + border: 0; + outline: 0; + padding: 0; + cursor: pointer; + border-radius: 50%; + background-color: transparent; +} +.m-icon-button.outlined { + border: 1px solid var(--primary-foreground-color); +} +.m-icon-button.filled { + background-color: var(--background-color); + box-shadow: 0 2px 4px var(--button-shadow-color-normal), 0 0 0 transparent; + transition: all 0.25s cubic-bezier(0.02, 0.01, 0.47, 1); +} +.m-icon-button.filled:hover { + box-shadow: 0 4px 8px var(--button-shadow-color-hover), 0 0 0 transparent; +} +.m-icon-button:disabled { + cursor: default; + opacity: 0.5; +} +.m-icon-button.in-mobile-topbar { + width: 50px; + height: 50px; +} +.m-icon-button.as-close-menu { + position: absolute; + top: 20px; + right: 20px; + width: 32px; + height: 32px; + font-size: 0.625rem; + z-index: 2; +} +@media only screen and (min-width: 48rem) { + .m-icon-button.as-close-menu { + display: none !important; + } +} +.m-icon-button.as-close-search { + position: absolute; + top: 20px; + right: 20px; + width: 32px; + height: 32px; + font-size: 0.625rem; + z-index: 2; +} +@media only screen and (min-width: 48rem) { + .m-icon-button.as-close-search { + top: 30px; + right: 30px; + width: 42px; + height: 42px; + font-size: 0.875rem; + } +} +@media only screen and (min-width: 80rem) { + .m-icon-button.as-close-search { + top: 40px; + right: 40px; + width: 50px; + height: 50px; + } +} +.m-icon-button.in-menu-main { + display: none; +} +@media only screen and (min-width: 48rem) { + .m-icon-button.in-menu-main { + display: flex; + width: 32px; + height: 32px; + } +} +.m-icon-button.more { + font-size: 1.25rem; + z-index: 6; + position: relative; +} +.m-icon-button.more.active { + color: var(--primary-subtle-color); +} +.m-icon-button.in-pagination-left, .m-icon-button.in-pagination-right { + width: 40px; + height: 40px; + font-size: 0.625rem; +} +@media only screen and (min-width: 48rem) { + .m-icon-button.in-pagination-left, .m-icon-button.in-pagination-right { + width: 46px; + height: 46px; + font-size: 0.688rem; + } +} +.m-icon-button.in-pagination-left { + margin-right: 30px; +} +.m-icon-button.in-pagination-right { + margin-left: 30px; +} +.m-icon-button.in-featured-articles { + position: absolute; + color: #fff; + font-size: 0.875rem; + width: 40px; + height: 40px; + bottom: 5px; + z-index: 2; +} +@media only screen and (min-width: 48rem) { + .m-icon-button.in-featured-articles { + bottom: 26px; + } +} +.m-icon-button.in-featured-articles.swiper-button-prev { + right: 56px; +} +@media only screen and (min-width: 48rem) { + .m-icon-button.in-featured-articles.swiper-button-prev { + right: 76px; + } +} +.m-icon-button.in-featured-articles.swiper-button-next { + right: 16px; +} +@media only screen and (min-width: 48rem) { + .m-icon-button.in-featured-articles.swiper-button-next { + right: 36px; + } +} +.m-icon-button.in-recommended-articles { + position: absolute; + font-size: 0.625rem; + width: 40px; + height: 40px; + top: 240px; + z-index: 2; + transform: translateY(-50%); +} +@media only screen and (min-width: 64rem) { + .m-icon-button.in-recommended-articles { + display: none; + } +} +.m-icon-button.in-recommended-articles.swiper-button-prev { + left: 2px; +} +.m-icon-button.in-recommended-articles.swiper-button-next { + right: 2px; +} +.m-icon-button.as-load-comments { + position: relative; + width: 60px; + height: 60px; + font-size: 1.25rem; + margin: 0 auto; + z-index: 2; +} +@media only screen and (min-width: 48rem) { + .m-icon-button.as-load-comments { + width: 80px; + height: 80px; + font-size: 1.625rem; + } +} +.m-icon-button.in-share { + color: var(--titles-color); + font-size: 0.75rem; + text-decoration: none; + width: 31px; + height: 31px; + margin: 0 25px; +} +@media only screen and (min-width: 64rem) { + .m-icon-button.in-share { + font-size: 0.875rem; + width: 40px; + height: 40px; + margin: 0 0 20px 0; + } +} +@media only screen and (min-width: 80rem) { + .m-icon-button.in-share { + font-size: 1rem; + width: 50px; + height: 50px; + } +} +.m-icon-button.progress { + position: relative; +} +.m-icon-button.progress svg { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0; +} +.m-icon-button.progress svg circle { + stroke: var(--primary-subtle-color); + transform-origin: 50% 50%; + transform: rotate(-90deg); + transition: stroke-dashoffset 0.2s; +} + +.rtl .m-icon-button.in-featured-articles.swiper-button-prev { + right: auto; + left: 16px; +} +@media only screen and (min-width: 48rem) { + .rtl .m-icon-button.in-featured-articles.swiper-button-prev { + right: auto; + left: 36px; + } +} +.rtl .m-icon-button.in-featured-articles.swiper-button-next { + right: auto; + left: 52px; +} +@media only screen and (min-width: 48rem) { + .rtl .m-icon-button.in-featured-articles.swiper-button-next { + right: auto; + left: 72px; + } +} +.rtl .m-icon-button.in-recommended-articles.swiper-button-prev { + left: auto; + right: 2px; + transform: rotate(180deg); +} +.rtl .m-icon-button.in-recommended-articles.swiper-button-next { + right: auto; + left: 2px; + transform: rotate(180deg); +} + +.m-input { + color: var(--primary-foreground-color); + letter-spacing: 0.2px; + line-height: 1.3; + font-size: 1rem; + width: 100%; + border-radius: 5px; + padding: 11px 15px; + border: 1px solid var(--primary-border-color); + outline: 0; + background-color: var(--background-color); +} +.m-input:focus { + border-color: var(--primary-subtle-color); +} +.m-input.in-search { + font-weight: 600; + padding-left: 40px; +} +@media only screen and (min-width: 48rem) { + .m-input.in-search { + font-size: 1.25rem; + padding: 15px 30px 15px 60px; + } +} +.m-input.in-subscribe-section { + margin-bottom: 15px; +} + +.m-section-title { + color: var(--primary-foreground-color); + text-align: center; + letter-spacing: 0.3px; + line-height: 1.3; + font-weight: 400; + font-size: 1.25rem; + margin: 0 0 30px; +} +@media only screen and (min-width: 48rem) { + .m-section-title { + font-size: 1.5rem; + margin-bottom: 40px; + } +} +.m-section-title.in-recommended { + margin-bottom: 0 !important; +} + +.m-small-text { + color: var(--titles-color); + font-size: 0.875rem; +} +.m-small-text.in-subscribe-page { + padding-top: 30px; + font-weight: 600; +} +.m-small-text.in-author-along-with { + margin-bottom: 20px; +} +.m-small-text.in-author-along-with a { + text-decoration: underline; +} + +.m-not-found { + color: var(--primary-foreground-color); + line-height: 1.3; + font-size: 0.875rem; + font-weight: 600; +} +.m-not-found.in-recent-articles { + margin-left: 20px; +} +@media only screen and (min-width: 48rem) { + .m-not-found.in-recent-articles { + margin-left: 0; + } +} + +.m-header { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 4; + background-color: var(--background-color); + will-change: transform; + transition: transform 0.4s cubic-bezier(0.165, 0.84, 0.44, 1); +} +@media only screen and (min-width: 48rem) { + .m-header { + padding: 15px 0; + } +} +@media only screen and (min-width: 48rem) { + .m-header.with-announcement-bar { + padding: 0; + } +} +@media only screen and (min-width: 48rem) { + .m-header.with-announcement-bar .m-menu { + padding: 15px 0; + } +} +.m-header.mobile-menu-opened { + height: 100%; +} +@media only screen and (min-width: 48rem) { + .m-header.mobile-menu-opened { + height: auto; + } +} +.m-header.headroom--pinned { + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05), 0 0 0 transparent; + transform: translateY(0%); +} +.m-header.headroom--pinned .m-header__shadow { + display: none; +} +.m-header.headroom--unpinned { + transform: translateY(-100%); +} +.m-header.submenu-is-active { + background-color: var(--background-color); +} +.m-header.submenu-is-active .m-header__shadow { + display: none; +} +.m-header.with-picture { + background-color: var(--background-color); +} + +.m-logo svg .letter { + filter: invert(1); +} + +[data-theme=light] .m-logo svg .letter { + filter: invert(1); +} + +[data-theme=dark] .m-logo svg .letter { + filter: none; +} + +@media (prefers-color-scheme: dark) { + .m-logo svg .letter { + filter: none; + } + [data-theme=light] .m-logo svg .letter { + filter: invert(1); + } +} +.m-mobile-topbar { + display: flex; + align-items: center; + justify-content: space-between; + height: 50px; + position: relative; + z-index: 2; +} +@media only screen and (min-width: 48rem) { + .m-mobile-topbar { + display: none !important; + } +} + +.m-logo { + display: inline-block; + height: 32px; +} +.m-logo svg { + width: auto; + max-width: 150px; + height: 100%; + -o-object-fit: contain; + object-fit: contain; +} +.m-logo img { + width: auto; + max-width: 150px; + height: 100%; + -o-object-fit: contain; + object-fit: contain; +} +.m-logo img.m-logo__image-light { + display: var(--toggle-darkmode-button-display-moon); +} +.m-logo img.m-logo__image-dark { + display: var(--toggle-darkmode-button-display-sun); +} +.m-logo.in-mobile-topbar { + margin: 0 20px; +} + +.m-site-name.in-mobile-topbar { + color: var(--titles-color); + font-weight: 600; +} +.m-site-name.in-desktop-menu { + font-weight: 700; +} + +.m-nav { + font-family: "Metropolis"; + font-weight: 500; + font-size: 0.875rem; + line-height: 1rem; +} +@media only screen and (min-width: 48rem) { + .m-nav { + display: flex; + align-items: center; + justify-content: space-between; + height: 37px; + overflow-y: hidden; + } +} +@media only screen and (min-width: 90rem) { + .m-nav { + margin: 0 -5px; + } +} +@media only screen and (min-width: 48rem) { + .m-nav.toggle-overflow { + overflow-y: initial; + } +} + +.m-nav__left { + margin-bottom: 30px; +} +@media only screen and (min-width: 48rem) { + .m-nav__left { + display: flex; + flex: 1 1 auto; + align-items: center; + overflow-x: auto; + overflow-y: hidden; + white-space: nowrap; + padding-top: 40px; + padding-bottom: 40px; + padding-left: 5px; + margin-bottom: 0; + -webkit-overflow-scrolling: touch; + } +} +@media only screen and (min-width: 48rem) { + .m-nav__left.toggle-overflow { + overflow-x: hidden; + } +} +.m-nav__left ul { + padding: 0; + margin: 0; +} +@media only screen and (min-width: 48rem) { + .m-nav__left ul { + display: flex; + align-items: center; + } +} +.m-nav__left li { + color: var(--menu-list-color); + letter-spacing: 1; + font-size: 0.875rem; + line-height: 1rem; + margin-bottom: 15px; +} +@media only screen and (min-width: 48rem) { + .m-nav__left li { + margin-bottom: 0; + margin-right: 35px; + position: relative; + } +} +.m-nav__left li:last-of-type { + margin-bottom: 0; +} +.m-nav__left li.nav-current { + font-weight: 600; +} +.m-nav__left li a { + color: inherit; +} +.m-nav__left li.more a { + display: inline-flex; + align-items: center; +} +@media only screen and (min-width: 48rem) { + .m-nav__left li.more a { + display: flex; + } +} +.m-nav__left li.more a span { + display: inline-block; + color: inherit; + font-size: 0.375rem; + margin-left: 8px; + transform: translateY(1px); +} +.m-nav__left li.submenu-option > div { + cursor: pointer; +} +.m-nav__left li.submenu-option .js-toggle-submenu { + display: none; +} +@media only screen and (min-width: 48rem) { + .m-nav__left li.submenu-option .js-toggle-submenu { + display: block; + } +} +@media only screen and (min-width: 48rem) { + .m-nav__left li.submenu-option { + z-index: 2; + } +} + +.m-nav__right { + display: flex; + align-items: center; + justify-content: flex-end; +} +@media only screen and (min-width: 48rem) { + .m-nav__right { + flex-shrink: 0; + position: relative; + padding-left: 20px; + padding-right: 5px; + } +} +@media only screen and (min-width: 48rem) { + .m-nav__right:before { + content: ""; + position: absolute; + pointer-events: none; + top: 0; + left: -20px; + width: 20px; + height: 100%; + z-index: 2; + } +} + +@media only screen and (min-width: 48rem) { + .rtl .m-nav__left { + padding-left: 0; + padding-right: 5px; + } +} +@media only screen and (min-width: 48rem) { + .rtl .m-nav__left li { + margin-right: 0; + margin-left: 35px; + } +} +@media only screen and (min-width: 48rem) { + .rtl .m-nav__right { + padding-left: 5px; + padding-right: 20px; + } +} +@media only screen and (min-width: 48rem) { + .rtl .m-nav__right:before { + left: auto; + right: -20px; + transform: rotate(180deg); + } +} + +.m-menu { + visibility: hidden; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + overflow-y: auto; + z-index: 2; + background-color: var(--background-color); + -webkit-overflow-scrolling: touch; + transform: scale(1.2); + transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1); +} +.m-menu.opened { + visibility: visible; + opacity: 1; + z-index: 10; + transform: scale(1); +} +@media only screen and (min-width: 48rem) { + .m-menu { + visibility: visible !important; + position: relative; + top: auto; + left: auto; + height: auto; + opacity: 1 !important; + overflow: initial; + background-color: transparent; + transform: translate3d(0, 0, 0) !important; + } +} + +.m-menu__main { + padding: 50px 0 5px; + min-height: 100%; +} +@media only screen and (min-width: 48rem) { + .m-menu__main { + padding: 0; + min-height: 0; + } +} + +.rtl .m-menu__main { + padding-top: 75px; +} +@media only screen and (min-width: 48rem) { + .rtl .m-menu__main { + padding: 0; + } +} + +.m-secondary-menu { + padding: 0; + margin: 0; + list-style-type: none; +} +.m-secondary-menu li { + font-size: 1rem; +} +@media only screen and (min-width: 48rem) { + .m-secondary-menu li { + margin-left: 0; + margin-right: 0; + } +} +.m-secondary-menu li.nav-current a { + font-weight: 600; +} +.m-secondary-menu li a { + display: block; + padding: 6px 10px; + border-radius: 0px; + transition: background-color linear 0.1s; +} +@media only screen and (min-width: 48rem) { + .m-secondary-menu li a { + padding: 8px 10px; + } +} +.m-secondary-menu li a:hover { + background-color: rgba(0, 0, 0, 0.1); +} + +.rtl .m-secondary-menu .li, +.rtl .m-secondary-menu .li a { + text-align: right !important; +} + +.m-submenu { + padding-top: 25px; +} +@media only screen and (min-width: 48rem) { + .m-submenu { + visibility: hidden; + position: fixed; + top: 67px; + left: 0; + width: 100%; + padding: 30px 0 20px 0; + white-space: normal; + background-color: var(--background-color); + border-top: 1px solid var(--secondary-border-color); + z-index: 5; + box-shadow: 0 60px 60px rgba(0, 0, 0, var(--submenu-shadow-color-opacity)), 0 0 0 transparent; + } +} +@media only screen and (min-width: 80rem) { + .m-submenu { + padding: 32px 0 23px 0; + } +} +@media only screen and (min-width: 48rem) { + .m-submenu.opened { + visibility: visible; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation: openSubmenuAnimation 0.3s both; + animation: openSubmenuAnimation 0.3s both; + } + @-webkit-keyframes openSubmenuAnimation { + from { + opacity: 0; + transform: translate3d(0, -5%, 0); + } + to { + opacity: 1; + transform: translate3d(0, 0, 0); + } + } + @keyframes openSubmenuAnimation { + from { + opacity: 0; + transform: translate3d(0, -5%, 0); + } + to { + opacity: 1; + transform: translate3d(0, 0, 0); + } + } +} +@media only screen and (min-width: 48rem) { + .m-submenu.closed { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation: closeSubmenuAnimation 0.3s both; + animation: closeSubmenuAnimation 0.3s both; + } + @-webkit-keyframes closeSubmenuAnimation { + from { + visibility: visible; + opacity: 1; + transform: translate3d(0, 0, 0); + } + to { + visibility: hidden; + opacity: 0; + transform: translate3d(0, -2.5%, 0); + } + } + @keyframes closeSubmenuAnimation { + from { + visibility: visible; + opacity: 1; + transform: translate3d(0, 0, 0); + } + to { + visibility: hidden; + opacity: 0; + transform: translate3d(0, -2.5%, 0); + } + } +} + +@media only screen and (min-width: 48rem) { + _:-ms-fullscreen, +:root .m-submenu { + top: 65px; + } +} + +.m-submenu-title { + letter-spacing: 0.3px; + line-height: 1.3; + font-size: 1.125rem; + font-weight: 400; + margin: 0 0 25px; +} +.m-submenu-title.in-recent-articles { + padding: 0 20px; +} +@media only screen and (min-width: 48rem) { + .m-submenu-title.in-recent-articles { + padding: 0; + } +} + +.rtl .m-submenu-title { + direction: rtl; +} + +.m-recent-articles { + margin: 0 -20px 40px; + overflow: hidden; +} +@media only screen and (min-width: 48rem) { + .m-recent-articles { + margin: 0 0 40px; + } +} +.m-recent-articles ul { + cursor: -webkit-grab; + cursor: grab; +} +.m-recent-articles .swiper-slide { + width: auto; +} + +.m-recent-article { + display: block; + width: 230px; + margin: 0 20px; +} +@media only screen and (min-width: 48rem) { + .m-recent-article { + margin: 0 60px 0 0; + } +} +.m-recent-article:hover .m-recent-article__picture img { + transform: scale(1.1); +} + +@media only screen and (min-width: 48rem) { + .rtl .m-recent-article { + margin: 0 0 0 60px; + } +} + +.m-recent-article__picture { + height: 130px; + position: relative; + margin-bottom: 15px; + border-radius: 5px; + background-color: var(--secondary-subtle-color); + overflow: hidden; + transform: translateZ(0); +} +.m-recent-article__picture.no-picture img { + position: absolute; + left: 50%; + top: 50%; + width: 64px; + height: 64px; + margin: -32px 0 0 -32px; +} +.m-recent-article__picture img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + transition: transform 0.5s cubic-bezier(0.165, 0.84, 0.44, 1); +} + +.m-recent-article__title { + color: var(--titles-color); + letter-spacing: 0.2px; + line-height: 1.438rem; + font-size: 1rem; + font-weight: 400; + margin: 0 0 10px; +} +@media only screen and (min-width: 48rem) { + .m-recent-article__title { + letter-spacing: 0.25px; + font-size: 1.125rem; + } +} + +.m-recent-article__date { + color: var(--titles-color); + letter-spacing: 0.15px; + font-size: 0.813rem; +} + +.m-tags.in-post { + padding-top: 25px; +} +.m-tags.in-post ul { + padding: 0; + list-style-type: none; +} +.m-tags.in-post a { + text-decoration: none; +} +.m-tags ul { + display: flex; + flex-wrap: wrap; +} +.m-tags li { + letter-spacing: 0.2px; + font-size: 0.875rem; + font-weight: 600; + margin-right: 30px; + margin-bottom: 10px !important; +} +.m-tags li:last-of-type { + margin-right: 0; +} +.m-tags li a { + color: var(--link-color) !important; +} + +.m-toggle-darkmode { + position: fixed; + right: 20px; + bottom: 45px; + width: 28px; + height: 28px; + border-radius: 50%; + overflow: hidden; + z-index: 2; +} +@media only screen and (min-width: 48rem) { + .m-toggle-darkmode { + position: relative; + right: auto; + bottom: auto; + margin-left: 20px; + z-index: auto; + } +} +.m-toggle-darkmode input { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + outline: 0; + border: 0; + opacity: 0; + cursor: pointer; + z-index: 2; +} +.m-toggle-darkmode input::-moz-focus-inner { + border: 0; +} +.m-toggle-darkmode div { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-radius: 50%; + overflow: hidden; + background-color: var(--toggle-darkmode-background-color); + z-index: 1; +} +.m-toggle-darkmode span { + color: var(--titles-color); + font-size: 0.9375rem; +} +.m-toggle-darkmode span.moon { + display: var(--toggle-darkmode-button-display-moon); +} +.m-toggle-darkmode span.sun { + display: var(--toggle-darkmode-button-display-sun); +} + +_:-ms-fullscreen, :root .m-toggle-darkmode { + display: none; +} + +div.gh-announcement-bar { + line-height: 1.3; + font-size: 1rem; + padding: 16px 48px; + min-height: auto; + z-index: auto; +} +@media only screen and (min-width: 48rem) { + div.gh-announcement-bar { + font-size: 1.125rem; + } +} + +.m-hero { + position: relative; + flex-direction: column; + min-height: 365px; + overflow: hidden; + padding: 100px 0 75px; + background-color: var(--background-color); +} +@media only screen and (min-width: 48rem) { + .m-hero { + min-height: 400px; + padding: 150px 0 75px; + } +} +.m-hero.with-picture { + color: #fff; + background-color: #000; +} +@media only screen and (min-width: 48rem) { + .m-hero.with-picture { + min-height: 450px; + } +} +@media only screen and (min-width: 80rem) { + .m-hero.with-picture { + min-height: 565px; + } +} +.m-hero.no-picture.in-post { + display: none; +} + +.m-hero__picture { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1; + opacity: 0.7; +} +.m-hero__picture.in-post { + opacity: 1; +} +.m-hero__picture img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +.m-hero__content { + position: relative; + text-align: center; + padding: 0 20px; + z-index: 2; +} +@media only screen and (min-width: 48rem) { + .m-hero__content { + max-width: 700px; + } +} +@media only screen and (min-width: 80rem) { + .m-hero__content { + padding: 0; + } +} + +.m-hero__meta { + margin: 0 auto; +} +@media only screen and (min-width: 48rem) { + .m-hero__meta { + display: flex; + align-items: center; + justify-content: center; + } +} + +.rtl .m-hero__meta { + direction: ltr; +} + +.m-hero-avatar { + width: 80px; + height: 80px; + margin: 0 auto 25px; + border-radius: 50%; + background-color: #5c697c; + background-repeat: no-repeat; + background-position: center; + background-size: cover; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 0 0 transparent; +} +@media only screen and (min-width: 48rem) { + .m-hero-avatar { + width: 100px; + height: 100px; + } +} + +.m-hero-title { + color: var(--titles-color); + letter-spacing: 0.4px; + line-height: 1.3; + font-size: 1.75rem; + font-weight: 700; + margin: 0 0 15px; +} +@media only screen and (min-width: 48rem) { + .m-hero-title { + letter-spacing: 0.5px; + font-size: 2.25rem; + } +} +.m-hero-title.bigger { + letter-spacing: 0.5px; + font-size: 2rem; +} +@media only screen and (min-width: 48rem) { + .m-hero-title.bigger { + letter-spacing: 0.8px; + font-size: 3.25rem; + margin-bottom: 10px; + } +} + +.m-hero-description { + font-weight: 500; + letter-spacing: 0.2px; + line-height: 1.5; + font-size: 0.938rem; + margin-bottom: 20px; + color: var(--titles-color); +} +@media only screen and (min-width: 48rem) { + .m-hero-description { + font-size: 1.125rem; + } +} +.m-hero-description.bigger { + line-height: 1.3; + font-size: 1rem; + margin-bottom: 25px; +} +@media only screen and (min-width: 48rem) { + .m-hero-description.bigger { + font-size: 1rem; + } +} + +.m-hero-social { + text-align: center; + list-style-type: none; + padding: 0; + margin: 0 0 15px; +} +@media only screen and (min-width: 48rem) { + .m-hero-social { + margin-right: 7px; + margin-bottom: 0; + } +} +.m-hero-social.with-picture { + color: #fff; +} +.m-hero-social li { + display: inline-block; + margin: 0 11px; +} +.m-hero-social li a { + color: inherit; + font-size: 0.938rem; +} +.m-hero-social li a span { + color: inherit; +} + +.rtl .m-hero-social { + direction: ltr; +} + +.m-hero-stats { + text-align: center; + list-style-type: none; + padding: 0; + margin: 0; +} +@media only screen and (min-width: 48rem) { + .m-hero-stats { + margin-left: 7px; + } +} +.m-hero-stats.with-picture { + color: #fff; +} +.m-hero-stats li { + display: inline-block; + color: inherit; + letter-spacing: 0.2px; + font-size: 0.813rem; + margin: 0 4px; +} +@media only screen and (min-width: 48rem) { + .m-hero-stats li { + letter-spacing: 0.3px; + font-size: 1rem; + } +} + +.m-heading { + text-align: center; + margin: 0 auto 40px; +} +@media only screen and (min-width: 48rem) { + .m-heading { + margin-bottom: 60px; + } +} +@media only screen and (min-width: 48rem) { + .m-heading.in-subscribe-page { + margin-bottom: 50px; + } +} +.m-heading.no-margin { + margin-bottom: 0 !important; +} + +.m-heading__title { + color: var(--titles-color); + line-height: 1.25; + letter-spacing: 0.02rem; + color: var(--titles-color); + margin: 0 0 10px; +} +@media only screen and (min-width: 48rem) { + .m-heading__title { + letter-spacing: 0.5px; + font-size: 2.25rem; + margin-bottom: 15px; + } +} +.m-heading__title.in-post { + margin-bottom: 15px; + font-size: 1.8rem; + text-align: left; +} +@media only screen and (min-width: 48rem) { + .m-heading__title.in-post { + font-size: 2.75rem; + margin-bottom: 20px; + text-align: center; + } +} +.m-heading__title.in-page { + margin: 0; +} + +.m-heading__description { + letter-spacing: 0.2px; + line-height: 1.3; + font-size: 0.938rem; + margin: 0 auto; +} +@media only screen and (min-width: 48rem) { + .m-heading__description { + font-size: 1.125rem; + } +} +@media only screen and (min-width: 48rem) { + .m-heading__description.in-subscribe-page { + max-width: 420px; + font-size: 1rem; + } +} +.m-heading__description.in-newsletter-form { + font-size: 0.875rem; + max-width: 80%; +} +@media only screen and (min-width: 48rem) { + .m-heading__description.in-newsletter-form { + max-width: 420px; + } +} + +.m-heading__meta { + display: flex; + align-items: center; + justify-content: center; + letter-spacing: 0.2px; + font-size: 0.875rem; + font-weight: 600; +} +@media only screen and (min-width: 48rem) { + .m-heading__meta { + font-size: 1rem; + } +} + +.m-heading__meta__tag, +.m-heading__meta__time { + color: var(--link-color) !important; +} + +.m-heading__meta__tag { + text-decoration: none !important; +} + +.m-heading__meta__divider { + display: inline-block; + color: var(--primary-border-color); + margin: 0 10px; +} + +.m-article-card { + display: flex; + flex-direction: column; + position: relative; + margin-bottom: 20px; + height: 400px; + background-color: var(--background-color); + border-radius: 0px; + z-index: 1; + transition: all 0.25s cubic-bezier(0.02, 0.01, 0.47, 1); +} +.m-article-card:hover { + transform: translateY(-5px); +} +.m-article-card:hover:before { + box-shadow: var(--article-shadow-hover), 0 0 0 transparent; +} +.m-article-card:hover .m-article-card__author { + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3), 0 0 0 transparent; +} +@media only screen and (min-width: 48rem) { + .m-article-card { + width: calc(50% - 20px); + height: 420px; + margin-left: 10px; + margin-right: 10px; + margin-bottom: 20px; + } +} +@media only screen and (min-width: 64rem) { + .m-article-card { + width: calc(33.3333333333% - 40px); + margin-left: 20px; + margin-right: 20px; + margin-bottom: 40px; + } +} +.m-article-card.no-picture .m-article-card__picture { + height: 85px !important; +} +.m-article-card.no-picture .m-article-card__info { + background-color: var(--secondary-background-color); +} +.m-article-card.no-picture .m-article-card__title { + line-height: 1.4; + font-size: 1.625rem; +} +.m-article-card.as-author .m-article-card__picture { + background-color: #000; +} +.m-article-card.as-author .m-article-card__picture-link { + z-index: 2; +} +.m-article-card.as-author .m-article-card__picture-background { + opacity: 0.75; +} +.m-article-card.as-author .m-article-card__info { + padding: 0; +} +.m-article-card.as-author .m-article-card__info-link { + padding: 20px 20px 60px 20px; +} +.m-article-card:before { + content: ""; + position: absolute; + top: 10px; + right: 10px; + bottom: 0; + left: 10px; + border-radius: 0px; + box-shadow: var(--article-shadow-normal), 0 0 0 transparent; + transition: all 0.25s cubic-bezier(0.02, 0.01, 0.47, 1); +} + +.m-article-card__picture { + position: relative; + border-radius: 0; + background-color: var(--background-color); + overflow: hidden; + width: 100%; + aspect-ratio: 16/9; +} + +@supports not (aspect-ratio: 16/9) { + .m-article-card__picture { + width: 100%; + overflow: hidden; + } + .m-article-card__picture { + content: ""; + display: block; + padding-top: 56.25%; + } +} +.m-article-card__picture-link { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1; +} + +.m-article-card__picture-background { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; + z-index: 0; +} + +.m-article-card__name { + position: absolute; + left: 20px; + right: 20px; + bottom: 20px; + color: #fff; + letter-spacing: 0.4px; + line-height: 1.3; + font-size: 1.25rem; + font-weight: 600; + margin: 0; + z-index: 1; +} +@media only screen and (min-width: 48rem) { + .m-article-card__name { + left: 25px; + bottom: 25px; + } +} + +.m-article-card__author { + position: absolute; + top: 20px; + left: 20px; + width: 35px; + height: 35px; + border-radius: 50%; + z-index: 2; + transition: all 0.25s cubic-bezier(0.02, 0.01, 0.47, 1); + visibility: hidden; +} +@media only screen and (min-width: 48rem) { + .m-article-card__author { + top: 25px; + left: 25px; + } +} +.m-article-card__author div { + width: 100%; + height: 100%; + border-radius: 50%; + border: 2px solid #fff; + background-color: #fff; + background-repeat: no-repeat; + background-position: center; + background-size: cover; +} + +.m-article-card__featured { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + top: 26px; + right: 20px; + width: 24px; + height: 24px; + color: #000; + background-color: #fff; + border-radius: 50%; + z-index: 2; + visibility: hidden; +} +@media only screen and (min-width: 48rem) { + .m-article-card__featured { + top: 31px; + right: 25px; + } +} +.m-article-card__featured span { + color: inherit; + font-size: 0.75rem; +} + +.m-article-card__info { + flex: 1; + position: relative; + padding-top: 48px; + height: 200px; + overflow: hidden; + border-radius: 0; + background-color: var(--secondary-background-color); +} +@media only screen and (min-width: 48rem) { + .m-article-card__info { + padding-top: 53px; + } +} +.m-article-card__info.no-tag { + padding-top: 0 !important; +} +.m-article-card__info.no-tag .m-article-card__info-link { + padding-top: 48px; +} +@media only screen and (min-width: 48rem) { + .m-article-card__info.no-tag .m-article-card__info-link { + padding-top: 53px; + } +} + +.m-article-card__tag { + position: absolute; + top: 15px; + left: 20px; + right: 20px; + line-height: 100%; + font-size: 0.875rem; + letter-spacing: 0.04em; + color: var(--secondary-subtle-color); + display: table; + padding: 6px; + z-index: 1; + border-radius: 0px; + overflow: hidden; +} +.m-article-card__tag:before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 1px solid rgba(255, 255, 255, 0.12); +} +@media only screen and (min-width: 48rem) { + .m-article-card__tag { + top: 18px; + left: 25px; + } +} + +.m-article-card__info-link { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 100%; + height: 100%; + padding: 0 20px 20px 20px; +} +@media only screen and (min-width: 48rem) { + .m-article-card__info-link { + padding: 0 25px 25px 25px; + } +} + +.m-article-card__title { + color: var(--titles-color); + margin: 0; + font-size: 1.25rem; + line-height: 1.5rem; + letter-spacing: 0.02em; +} + +.m-article-card__excerpt { + display: block; + position: relative; + overflow: hidden; + height: 100%; + color: var(--titles-color); + letter-spacing: 0.3px; + line-height: 1.5; + font-size: 1rem; +} + +.m-article-card__timestamp, +.m-article-card__author-stats { + display: flex; + align-items: center; + color: var(--titles-color); + line-height: 1.25rem; + font-size: 0.75rem; + letter-spacing: 0.02em; + text-transform: uppercase; +} +.m-article-card__timestamp span:nth-child(2), +.m-article-card__author-stats span:nth-child(2) { + padding: 0 10px; +} + +.m-article-card__author-stats { + position: absolute; + left: 20px; + right: 20px; + bottom: 20px; + justify-content: space-between; +} +.m-article-card__author-stats span { + padding: 0 !important; +} + +.m-article-card__social { + display: flex; + align-items: center; + justify-content: flex-end; + padding: 0; + margin: 0; +} +.m-article-card__social li { + display: inline-block; + margin-left: 22px; +} +.m-article-card__social li a { + color: var(--primary-foreground-color); + font-size: 0.938rem; +} +.m-article-card__social li a span { + color: inherit; +} + +.rtl .m-article-card__social { + direction: ltr; +} + +.m-search { + visibility: hidden; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + overflow-y: auto; + z-index: 2; + background-color: var(--transparent-background-color); + -webkit-overflow-scrolling: touch; + transform: scale(1.2); + transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1); +} +.m-search.opened { + visibility: visible; + opacity: 1; + z-index: 10; + transform: scale(1); +} + +.m-search__content { + padding: 80px 20px 40px; + margin: 0 auto; +} +@media only screen and (min-width: 48rem) { + .m-search__content { + padding-top: 100px; + padding-bottom: 50px; + max-width: 700px; + } +} +@media only screen and (min-width: 80rem) { + .m-search__content { + padding-left: 0; + padding-right: 0; + } +} +@media only screen and (min-width: 90rem) { + .m-search__content { + max-width: 800px; + } +} + +.m-search__form { + margin-bottom: 30px; +} +@media only screen and (min-width: 48rem) { + .m-search__form { + max-width: 500px; + margin: 0 auto 45px; + } +} + +.m-search-icon { + position: absolute; + top: 50%; + left: 15px; + color: #9b9b9b; + font-size: 1rem; + font-weight: 500; + pointer-events: none; + transform: translateY(-45%); +} +@media only screen and (min-width: 48rem) { + .m-search-icon { + font-size: 1.25em; + left: 25px; + } +} + +.m-result { + border-bottom: 1px solid var(--primary-border-color); +} +.m-result.last { + border-bottom: 0; +} + +.m-result__link { + display: block; + width: 100%; + height: 100%; + padding: 10px 0; +} +@media only screen and (min-width: 48rem) { + .m-result__link { + padding: 15px 0; + } +} + +.m-result__title { + color: var(--primary-foreground-color); + letter-spacing: 0.3px; + line-height: 1.4; + font-size: 1rem; + font-weight: 400; + margin: 0 0 5px; +} +@media only screen and (min-width: 48rem) { + .m-result__title { + letter-spacing: 0.4px; + font-size: 1.25rem; + margin-bottom: 10px; + } +} +@media only screen and (min-width: 80rem) { + .m-result__title { + font-size: 1.375rem; + } +} + +.m-result__date { + color: var(--titles-color); + letter-spacing: 0.2px; + font-size: 0.813rem; +} +@media only screen and (min-width: 48rem) { + .m-result__date { + letter-spacing: 0.3px; + font-size: 0.938rem; + } +} + +.m-footer { + flex-shrink: 0; + background-color: var(--footer-background-color); +} + +.m-footer__content { + color: #fff; + text-align: center; + padding: 45px 20px; +} +@media only screen and (min-width: 48rem) { + .m-footer__content { + padding: 45px 0; + max-width: 680px; + margin: 0 auto; + } +} +@media only screen and (min-width: 64rem) { + .m-footer__content { + padding: 45px 0; + max-width: 1032px; + margin: 0 auto; + } +} + +.m-footer__nav-secondary { + margin-bottom: 25px; +} +.m-footer__nav-secondary .m-secondary-menu { + display: flex; + justify-content: center; + flex-wrap: wrap; +} +@media only screen and (min-width: 48rem) { + .m-footer__nav-secondary .m-secondary-menu li { + margin: 0 5px; + } +} + +.m-footer-grid { + display: block; +} +@media only screen and (min-width: 64rem) { + .m-footer-grid { + display: grid; + grid-template-columns: 34% 66%; + } +} + +.m-footer-copyright { + margin-bottom: 0px; + font-size: 0.75rem; + line-height: 1.5; + text-align: center; + letter-spacing: 0.04em; + color: #8493ad; +} +@media only screen and (min-width: 48rem) { + .m-footer-copyright { + font-size: 0.875rem; + } +} +.m-footer-copyright p { + color: #c3d0e4; + line-height: 0.5em; +} +.m-footer-copyright span { + display: inline; +} +.m-footer-copyright a { + text-decoration: underline; + margin-left: 0.25rem; +} +.m-footer-copyright a:hover { + color: #00e0ca; +} +.m-footer-copyright.jslicense { + opacity: 0.7; + margin-bottom: 0; +} + +#foundationRegisteredAddress span { + margin-right: 0.25rem; +} + +.m-footer-social { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 20px; +} +.m-footer-social a { + display: inline-block; + color: #c3d0e4; + margin: 0 15px; +} +.m-footer-social a span { + color: #c3d0e4; + font-size: 1rem; +} + +.rtl .m-footer-social { + direction: ltr; +} + +.m-footer__logo { + margin-bottom: 14px; +} diff --git a/assets/css/home.css b/assets/css/home.css index f4c625b93..760b0ec0f 100644 --- a/assets/css/home.css +++ b/assets/css/home.css @@ -1 +1,325 @@ -.m-featured-slider{position:relative;overflow:hidden!important;height:350px;margin:-40px -20px 40px;transition:all .25s cubic-bezier(.02,.01,.47,1);box-shadow:var(--article-shadow-normal),0 0 0 transparent}@media only screen and (min-width:48rem){.m-featured-slider:hover{transform:translateY(-5px);box-shadow:var(--article-shadow-hover),0 0 0 transparent}}@media only screen and (min-width:48rem){.m-featured-slider{width:100%;height:420px;margin:-40px 10px 20px;border-radius:10px}}@media only screen and (min-width:64rem){.m-featured-slider{width:calc(66.66667% - 40px);margin:0 20px 40px;overflow:unset}}.m-featured-slider:not(:root:root){overflow:hidden!important}.m-featured-slider__list{list-style-type:none;padding:0;margin:0;height:100%}@media only screen and (min-width:48rem){.m-featured-slider__list{border-radius:10px;overflow:hidden}}.m-featured-slider__list__item{height:100%;overflow:hidden}@media only screen and (min-width:48rem){.m-featured-slider__list__item{border-radius:10px}}.m-featured-article{position:relative;height:100%;overflow:hidden;z-index:1;background:none;visibility:visible}.m-featured-article:hover .m-featured-article__author{box-shadow:0 4px 8px rgba(0,0,0,.3),0 0 0 transparent}.m-featured-article.no-picture .m-featured-article__picture{background-color:var(--primary-subtle-color)}.m-featured-article__picture{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;background:none}.m-featured-article__picture div{width:100%;height:100%;background-repeat:no-repeat;background-position:50%;background-size:cover;opacity:1}.m-featured-article__meta{position:absolute;top:20px;left:20px;z-index:4}@media only screen and (min-width:48rem){.m-featured-article__meta{top:40px;left:40px}}.rtl .m-featured-article__meta{left:auto;right:20px}@media only screen and (min-width:48rem){.rtl .m-featured-article__meta{left:auto;right:40px}}.m-featured-article__author{display:block;width:35px;height:35px;background-color:#fff;border:2px solid #fff;border-radius:50%;margin-bottom:20px;transition:all .25s cubic-bezier(.02,.01,.47,1);visibility:hidden}.m-featured-article__author div{width:100%;height:100%;background-repeat:no-repeat;background-position:50%;background-size:cover;border-radius:50%}.m-featured-article__tag{font-family:Metropolis Bold;letter-spacing:.3px;font-size:1rem;line-height:1.5;text-transform:uppercase;background:#00e0ca;box-shadow:0 4px 30px rgba(132,147,173,.1);border-radius:0 0 0 10px;padding:14px 20px;text-align:center;letter-spacing:.04em;color:#f6f8fc;position:absolute;top:0;right:0;z-index:3}@media only screen and (min-width:48rem){.m-featured-article__tag{border-radius:0 10px}}.m-featured-article__ribbon{display:flex;align-items:center;justify-content:center;position:absolute;top:26px;right:20px;width:24px;height:24px;color:#000;background-color:#fff;border-radius:50%;z-index:2;visibility:hidden}@media only screen and (min-width:48rem){.m-featured-article__ribbon{justify-content:flex-start;top:47px;right:40px;width:auto;height:22px;padding:0 7px;font-size:.875rem;font-weight:600;border-radius:15px}}.m-featured-article__ribbon span{display:inline-block}@media only screen and (min-width:48rem){.m-featured-article__ribbon span:first-of-type{font-size:.75rem;margin-right:4px}}.m-featured-article__ribbon span:last-of-type{display:none}@media only screen and (min-width:48rem){.m-featured-article__ribbon span:last-of-type{display:block}}.rtl .m-featured-article__ribbon{right:auto;left:20px}@media only screen and (min-width:48rem){.rtl .m-featured-article__ribbon{right:auto;left:40px}}@media only screen and (min-width:48rem){.rtl .m-featured-article__ribbon span:first-of-type{margin-right:0;margin-left:4px}}.m-featured-article__content{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:100%;padding:120px 20px 20px;position:relative;z-index:3}@media only screen and (min-width:48rem){.m-featured-article__content{padding:125px 40px 40px}}.m-featured-article__title{color:#fff;margin:0;font-size:1.875rem}@media only screen and (min-width:48rem){.m-featured-article__title{font-size:2rem;max-width:80%}}.m-featured-article__timestamp{display:flex;align-items:center;color:#fff;line-height:1.25rem;font-size:.75rem;letter-spacing:.02em;text-transform:uppercase}.m-featured-article__timestamp span:nth-child(2){padding:0 10px}[class=paged] .m-hero,body.home-template .m-hero{background:url(/assets/images/blog.iota.org-light-mode-header.jpg);background-position:50%;min-height:350px}@media only screen and (min-width:48rem){[class=paged] .m-hero,body.home-template .m-hero{min-height:530px}}[class=paged] .m-hero img,body.home-template .m-hero img{display:none!important}[data-theme=dark] [class=paged] .m-hero,[data-theme=dark] body.home-template .m-hero{background:url(/assets/images/blog.iota.org-dark-mode-header.jpg);background-position:50%;min-height:350px}@media only screen and (min-width:48rem){[data-theme=dark] [class=paged] .m-hero,[data-theme=dark] body.home-template .m-hero{min-height:530px}}[data-theme=dark] [class=paged] .m-hero img,[data-theme=dark] body.home-template .m-hero img{display:none!important}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) [class=paged] .m-hero,:root:not([data-theme=light]) body.home-template .m-hero{background:url(/assets/images/blog.iota.org-dark-mode-header.jpg);background-position:50%;min-height:350px}}@media only screen and (prefers-color-scheme:dark) and (min-width:48rem){:root:not([data-theme=light]) [class=paged] .m-hero,:root:not([data-theme=light]) body.home-template .m-hero{min-height:530px}}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) [class=paged] .m-hero img,:root:not([data-theme=light]) body.home-template .m-hero img{display:none!important}} \ No newline at end of file +/** Mixins */ /** Colors */ +/** Config */ +:root { + --announcement-bar-height: 0px; + --show-fade-animation: 1; +} + +.m-featured-slider.swiper { + position: relative; + overflow: hidden !important; + height: 56.25vw; + margin: -40px -20px 40px; + transition: all 0.25s cubic-bezier(0.02, 0.01, 0.47, 1); +} +@media only screen and (min-width: 48rem) { + .m-featured-slider.swiper:hover { + transform: translateY(-5px); + box-shadow: var(--article-shadow-hover), 0 0 0 transparent; + } +} +@media only screen and (min-width: 48rem) { + .m-featured-slider.swiper { + width: 100%; + height: 420px; + margin: -40px 10px 20px 10px; + border-radius: 10px; + } +} +@media only screen and (min-width: 64rem) { + .m-featured-slider.swiper { + width: calc(66.6666666667% - 40px); + margin: 0 20px 40px 20px; + overflow: unset; + } +} + +.m-featured-slider:not(:root:root) { + overflow: hidden !important; +} + +.m-featured-slider__list { + list-style-type: none; + padding: 0; + margin: 0; + height: 100%; +} +@media only screen and (min-width: 48rem) { + .m-featured-slider__list { + border-radius: 10px; + } +} + +.m-featured-slider__list__item { + height: 100%; + overflow: hidden; +} +@media only screen and (min-width: 48rem) { + .m-featured-slider__list__item { + border-radius: 10px; + } +} + +.m-featured-article { + position: relative; + height: 100%; + overflow: hidden; + z-index: 1; + background: none; + visibility: visible; +} +.m-featured-article:hover .m-featured-article__author { + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3), 0 0 0 transparent; +} +.m-featured-article.no-picture .m-featured-article__picture { + background-color: var(--primary-subtle-color); +} + +.m-featured-article__picture { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1; + background: none; +} +.m-featured-article__picture div { + width: 100%; + height: 100%; + background-repeat: no-repeat; + background-position: center; + background-size: cover; + opacity: 1; +} + +.m-featured-article__meta { + position: absolute; + top: 20px; + left: 20px; + z-index: 4; +} +@media only screen and (min-width: 48rem) { + .m-featured-article__meta { + top: 40px; + left: 40px; + } +} + +.rtl .m-featured-article__meta { + left: auto; + right: 20px; +} +@media only screen and (min-width: 48rem) { + .rtl .m-featured-article__meta { + left: auto; + right: 40px; + } +} + +.m-featured-article__author { + display: block; + width: 35px; + height: 35px; + background-color: #fff; + border: 2px solid #fff; + border-radius: 50%; + margin-bottom: 20px; + transition: all 0.25s cubic-bezier(0.02, 0.01, 0.47, 1); + visibility: hidden; +} +.m-featured-article__author div { + width: 100%; + height: 100%; + background-repeat: no-repeat; + background-position: center; + background-size: cover; + border-radius: 50%; +} + +.m-featured-article__tag { + font-family: "Metropolis"; + font-weight: 700; + letter-spacing: 0.3px; + font-size: 1rem; + line-height: 1.5; + text-transform: uppercase; + background: #00e0ca; + box-shadow: 0px 4px 30px rgba(132, 147, 173, 0.1); + border-radius: 0px 0px 0px 10px; + padding: 14px 20px; + text-align: center; + letter-spacing: 0.04em; + color: #f6f8fc; + position: absolute; + top: 0; + right: 0; + z-index: 3; +} +@media only screen and (min-width: 48rem) { + .m-featured-article__tag { + border-radius: 0px 10px; + } +} + +.m-featured-article__ribbon { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + top: 26px; + right: 20px; + width: 24px; + height: 24px; + color: #000; + background-color: #fff; + border-radius: 50%; + z-index: 2; + visibility: hidden; +} +@media only screen and (min-width: 48rem) { + .m-featured-article__ribbon { + justify-content: flex-start; + top: 47px; + right: 40px; + width: auto; + height: 22px; + padding: 0 7px; + font-size: 0.875rem; + font-weight: 600; + border-radius: 15px; + } +} +.m-featured-article__ribbon span { + display: inline-block; +} +@media only screen and (min-width: 48rem) { + .m-featured-article__ribbon span:first-of-type { + font-size: 0.75rem; + margin-right: 4px; + } +} +.m-featured-article__ribbon span:last-of-type { + display: none; +} +@media only screen and (min-width: 48rem) { + .m-featured-article__ribbon span:last-of-type { + display: block; + } +} + +.rtl .m-featured-article__ribbon { + right: auto; + left: 20px; +} +@media only screen and (min-width: 48rem) { + .rtl .m-featured-article__ribbon { + right: auto; + left: 40px; + } +} +@media only screen and (min-width: 48rem) { + .rtl .m-featured-article__ribbon span:first-of-type { + margin-right: 0; + margin-left: 4px; + } +} + +.m-featured-article__content { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 100%; + height: 100%; + padding: 120px 20px 20px 20px; + position: relative; + z-index: 3; +} +@media only screen and (min-width: 48rem) { + .m-featured-article__content { + padding: 125px 40px 40px 40px; + } +} + +.m-featured-article__title { + color: #fff; + margin: 0; + font-size: 1.875rem; +} +@media only screen and (min-width: 48rem) { + .m-featured-article__title { + font-size: 2rem; + max-width: 80%; + } +} + +.m-featured-article__timestamp { + display: flex; + align-items: center; + color: #fff; + line-height: 1.25rem; + font-size: 0.75rem; + letter-spacing: 0.02em; + text-transform: uppercase; +} +.m-featured-article__timestamp span:nth-child(2) { + padding: 0 10px; +} + +body.home-template .m-hero, +[class=paged] .m-hero { + background: url("/assets/images/BlogHeader_White.png"); + background-position: center; + background-repeat: no-repeat; + min-height: 350px; +} +@media only screen and (min-width: 48rem) { + body.home-template .m-hero, +[class=paged] .m-hero { + min-height: 530px; + } +} +body.home-template .m-hero img, +[class=paged] .m-hero img { + display: none !important; +} + +[data-theme=dark] body.home-template .m-hero, +[data-theme=dark] [class=paged] .m-hero { + background: url("/assets/images/Blogheader_Dark.png"); + background-position: center; + background-repeat: no-repeat; + min-height: 350px; +} +@media only screen and (min-width: 48rem) { + [data-theme=dark] body.home-template .m-hero, +[data-theme=dark] [class=paged] .m-hero { + min-height: 530px; + } +} +[data-theme=dark] body.home-template .m-hero img, +[data-theme=dark] [class=paged] .m-hero img { + display: none !important; +} + +@media (prefers-color-scheme: dark) { + :root:not([data-theme=light]) body.home-template .m-hero, +:root:not([data-theme=light]) [class=paged] .m-hero { + background: url("/assets/images/Blogheader_Dark.png"); + background-position: center; + background-repeat: no-repeat; + min-height: 350px; + } +} +@media only screen and (prefers-color-scheme: dark) and (min-width: 48rem) { + :root:not([data-theme=light]) body.home-template .m-hero, +:root:not([data-theme=light]) [class=paged] .m-hero { + min-height: 530px; + } +} +@media (prefers-color-scheme: dark) { + :root:not([data-theme=light]) body.home-template .m-hero img, +:root:not([data-theme=light]) [class=paged] .m-hero img { + display: none !important; + } +} diff --git a/assets/css/listing.css b/assets/css/listing.css index 29dcacdad..5be06622e 100644 --- a/assets/css/listing.css +++ b/assets/css/listing.css @@ -1 +1,42 @@ -.l-grid{padding-bottom:20px}@media only screen and (min-width:48rem){.l-grid{display:flex;flex-wrap:wrap;margin:0 -10px}}@media only screen and (min-width:80rem){.l-grid{margin:0 -20px}}@media only screen and (min-width:48rem){.l-grid.centered{justify-content:center}}.m-pagination{display:flex;align-items:center;justify-content:center;margin:0 auto 40px}.m-pagination__text{display:inline-block;color:var(--titles-color);letter-spacing:.2px;text-align:center;font-size:.875rem}@media only screen and (min-width:48rem){.m-pagination__text{letter-spacing:.3px;font-size:1rem}} \ No newline at end of file +/** Mixins */ +.l-grid { + padding-bottom: 20px; +} +@media only screen and (min-width: 48rem) { + .l-grid { + display: flex; + flex-wrap: wrap; + margin: 0 -10px; + } +} +@media only screen and (min-width: 80rem) { + .l-grid { + margin: 0 -20px; + } +} +@media only screen and (min-width: 48rem) { + .l-grid.centered { + justify-content: center; + } +} + +.m-pagination { + display: flex; + align-items: center; + justify-content: center; + margin: 0 auto 40px; +} + +.m-pagination__text { + display: inline-block; + color: var(--titles-color); + letter-spacing: 0.2px; + text-align: center; + font-size: 0.875rem; +} +@media only screen and (min-width: 48rem) { + .m-pagination__text { + letter-spacing: 0.3px; + font-size: 1rem; + } +} diff --git a/assets/css/newsletter.css b/assets/css/newsletter.css index 9474327a2..e0db10e71 100644 --- a/assets/css/newsletter.css +++ b/assets/css/newsletter.css @@ -1 +1,184 @@ -.l-fullscreen{display:flex;align-items:center;justify-content:center;height:100vh}.l-fullscreen__content{text-align:center;padding:0 20px}@media only screen and (min-width:48rem){.l-fullscreen__content{max-width:500px}}@media only screen and (min-width:48rem){.l-fullscreen__content.in-subscribe-page{padding:0}}@media only screen and (min-width:64rem){.l-fullscreen__content.in-subscribe-page{max-width:820px}}.m-back{display:flex;align-items:center;position:absolute;top:20px;left:20px;color:var(--titles-color);letter-spacing:.2px;font-size:.875rem;cursor:pointer;z-index:2}@media only screen and (min-width:48rem){.m-back{top:40px;letter-spacing:.3px;font-size:1rem}}.m-back span{color:inherit;display:inline-block}.rtl .m-back span:first-of-type{order:2}.m-back__icon{font-size:.75rem;margin-right:10px}@media only screen and (min-width:48rem){.m-back__icon{font-size:.875rem}}.rtl .m-back__icon{order:1}.m-subscribe-section{padding:50px 0;background-color:var(--secondary-subtle-color)}@media only screen and (min-width:48rem){.m-subscribe-section{padding:80px 0}}@media only screen and (min-width:48rem){.m-subscribe-section__content{display:flex;align-items:center;justify-content:space-between}}.m-subscribe-section__text{text-align:center;margin-bottom:30px}@media only screen and (min-width:48rem){.m-subscribe-section__text{flex:1;text-align:left;padding-right:75px;margin-bottom:0}}@media only screen and (min-width:48rem){.rtl .m-subscribe-section__text{text-align:right;padding-right:0;padding-left:75px}}.m-subscribe-section__title{color:var(--titles-color);letter-spacing:.3px;line-height:1.3;font-size:1.25rem;font-weight:600;margin:0 0 20px}@media only screen and (min-width:48rem){.m-subscribe-section__title{letter-spacing:.3px;font-size:1.5rem;margin-bottom:15px}}.m-subscribe-section__description{letter-spacing:.2px;line-height:1.4}@media only screen and (min-width:48rem){.m-subscribe-section__description{font-size:1.125rem}}@media only screen and (min-width:48rem){.m-subscribe-section__form{width:300px;margin:0 auto}}.m-subscribe-section__container.loading .m-button{pointer-events:none}.m-subscribe-section__container.success .m-subscribe__success{display:block}.m-subscribe-section__container.success .m-subscribe__error,.m-subscribe-section__container.success .m-subscribe__form,.m-subscribe-section__container.success .m-subscribe__invalid{display:none}.m-subscribe-section__container.error .m-subscribe__error,.m-subscribe-section__container.invalid .m-subscribe__invalid{display:block}.m-subscribe-section__container.error .m-subscribe__form{margin-bottom:20px}.m-subscribe-section__container .m-subscribe__error,.m-subscribe-section__container .m-subscribe__invalid,.m-subscribe-section__container .m-subscribe__success{display:none}.m-subscribe__success_icon{display:block;width:64px;height:64px;margin:0 auto 25px}.m-subscribe__error{text-align:center} \ No newline at end of file +/** Mixins */ /** Colors */ +/** Config */ +:root { + --announcement-bar-height: 0px; + --show-fade-animation: 1; +} + +.l-fullscreen { + display: flex; + align-items: center; + justify-content: center; + height: 100vh; +} + +.l-fullscreen__content { + text-align: center; + padding: 0 20px; +} +@media only screen and (min-width: 48rem) { + .l-fullscreen__content { + max-width: 500px; + } +} +@media only screen and (min-width: 48rem) { + .l-fullscreen__content.in-subscribe-page { + padding: 0; + } +} +@media only screen and (min-width: 64rem) { + .l-fullscreen__content.in-subscribe-page { + max-width: 820px; + } +} + +.m-back { + display: flex; + align-items: center; + position: absolute; + top: 20px; + left: 20px; + color: var(--titles-color); + letter-spacing: 0.2px; + font-size: 0.875rem; + cursor: pointer; + z-index: 2; +} +@media only screen and (min-width: 48rem) { + .m-back { + top: 40px; + letter-spacing: 0.3px; + font-size: 1rem; + } +} +.m-back span { + color: inherit; + display: inline-block; +} + +.rtl .m-back span:first-of-type { + order: 2; +} + +.m-back__icon { + font-size: 0.75rem; + margin-right: 10px; +} +@media only screen and (min-width: 48rem) { + .m-back__icon { + font-size: 0.875rem; + } +} + +.rtl .m-back__icon { + order: 1; +} + +.m-subscribe-section { + padding: 50px 0; + background-color: var(--secondary-subtle-color); +} +@media only screen and (min-width: 48rem) { + .m-subscribe-section { + padding: 80px 0; + } +} + +@media only screen and (min-width: 48rem) { + .m-subscribe-section__content { + display: flex; + align-items: center; + justify-content: space-between; + } +} + +.m-subscribe-section__text { + text-align: center; + margin-bottom: 30px; +} +@media only screen and (min-width: 48rem) { + .m-subscribe-section__text { + flex: 1; + text-align: left; + padding-right: 75px; + margin-bottom: 0; + } +} + +@media only screen and (min-width: 48rem) { + .rtl .m-subscribe-section__text { + text-align: right; + padding-right: 0; + padding-left: 75px; + } +} + +.m-subscribe-section__title { + color: var(--titles-color); + letter-spacing: 0.3px; + line-height: 1.3; + font-size: 1.25rem; + font-weight: 600; + margin: 0 0 20px; +} +@media only screen and (min-width: 48rem) { + .m-subscribe-section__title { + letter-spacing: 0.3px; + font-size: 1.5rem; + margin-bottom: 15px; + } +} + +.m-subscribe-section__description { + letter-spacing: 0.2px; + line-height: 1.4; +} +@media only screen and (min-width: 48rem) { + .m-subscribe-section__description { + font-size: 1.125rem; + } +} + +@media only screen and (min-width: 48rem) { + .m-subscribe-section__form { + width: 300px; + margin: 0 auto; + } +} + +.m-subscribe-section__container.loading .m-button { + pointer-events: none; +} +.m-subscribe-section__container.success .m-subscribe__success { + display: block; +} +.m-subscribe-section__container.success .m-subscribe__invalid, +.m-subscribe-section__container.success .m-subscribe__error, +.m-subscribe-section__container.success .m-subscribe__form { + display: none; +} +.m-subscribe-section__container.invalid .m-subscribe__invalid { + display: block; +} +.m-subscribe-section__container.error .m-subscribe__error { + display: block; +} +.m-subscribe-section__container.error .m-subscribe__form { + margin-bottom: 20px; +} +.m-subscribe-section__container .m-subscribe__success, +.m-subscribe-section__container .m-subscribe__invalid, +.m-subscribe-section__container .m-subscribe__error { + display: none; +} + +.m-subscribe__success_icon { + display: block; + width: 64px; + height: 64px; + margin: 0 auto 25px; +} + +.m-subscribe__error { + text-align: center; +} diff --git a/assets/css/post.css b/assets/css/post.css index ddeea3b70..42171d7c7 100644 --- a/assets/css/post.css +++ b/assets/css/post.css @@ -1 +1,1443 @@ -@charset "UTF-8";.hide{display:none}.sr-only{clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%);position:absolute;width:1px;height:1px;overflow:hidden;white-space:nowrap}.focusable:focus,.l-post-content button:focus:not(.m-icon-button),.m-button:focus{box-shadow:0 0 0 2px var(--primary-subtle-color)!important}.content-centered{display:flex;align-items:center;justify-content:center}.l-post-content button:not(.m-icon-button),.l-post-content input,.l-post-content select,.l-post-content textarea,.m-button,.m-input,.no-appearance{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}.no-padding{padding:0}.no-margin{margin:0}.no-scroll-y{overflow-y:hidden}.align-center{text-align:center}.align-left{text-align:left}.align-right{text-align:right}.pos-relative{position:relative}.pos-absolute{position:absolute}.bold{font-weight:700}.underline{text-decoration:underline}.uppercase{text-transform:uppercase}.pointer{cursor:pointer}.only-desktop{display:none}@media only screen and (min-width:48rem){.only-desktop{display:block}}.l-post-content{padding-bottom:15px}@media only screen and (min-width:48rem){.l-post-content{max-width:700px;margin:0 auto}}@media only screen and (min-width:48rem) and (min-width:48rem){.l-post-content{padding-bottom:30px}}.l-post-content h1,.l-post-content h2,.l-post-content h3,.l-post-content h4,.l-post-content h5,.l-post-content h6{font-family:Metropolis Bold;color:var(--titles-color);letter-spacing:.02rem;line-height:1.25;padding-top:5px;margin:0 0 30px}@media only screen and (min-width:48rem){.l-post-content h1,.l-post-content h2,.l-post-content h3,.l-post-content h4,.l-post-content h5,.l-post-content h6{padding-top:10px;margin-bottom:40px}}.l-post-content h1{font-size:1.8rem}@media only screen and (min-width:48rem){.l-post-content h1{font-size:2.5rem;margin-bottom:20px}}.l-post-content h2{font-size:1.5rem}@media only screen and (min-width:48rem){.l-post-content h2{font-size:2.25rem}}.l-post-content h3{font-size:1.3rem}@media only screen and (min-width:48rem){.l-post-content h3{font-size:1.875rem}}.l-post-content h4,.l-post-content h5,.l-post-content h6{font-size:1.25rem}.l-post-content p{letter-spacing:0;line-height:1.75rem;font-size:1rem;margin-bottom:25px}@media only screen and (min-width:48rem){.l-post-content p{margin-bottom:30px}}.l-post-content p img{margin-bottom:0!important}.l-post-content b,.l-post-content strong{font-weight:600}.l-post-content em{font-style:italic}.l-post-content a{color:var(--primary-foreground-color);text-decoration:underline;transition:color .2s linear}.l-post-content a:hover{color:var(--link-color)}.l-post-content ol,.l-post-content ul{letter-spacing:0;line-height:1.75rem;font-size:1rem;padding-left:20px;margin:0 0 20px}@media only screen and (min-width:48rem){.l-post-content ol,.l-post-content ul{padding-left:40px;margin-bottom:30px}}.l-post-content li{margin-bottom:20px}.l-post-content .kg-image,.l-post-content img{display:block;max-width:100%;margin:0 auto 35px}@media only screen and (min-width:48rem){.l-post-content .kg-image,.l-post-content img{margin-bottom:40px}}.l-post-content iframe{max-width:100%}.l-post-content .fluid-width-video-wrapper{margin:0 auto 35px}@media only screen and (min-width:48rem){.l-post-content .fluid-width-video-wrapper{margin-bottom:40px}}.l-post-content.kg-image-card,.l-post-content figure{padding:20px 0 40px;margin:0 -20px}@media only screen and (min-width:48rem){.l-post-content.kg-image-card,.l-post-content figure{padding:20px 0 50px;margin:0}}.l-post-content.kg-image-card.kg-embed-card,.l-post-content figure.kg-embed-card{display:flex;flex-direction:column;align-items:center;min-width:100%;margin:0 auto}.l-post-content.kg-image-card.kg-embed-card iframe,.l-post-content figure.kg-embed-card iframe{margin:0 auto}.l-post-content.kg-image-card.kg-width-full img,.l-post-content.kg-image-card.kg-width-wide img,.l-post-content figure.kg-width-full img,.l-post-content figure.kg-width-wide img{width:100%;height:auto}@media only screen and (min-width:80rem){.l-post-content.kg-image-card.kg-width-wide,.l-post-content figure.kg-width-wide{margin:0 -70px}}@media only screen and (min-width:48rem){.l-post-content.kg-image-card.kg-width-full,.l-post-content figure.kg-width-full{width:100vw;margin-left:50%;transform:translateX(-50%)}}.l-post-content.kg-image-card .kg-image,.l-post-content.kg-image-card img,.l-post-content figure .kg-image,.l-post-content figure img{display:block;width:auto;max-width:100%;height:auto;margin:0 auto}.l-post-content.kg-image-card figcaption,.l-post-content figure figcaption{text-align:center;letter-spacing:.1px;line-height:1.3;font-size:.75rem;padding:10px 20px 0}@media only screen and (min-width:48rem){.l-post-content.kg-image-card figcaption,.l-post-content figure figcaption{font-size:.875rem;padding:15px 0 0}}.l-post-content.kg-image-card .fluid-width-video-container,.l-post-content figure .fluid-width-video-container{flex-grow:1;width:100%}.l-post-content.kg-image-card .fluid-width-video-wrapper,.l-post-content figure .fluid-width-video-wrapper{margin:0 auto!important}.l-post-content.kg-image-card .kg-gallery-container,.l-post-content figure .kg-gallery-container{display:flex;flex-direction:column;width:100%}.l-post-content.kg-image-card .kg-gallery-row,.l-post-content figure .kg-gallery-row{display:flex;flex-direction:row;justify-content:center}.l-post-content.kg-image-card .kg-gallery-image img,.l-post-content figure .kg-gallery-image img{display:block;margin:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.l-post-content.kg-image-card .kg-gallery-row:not(:first-of-type),.l-post-content figure .kg-gallery-row:not(:first-of-type){margin:.75em 0 0}.l-post-content.kg-image-card .kg-gallery-image:not(:first-of-type),.l-post-content figure .kg-gallery-image:not(:first-of-type){margin:0 0 0 .75em}.l-post-content hr{position:relative;margin:30px 0;border:0;border-top:1px solid var(--secondary-subtle-color)}@media only screen and (min-width:48rem){.l-post-content hr{margin:50px 0}}.l-post-content hr:after{content:"";position:absolute;top:50%;left:50%;width:10px;height:10px;border-radius:50%;background-color:var(--secondary-subtle-color);box-shadow:0 0 0 10px var(--background-color),0 0 0 transparent;transform:translate(-50%,-50%)}@media only screen and (min-width:48rem){.l-post-content hr:after{width:12px;height:12px;box-shadow:0 0 0 20px var(--background-color),0 0 0 transparent}}.l-post-content blockquote{position:relative;letter-spacing:0;line-height:1.75rem;font-size:1rem;font-style:italic;font-family:Georgia,Times New Roman,Times,serif;padding:0 40px;margin:0 0 25px}@media only screen and (min-width:48rem){.l-post-content blockquote{padding:0 60px;margin-bottom:30px}}.l-post-content blockquote:before{content:'"';position:absolute;top:0;left:0;color:var(--primary-foreground-color);line-height:1;font-size:2.625rem}@media only screen and (min-width:48rem){.l-post-content blockquote:before{font-size:4rem}}.l-post-content blockquote p:last-child{margin-bottom:0}.l-post-content table{color:var(--titles-color);font-size:.875rem;width:calc(100% + 40px);margin:0 -20px 25px}@media only screen and (min-width:48rem){.l-post-content table{font-size:1rem;width:100%;margin:0 0 30px}}.l-post-content table thead{border-bottom:1px solid var(--table-head-border-bottom)}.l-post-content table thead td{font-weight:600}.l-post-content table tbody tr:nth-child(2n){background-color:var(--background-color)}.l-post-content table tbody tr:nth-child(odd){background-color:var(--table-background-color-odd)}.l-post-content table td{text-align:center;padding:10px}@media only screen and (min-width:48rem){.l-post-content table td{padding:20px}}.l-post-content code{display:inline-block;color:var(--titles-color);font-size:.9rem;padding:0 5px;color:#000;background:0 0;text-shadow:0 1px #fff;text-align:left;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.l-post-content code,.l-post-content pre{border-radius:5px;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.l-post-content pre{line-height:1.4;background-color:var(--primary-border-color);line-height:1.5;-moz-tab-size:2;-o-tab-size:2;tab-size:2;background:#f5f2f0;padding:1em;margin:.5em 0;overflow:auto}@media only screen and (min-width:48rem){.l-post-content pre{margin-bottom:30px!important}}.l-post-content pre>code{display:block;padding:10px;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}@media only screen and (min-width:48rem){.l-post-content pre>code{padding:20px}}.l-post-content pre.line-numbers>code{padding:0}.l-post-content form{margin-bottom:25px}@media only screen and (min-width:48rem){.l-post-content form{margin-bottom:30px}}.l-post-content input,.l-post-content select,.l-post-content textarea{margin-bottom:20px}.l-post-content textarea{height:100px;resize:none}.l-post-content select{position:relative;padding-right:40px!important;background-repeat:no-repeat;background-position:calc(100% - 15px) 50%;background-size:15px 8px;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5IiBoZWlnaHQ9IjUiPjxwYXRoIGZpbGw9IiM1NjVlNjAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTguMzIuNTdhLjI0Ny4yNDcgMCAwMTAgLjM2TDQuNjggNC41N2EuMjQ3LjI0NyAwIDAxLS4zNiAwTC42OC45M2EuMjQ3LjI0NyAwIDAxMC0uMzZsLjM5LS4zOWEuMjQ3LjI0NyAwIDAxLjM2IDBMNC41IDMuMjUgNy41Ny4xOGEuMjQ3LjI0NyAwIDAxLjM2IDBsLjM5LjM5eiIvPjwvc3ZnPg==")}.l-post-content button:not(.m-icon-button){border:1px solid var(--primary-foreground-color)!important}.l-post-content .kg-bookmark-card{width:100%;padding:0!important;margin:30px auto!important;background:var(--background-color)}@media only screen and (min-width:48rem){.l-post-content .kg-bookmark-card{margin:40px auto!important}}.l-post-content .kg-card+.kg-bookmark-card{margin-top:0}.l-post-content .kg-bookmark-container{display:flex;color:var(--primary-foreground-color);text-decoration:none!important;min-height:148px;box-shadow:0 1px 4px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.1);border-radius:3px}.l-post-content .kg-bookmark-content{display:flex;flex-direction:column;flex-grow:1;align-items:flex-start;justify-content:flex-start;padding:20px}.l-post-content .kg-bookmark-title{font-size:1rem;line-height:1.3;font-weight:600}.l-post-content .kg-bookmark-description{font-size:.875rem;font-weight:400;line-height:1.4;margin-top:12px;overflow-y:hidden}.l-post-content .kg-bookmark-thumbnail{position:relative;min-width:30%;max-height:100%;overflow:hidden}.l-post-content .kg-bookmark-thumbnail img{position:absolute;top:0;left:0;width:100%!important;height:100%!important;-o-object-fit:cover;object-fit:cover;border-radius:0 3px 3px 0}.l-post-content .kg-bookmark-metadata{display:flex;align-items:center;flex-wrap:wrap;font-size:.9rem;font-weight:400;color:var(--titles-color);margin-top:14px}.l-post-content .kg-bookmark-icon{width:22px!important;height:22px!important;margin-right:8px!important}.l-post-content .kg-bookmark-author:after{content:"\2022";margin:0 6px}.l-post-content .kg-bookmark-publisher{color:inherit}@media (max-width:500px){.l-post-content .kg-bookmark-container{flex-direction:column}.l-post-content .kg-bookmark-thumbnail{order:1;width:100%;min-height:160px}.l-post-content .kg-bookmark-thumbnail img{border-radius:3px 3px 0 0}.l-post-content .kg-bookmark-content{order:2}}.rtl .l-post-content ol,.rtl .l-post-content ul{padding-left:0;padding-right:20px}@media only screen and (min-width:48rem){.rtl .l-post-content ol,.rtl .l-post-content ul{padding-left:0;padding-right:40px}}.rtl .l-post-content code{direction:ltr}.rtl .l-post-content blockquote:before{left:auto;right:0}.rtl .l-post-content .kg-bookmark-icon{margin-right:0!important;margin-left:8px!important}@media only screen and (min-width:48rem){.rtl .l-post-content figure.kg-width-full{margin-left:0;margin-right:50%;transform:translateX(50%)}}.l-post-content button:not(.m-icon-button),.m-button{display:inline-block;color:#333;text-align:center;letter-spacing:.2px;line-height:1;font-size:1rem;font-weight:600;border-radius:5px;padding:13px 25px;cursor:pointer;outline:0;border:0;position:relative;background-color:transparent;transition:all .25s cubic-bezier(.02,.01,.47,1)}.l-post-content button.outlined:not(.m-icon-button),.m-button.outlined{color:var(--titles-color);border:1px solid var(--primary-foreground-color)}.l-post-content button.filled:not(.m-icon-button),.l-post-content button.primary:not(.m-icon-button),.m-button.filled,.m-button.primary{box-shadow:0 2px 4px var(--button-shadow-color-normal),0 0 0 transparent}.l-post-content button.filled:hover:not(.m-icon-button),.l-post-content button.primary:hover:not(.m-icon-button),.m-button.filled:hover,.m-button.primary:hover{transform:translateY(-2px);box-shadow:0 4px 8px var(--button-shadow-color-hover),0 0 0 transparent}.l-post-content button.filled:not(.m-icon-button),.m-button.filled{border-radius:5px;background-color:#fff}.l-post-content button.block:not(.m-icon-button),.m-button.block{display:block;width:100%}.l-post-content button.primary:not(.m-icon-button),.m-button.primary{color:#fff;background-color:var(--primary-subtle-color)}.l-post-content .m-subscribe-section__container.loading button:not(.m-icon-button),.l-post-content button.loading:not(.m-icon-button),.m-button.loading,.m-subscribe-section__container.loading .l-post-content button:not(.m-icon-button),.m-subscribe-section__container.loading .m-button{cursor:default;overflow:hidden}.l-post-content .m-subscribe-section__container.loading button:not(.m-icon-button):after,.l-post-content button.loading:not(.m-icon-button):after,.m-button.loading:after,.m-subscribe-section__container.loading .l-post-content button:not(.m-icon-button):after,.m-subscribe-section__container.loading .m-button:after{content:"";position:absolute;left:0;bottom:0;width:25%;height:2px;background-color:#fff;-webkit-animation:loading 1s infinite;animation:loading 1s infinite}@-webkit-keyframes loading{0%{transform:translatex(0)}50%{transform:translatex(300%)}to{transform:translatex(0)}}@keyframes loading{0%{transform:translatex(0)}50%{transform:translatex(300%)}to{transform:translatex(0)}}.l-post-content input,.l-post-content select,.l-post-content textarea,.m-input{color:var(--primary-foreground-color);letter-spacing:.2px;line-height:1.3;font-size:1rem;width:100%;border-radius:5px;padding:11px 15px;border:1px solid var(--primary-border-color);outline:0;background-color:var(--background-color)}.l-post-content input:focus,.l-post-content select:focus,.l-post-content textarea:focus,.m-input:focus{border-color:var(--primary-subtle-color)}.l-post-content input.in-search,.l-post-content select.in-search,.l-post-content textarea.in-search,.m-input.in-search{font-weight:600;padding-left:40px}@media only screen and (min-width:48rem){.l-post-content input.in-search,.l-post-content select.in-search,.l-post-content textarea.in-search,.m-input.in-search{font-size:1.25rem;padding:15px 30px 15px 60px}}.l-post-content input.in-subscribe-section,.l-post-content select.in-subscribe-section,.l-post-content textarea.in-subscribe-section,.m-input.in-subscribe-section{margin-bottom:15px}.m-share{position:fixed;left:0;bottom:0;width:100%;height:45px;z-index:3;background-color:var(--transparent-background-color);box-shadow:0 -4px 10px rgba(0,0,0,.1),0 0 0 transparent}@media only screen and (min-width:48rem){.m-share{height:50px}}@media only screen and (min-width:64rem){.m-share{position:absolute;top:0;left:auto;right:-75px;width:40px;height:auto;background-color:transparent;box-shadow:0 0 0 transparent,0 0 0 transparent}}@media only screen and (min-width:80rem){.m-share{width:50px;right:-175px}}@media only screen and (min-width:90rem){.m-share{right:-200px}}.m-share a{color:inherit!important}.m-share a:first-of-type{margin-left:0}@media only screen and (min-width:64rem){.m-share a:first-of-type{margin-bottom:0}}.m-share button:last-of-type{margin-right:0}@media only screen and (min-width:64rem){.rtl .m-share{right:auto;left:-75px}}@media only screen and (min-width:80rem){.rtl .m-share{left:-175px}}@media only screen and (min-width:90rem){.rtl .m-share{left:-200px}}.m-share__content{display:flex;align-items:center;justify-content:center;height:100%}@media only screen and (min-width:64rem){.m-share__content{position:-webkit-sticky;position:sticky;top:100px;flex-direction:column-reverse;align-items:flex-start;height:auto}}.rtl .m-share__content{direction:ltr}.m-subscribe-section{padding:50px 0;background-color:var(--secondary-subtle-color)}@media only screen and (min-width:48rem){.m-subscribe-section{padding:80px 0}}@media only screen and (min-width:48rem){.m-subscribe-section__content{display:flex;align-items:center;justify-content:space-between}}.m-subscribe-section__text{text-align:center;margin-bottom:30px}@media only screen and (min-width:48rem){.m-subscribe-section__text{flex:1;text-align:left;padding-right:75px;margin-bottom:0}}@media only screen and (min-width:48rem){.rtl .m-subscribe-section__text{text-align:right;padding-right:0;padding-left:75px}}.m-subscribe-section__title{color:var(--titles-color);letter-spacing:.3px;line-height:1.3;font-size:1.25rem;font-weight:600;margin:0 0 20px}@media only screen and (min-width:48rem){.m-subscribe-section__title{letter-spacing:.3px;font-size:1.5rem;margin-bottom:15px}}.m-subscribe-section__description{letter-spacing:.2px;line-height:1.4}@media only screen and (min-width:48rem){.m-subscribe-section__description{font-size:1.125rem}}@media only screen and (min-width:48rem){.m-subscribe-section__form{width:300px;margin:0 auto}}.l-post-content .m-subscribe-section__container.loading button:not(.m-icon-button),.m-subscribe-section__container.loading .l-post-content button:not(.m-icon-button),.m-subscribe-section__container.loading .m-button{pointer-events:none}.m-subscribe-section__container.success .m-subscribe__success{display:block}.m-subscribe-section__container.success .m-subscribe__error,.m-subscribe-section__container.success .m-subscribe__form,.m-subscribe-section__container.success .m-subscribe__invalid{display:none}.m-subscribe-section__container.error .m-subscribe__error,.m-subscribe-section__container.invalid .m-subscribe__invalid{display:block}.m-subscribe-section__container.error .m-subscribe__form{margin-bottom:20px}.m-subscribe-section__container .m-subscribe__error,.m-subscribe-section__container .m-subscribe__invalid,.m-subscribe-section__container .m-subscribe__success{display:none}.m-subscribe__success_icon{display:block;width:64px;height:64px;margin:0 auto 25px}.m-subscribe__error{text-align:center}.m-author{padding:40px 20px;border-color:var(--primary-border-color);border-style:solid;border-width:1px 0;margin:0 auto}@media only screen and (min-width:48rem){.m-author{display:flex;justify-content:center;padding:60px 40px}}@media only screen and (min-width:80rem){.m-author{padding:60px 0}}@media only screen and (min-width:48rem){.m-author__content{display:flex;max-width:820px}}.m-author__picture{width:90px;margin:0 auto 25px}@media only screen and (min-width:48rem){.m-author__picture{width:100px;margin:0 30px 0 0}}@media only screen and (min-width:48rem){.rtl .m-author__picture{margin:0 0 0 30px}}.m-author__info{text-align:center}@media only screen and (min-width:48rem){.m-author__info{flex:1;text-align:left}}@media only screen and (min-width:48rem){.rtl .m-author__info{text-align:right}}.m-author__name{color:var(--link-color);letter-spacing:.2px;line-height:1.3;font-size:1.125rem;font-weight:400;margin:0 0 15px}@media only screen and (min-width:48rem){.m-author__name{letter-spacing:.3px;font-size:1.25rem}}.m-author__bio{letter-spacing:.2px;line-height:1.5;margin-bottom:20px}@media only screen and (min-width:48rem){.m-author__bio{margin-bottom:15px}}.m-author-picture{display:block;width:90px;height:90px}@media only screen and (min-width:48rem){.m-author-picture{width:100px;height:100px}}.m-author-picture div{width:100%;height:100%;border-radius:50%;background-repeat:no-repeat;background-position:50%;background-size:cover}.m-author-links{padding:0;margin:0;list-style-type:none;text-align:center}@media only screen and (min-width:48rem){.m-author-links{text-align:left}}.m-author-links li{display:inline-block;margin:0 11px}.m-author-links li:first-of-type{margin-left:0}.m-author-links li:last-of-type{margin-right:0}.rtl .m-author-links{direction:ltr;text-align:right}.m-comments{padding-top:40px}@media only screen and (min-width:48rem){.m-comments{padding-top:60px}}.m-comments iframe{width:100%;max-width:100%}.m-recommended{padding-top:40px}@media only screen and (min-width:48rem){.m-recommended{padding-top:60px}}.m-recommended-articles{margin:0 -20px}@media only screen and (min-width:64rem){.m-recommended-articles{padding:0 40px;margin:0 -30px}}.m-recommended-slider{list-style-type:none;padding:0;margin:0}@media only screen and (min-width:48rem){.m-recommended-slider .glide__track{padding:0 40px;margin:0 -40px}}.m-recommended-slider .glide__slides{padding:40px 0 60px;margin:0 auto}@media only screen and (min-width:48rem){.m-recommended-slider .glide__slides{padding:40px 0 60px}}@media only screen and (min-width:80rem){.m-recommended-slider .glide__slides{overflow:visible}}.m-recommended-slider .m-article-card{width:100%!important;margin:0!important}@media only screen and (min-width:64rem){.m-recommended-slider .m-article-card .m-article-card__picture{height:190px}}@media only screen and (min-width:80rem){.m-recommended-slider .m-article-card .m-article-card__picture{height:220px}}.m-recommended-slider__item{padding:0 20px}.post-template{background-color:var(--background-color)!important}.post-template .m-hero.with-picture{min-height:unset;padding:0 0 45%;margin-top:50px}@media only screen and (min-width:48rem){.post-template .m-hero.with-picture{margin-top:65px}} \ No newline at end of file +@charset "UTF-8"; +/** Mixins */ /** Colors */ +/** Config */ +:root { + --announcement-bar-height: 0px; + --show-fade-animation: 1; +} + +/** Helpers */ +.hide { + display: none; +} + +.sr-only { + clip: rect(0 0 0 0); + -webkit-clip-path: inset(100%); + clip-path: inset(100%); + position: absolute; + width: 1px; + height: 1px; + overflow: hidden; + white-space: nowrap; +} + +.focusable:focus, .m-button:focus, .l-post-content button:focus:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card a.kg-btn:focus, .l-post-content .kg-header-card .kg-header-card-button:focus, .l-post-content .kg-product-card .kg-product-card-button:focus { + box-shadow: 0 0 0 2px var(--primary-subtle-color) !important; +} + +.content-centered { + display: flex; + align-items: center; + justify-content: center; +} + +.no-appearance, .m-input, .l-post-content input:not([type=radio]):not([type=checkbox]):not(.kg-video-card input):not(.kg-audio-card input), +.l-post-content textarea, +.l-post-content select, .m-button, .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card a.kg-btn, .l-post-content .kg-header-card .kg-header-card-button, .l-post-content .kg-product-card .kg-product-card-button { + -webkit-appearance: none !important; + -moz-appearance: none !important; + appearance: none !important; +} + +.no-padding { + padding: 0; +} + +.no-margin { + margin: 0; +} + +.no-scroll-y { + overflow-y: hidden; +} + +.align-center { + text-align: center; +} + +.align-left { + text-align: left; +} + +.align-right { + text-align: right; +} + +.pos-relative { + position: relative; +} + +.pos-absolute { + position: absolute; +} + +.bold { + font-weight: bold; +} + +.underline { + text-decoration: underline; +} + +.uppercase { + text-transform: uppercase; +} + +.pointer { + cursor: pointer; +} + +.only-desktop { + display: none; +} +@media only screen and (min-width: 48rem) { + .only-desktop { + display: block; + } +} + +.l-post-content { + padding-bottom: 15px; +} +@media only screen and (min-width: 48rem) { + .l-post-content { + max-width: 700px; + margin: 0 auto; + } +} +@media only screen and (min-width: 48rem) and (min-width: 48rem) { + .l-post-content { + padding-bottom: 30px; + } +} +.l-post-content h1, +.l-post-content h2, +.l-post-content h3, +.l-post-content h4, +.l-post-content h5, +.l-post-content h6 { + font-family: "Metropolis"; + font-weight: 700; + color: var(--titles-color); + letter-spacing: 0.02rem; + line-height: 1.25; + padding-top: 5px; + margin: 0 0 30px; +} +@media only screen and (min-width: 48rem) { + .l-post-content h1, +.l-post-content h2, +.l-post-content h3, +.l-post-content h4, +.l-post-content h5, +.l-post-content h6 { + padding-top: 10px; + margin-bottom: 40px; + } +} +.l-post-content h1 { + font-size: 1.8rem; +} +@media only screen and (min-width: 48rem) { + .l-post-content h1 { + font-size: 2.5rem; + margin-bottom: 20px; + } +} +.l-post-content h2 { + font-size: 1.5rem; +} +@media only screen and (min-width: 48rem) { + .l-post-content h2 { + font-size: 2.25rem; + } +} +.l-post-content h3 { + font-size: 1.3rem; +} +@media only screen and (min-width: 48rem) { + .l-post-content h3 { + font-size: 1.875rem; + } +} +.l-post-content h4, +.l-post-content h5, +.l-post-content h6 { + font-size: 1.25rem; +} +.l-post-content p { + letter-spacing: 0; + line-height: 1.75rem; + font-size: 1rem; + margin-bottom: 25px; +} +@media only screen and (min-width: 48rem) { + .l-post-content p { + margin-bottom: 30px; + } +} +.l-post-content p img { + margin-bottom: 0 !important; +} +.l-post-content b, +.l-post-content strong { + font-weight: 600; +} +.l-post-content em { + font-style: italic; +} +.l-post-content a { + color: var(--primary-foreground-color); + text-decoration: underline; + transition: color linear 0.2s; +} +.l-post-content a:hover { + color: var(--link-color); +} +.l-post-content ul, +.l-post-content ol { + letter-spacing: 0; + line-height: 1.75rem; + font-size: 1rem; + padding-left: 20px; + margin: 0 0 20px 0; +} +@media only screen and (min-width: 48rem) { + .l-post-content ul, +.l-post-content ol { + padding-left: 40px; + margin-bottom: 30px; + } +} +.l-post-content li { + margin-bottom: 20px; +} +.l-post-content img, +.l-post-content .kg-image { + display: block; + max-width: 100%; + margin: 0 auto 35px; +} +@media only screen and (min-width: 48rem) { + .l-post-content img, +.l-post-content .kg-image { + margin-bottom: 40px; + } +} +.l-post-content iframe { + display: block; + margin: 0 auto; + max-width: 100%; +} +.l-post-content .fluid-width-video-wrapper { + margin: 0 auto 35px; +} +@media only screen and (min-width: 48rem) { + .l-post-content .fluid-width-video-wrapper { + margin-bottom: 40px; + } +} +.l-post-content figure, .l-post-content.kg-image-card { + padding: 20px 0 40px; + margin: 0 -20px; +} +@media only screen and (min-width: 48rem) { + .l-post-content figure, .l-post-content.kg-image-card { + padding: 20px 0 50px; + margin: 0; + } +} +.l-post-content figure.kg-embed-card, .l-post-content.kg-image-card.kg-embed-card { + display: flex; + flex-direction: column; + align-items: center; + min-width: 100%; + margin: 0 auto; +} +.l-post-content figure.kg-embed-card iframe, .l-post-content.kg-image-card.kg-embed-card iframe { + margin: 0 auto; +} +.l-post-content figure.kg-width-full img, .l-post-content figure.kg-width-wide img, .l-post-content.kg-image-card.kg-width-full img, .l-post-content.kg-image-card.kg-width-wide img { + width: 100%; + height: auto; +} +@media only screen and (min-width: 80rem) { + .l-post-content figure.kg-width-wide, .l-post-content.kg-image-card.kg-width-wide { + margin: 0 -70px; + } +} +@media only screen and (min-width: 48rem) { + .l-post-content figure.kg-width-full, .l-post-content.kg-image-card.kg-width-full { + width: 100vw; + margin-left: 50%; + transform: translateX(-50%); + } +} +.l-post-content figure img, +.l-post-content figure .kg-image, .l-post-content.kg-image-card img, +.l-post-content.kg-image-card .kg-image { + display: block; + width: auto; + max-width: 100%; + height: auto; + margin: 0 auto; +} +.l-post-content figure figcaption, .l-post-content.kg-image-card figcaption { + text-align: center; + letter-spacing: 0.1px; + line-height: 1.3; + font-size: 0.75rem; + padding: 10px 20px 0 20px; +} +@media only screen and (min-width: 48rem) { + .l-post-content figure figcaption, .l-post-content.kg-image-card figcaption { + font-size: 0.875rem; + padding: 15px 0 0 0; + } +} +.l-post-content figure .fluid-width-video-container, .l-post-content.kg-image-card .fluid-width-video-container { + flex-grow: 1; + width: 100%; +} +.l-post-content figure .fluid-width-video-wrapper, .l-post-content.kg-image-card .fluid-width-video-wrapper { + margin: 0 auto !important; +} +.l-post-content figure .kg-gallery-container, .l-post-content.kg-image-card .kg-gallery-container { + display: flex; + flex-direction: column; + width: 100%; +} +.l-post-content figure .kg-gallery-row, .l-post-content.kg-image-card .kg-gallery-row { + display: flex; + flex-direction: row; + justify-content: center; +} +.l-post-content figure .kg-gallery-image img, .l-post-content.kg-image-card .kg-gallery-image img { + display: block; + margin: 0; + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} +.l-post-content figure .kg-gallery-row:not(:first-of-type), .l-post-content.kg-image-card .kg-gallery-row:not(:first-of-type) { + margin: 0.75em 0 0 0; +} +.l-post-content figure .kg-gallery-image:not(:first-of-type), .l-post-content.kg-image-card .kg-gallery-image:not(:first-of-type) { + margin: 0 0 0 0.75em; +} +.l-post-content hr { + position: relative; + margin: 30px 0; + border: 0; + border-top: 1px solid var(--secondary-subtle-color); +} +@media only screen and (min-width: 48rem) { + .l-post-content hr { + margin: 50px 0; + } +} +.l-post-content hr:after { + content: ""; + position: absolute; + top: 50%; + left: 50%; + width: 10px; + height: 10px; + border-radius: 50%; + background-color: var(--secondary-subtle-color); + box-shadow: 0 0 0 10px var(--background-color), 0 0 0 transparent; + transform: translate(-50%, -50%); +} +@media only screen and (min-width: 48rem) { + .l-post-content hr:after { + width: 12px; + height: 12px; + box-shadow: 0 0 0 20px var(--background-color), 0 0 0 transparent; + } +} +.l-post-content blockquote { + position: relative; + letter-spacing: 0; + line-height: 1.75rem; + font-size: 1rem; + font-style: italic; + font-family: Georgia, "Times New Roman", Times, serif; + padding: 0 40px; + margin: 0 0 25px; +} +@media only screen and (min-width: 48rem) { + .l-post-content blockquote { + padding: 0 60px; + margin-bottom: 30px; + } +} +.l-post-content blockquote.kg-blockquote-alt { + color: var(--primary-subtle-color); + line-height: 1.2; + font-family: inherit; + font-style: normal; + font-weight: 700; + font-size: 2rem; + padding-top: 20px; + padding-bottom: 20px; +} +@media only screen and (min-width: 48rem) { + .l-post-content blockquote.kg-blockquote-alt { + font-size: 2.625rem; + padding-top: 40px; + padding-bottom: 40px; + } +} +.l-post-content blockquote.kg-blockquote-alt:before { + display: none; +} +.l-post-content blockquote:before { + content: '"'; + position: absolute; + top: 0; + left: 0; + color: var(--primary-foreground-color); + line-height: 1; + font-size: 2.625rem; +} +@media only screen and (min-width: 48rem) { + .l-post-content blockquote:before { + font-size: 4rem; + } +} +.l-post-content blockquote p:last-child { + margin-bottom: 0; +} +.l-post-content table { + color: var(--titles-color); + font-size: 0.875rem; + width: calc(100% + 40px); + margin: 0 -20px 25px; +} +@media only screen and (min-width: 48rem) { + .l-post-content table { + font-size: 1rem; + width: 100%; + margin: 0 0 30px; + } +} +.l-post-content table thead { + border-bottom: 1px solid var(--table-head-border-bottom); +} +.l-post-content table thead td { + font-weight: 600; +} +.l-post-content table tbody tr:nth-child(even) { + background-color: var(--background-color); +} +.l-post-content table tbody tr:nth-child(odd) { + background-color: var(--table-background-color-odd); +} +.l-post-content table td { + text-align: center; + padding: 10px; +} +@media only screen and (min-width: 48rem) { + .l-post-content table td { + padding: 20px; + } +} +.l-post-content code { + display: inline-block; + color: var(--titles-color); + font-size: 0.9rem; + font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + padding: 0 5px; + border-radius: 5px; + color: #000; + background: 0 0; + text-shadow: 0 1px #fff; + font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + hyphens: none; +} +.l-post-content pre { + line-height: 1.4; + font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + border-radius: 5px; + background-color: var(--primary-border-color); + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; + -webkit-hyphens: none; + hyphens: none; + background: #f5f2f0; + padding: 1em; + margin: 0.5em 0; + overflow: auto; +} +@media only screen and (min-width: 48rem) { + .l-post-content pre { + margin-bottom: 30px !important; + } +} +.l-post-content pre > code { + display: block; + padding: 10px; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; + -webkit-hyphens: none; + hyphens: none; +} +@media only screen and (min-width: 48rem) { + .l-post-content pre > code { + padding: 20px; + } +} +.l-post-content pre.line-numbers > code { + padding: 0; +} +.l-post-content form { + margin-bottom: 25px; +} +@media only screen and (min-width: 48rem) { + .l-post-content form { + margin-bottom: 30px; + } +} +.l-post-content label { + display: block; + font-size: 1.125rem; + margin-bottom: 12px; +} +.l-post-content input:not([type=radio]):not([type=checkbox]):not(.kg-video-card input):not(.kg-audio-card input), +.l-post-content textarea, +.l-post-content select { + margin-bottom: 20px; +} +.l-post-content textarea { + height: 100px; + resize: none; +} +.l-post-content select { + position: relative; + padding-right: 40px !important; + background-repeat: no-repeat; + background-position: calc(100% - 15px) center; + background-size: 15px 8px; + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5IiBoZWlnaHQ9IjUiIHZpZXdCb3g9IjAgMCA5IDUiPgogICAgPHBhdGggZmlsbD0iIzU2NWU2MCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOC4zMi41N2EuMjQ3LjI0NyAwIDAgMSAwIC4zNkw0LjY4IDQuNTdhLjI0Ny4yNDcgMCAwIDEtLjM2IDBMLjY4LjkzYS4yNDcuMjQ3IDAgMCAxIDAtLjM2bC4zOS0uMzlhLjI0Ny4yNDcgMCAwIDEgLjM2IDBMNC41IDMuMjUgNy41Ny4xOGEuMjQ3LjI0NyAwIDAgMSAuMzYgMGwuMzkuMzl6Ii8+Cjwvc3ZnPgo="); +} +.l-post-content .kg-bookmark-card { + width: 100%; + padding: 0 !important; + margin: 30px auto !important; + background: var(--background-color); +} +@media only screen and (min-width: 48rem) { + .l-post-content .kg-bookmark-card { + margin: 40px auto !important; + } +} +.l-post-content .kg-card + .kg-bookmark-card { + margin-top: 0; +} +.l-post-content .kg-bookmark-container { + display: flex; + color: var(--primary-foreground-color); + text-decoration: none !important; + min-height: 148px; + box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 4px, rgba(0, 0, 0, 0.1) 0px 0px 0px 1px; + border-radius: 3px; +} +.l-post-content .kg-bookmark-content { + display: flex; + flex-direction: column; + flex-grow: 1; + align-items: flex-start; + justify-content: flex-start; + padding: 20px; +} +.l-post-content .kg-bookmark-title { + font-size: 1rem; + line-height: 1.3; + font-weight: 600; +} +.l-post-content .kg-bookmark-description { + font-size: 0.875rem; + font-weight: 400; + line-height: 1.4; + margin-top: 12px; + overflow-y: hidden; +} +.l-post-content .kg-bookmark-thumbnail { + position: relative; + min-width: 30%; + max-height: 100%; + overflow: hidden; +} +.l-post-content .kg-bookmark-thumbnail img { + position: absolute; + top: 0; + left: 0; + width: 100% !important; + height: 100% !important; + -o-object-fit: cover; + object-fit: cover; + border-radius: 0 3px 3px 0; +} +.l-post-content .kg-bookmark-metadata { + display: flex; + align-items: center; + flex-wrap: wrap; + font-size: 0.9rem; + font-weight: 400; + color: var(--titles-color); + margin-top: 14px; +} +.l-post-content .kg-bookmark-icon { + width: 22px !important; + height: 22px !important; + margin-right: 8px !important; +} +.l-post-content .kg-bookmark-author:after { + content: "•"; + margin: 0 6px; +} +.l-post-content .kg-bookmark-publisher { + color: inherit; +} +@media (max-width: 500px) { + .l-post-content .kg-bookmark-container { + flex-direction: column; + } + .l-post-content .kg-bookmark-thumbnail { + order: 1; + width: 100%; + min-height: 160px; + } + .l-post-content .kg-bookmark-thumbnail img { + border-radius: 3px 3px 0 0; + } + .l-post-content .kg-bookmark-content { + order: 2; + } +} +.l-post-content .kg-nft-card .kg-nft-card-container { + border-radius: 20px; + background-color: var(--background-color); +} +.l-post-content .kg-nft-card .kg-ntf-image-container { + border-radius: 20px 20px 0 0; + overflow: hidden; +} +.l-post-content .kg-nft-card .kg-nft-metadata { + border-radius: 0 0 20px 20px; +} +.l-post-content .kg-nft-card .kg-nft-header { + margin-bottom: 10px; +} +.l-post-content .kg-nft-card .kg-nft-header img { + display: inline-block; + width: 100px; + max-width: 100px; + margin: 0; + filter: invert(var(--kg-card-img-invert-color)); +} +.l-post-content .kg-nft-card .kg-nft-title { + color: var(--secondary-foreground-color); + padding-top: 0; +} +.l-post-content .kg-nft-card kg-nft-description, +.l-post-content .kg-nft-card .kg-nft-creator { + color: var(--primary-foreground-color); +} +.l-post-content .kg-nft-card kg-nft-description span, +.l-post-content .kg-nft-card .kg-nft-creator span { + color: var(--secondary-foreground-color); +} +.l-post-content .kg-button-card { + padding: 30px 0; + margin-bottom: 25px; +} +.l-post-content .kg-button-card a.kg-btn { + color: #fff !important; + font-family: inherit !important; + height: auto; + background-color: var(--primary-subtle-color) !important; + box-shadow: 0 2px 4px var(--button-shadow-color-normal), 0 0 0 transparent; +} +.l-post-content .kg-button-card a.kg-btn:hover { + opacity: 1; + transform: translateY(-2px); + box-shadow: 0 4px 8px var(--button-shadow-color-hover), 0 0 0 transparent; +} +.l-post-content .kg-callout-card { + margin-bottom: 25px; +} +@media only screen and (min-width: 48rem) { + .l-post-content .kg-callout-card { + margin-bottom: 30px; + } +} +.l-post-content .kg-callout-card .kg-callout-emoji { + padding-right: 24px; +} +.l-post-content .kg-callout-card .kg-callout-text { + font-size: 1.0625rem; +} +@media only screen and (min-width: 48rem) { + .l-post-content .kg-callout-card .kg-callout-text { + font-size: 1.125rem; + } +} +.l-post-content .kg-header-card { + width: 100vw; + margin-top: 30px; + margin-bottom: 30px; + margin-left: 50%; + transform: translateX(-50%); +} +@media only screen and (min-width: 48rem) { + .l-post-content .kg-header-card { + margin-top: 40px; + margin-bottom: 40px; + } +} +.l-post-content .kg-header-card.kg-style-light .kg-header-card-header, +.l-post-content .kg-header-card.kg-style-light .kg-header-card-subheader { + color: #333; +} +.l-post-content .kg-header-card.kg-style-light .kg-header-card-button { + color: #fff !important; + background-color: var(--primary-subtle-color) !important; +} +.l-post-content .kg-header-card .kg-header-card-button { + color: #333 !important; + font-family: inherit; + height: auto !important; + background-color: #fff !important; +} +.l-post-content .kg-header-card .kg-header-card-button:hover { + opacity: 1; + transform: translateY(-2px); + box-shadow: 0 4px 8px var(--button-shadow-color-hover), 0 0 0 transparent; +} +.l-post-content .kg-toggle-card { + margin-bottom: 20px; +} +.l-post-content .kg-toggle-card .kg-toggle-heading-text { + padding-top: 0; +} +.l-post-content .kg-toggle-card .kg-toggle-card-icon { + display: flex !important; + align-items: center; + justify-content: center; + border: 0 !important; + padding: 0; + cursor: pointer; +} +.l-post-content .kg-product-card { + margin-bottom: 30px; +} +@media only screen and (min-width: 48rem) { + .l-post-content .kg-product-card { + margin-bottom: 40px; + } +} +.l-post-content .kg-product-card .kg-product-card-image { + margin-bottom: 0; + border-radius: 5px; +} +.l-post-content .kg-product-card .kg-product-card-title { + padding-top: 0; + font-family: inherit; +} +.l-post-content .kg-product-card .kg-product-card-description p { + font-family: inherit; +} +.l-post-content .kg-product-card .kg-product-card-button { + color: #fff !important; + font-family: inherit !important; + height: auto; + background-color: var(--primary-subtle-color) !important; +} +.l-post-content .kg-file-card { + margin-bottom: 30px; +} +@media only screen and (min-width: 48rem) { + .l-post-content .kg-file-card { + margin-bottom: 40px; + } +} +.l-post-content .kg-audio-card { + margin-bottom: 30px; +} +@media only screen and (min-width: 48rem) { + .l-post-content .kg-audio-card { + margin-bottom: 40px; + } +} +.l-post-content .kg-audio-card img { + margin: 8px; +} +.l-post-content .kg-audio-card .kg-audio-play-icon svg, +.l-post-content .kg-audio-card .kg-audio-pause-icon svg, +.l-post-content .kg-audio-card .kg-audio-unmute-icon svg, +.l-post-content .kg-audio-card .kg-audio-mute-icon svg { + fill: var(--secondary-foreground-color); +} +.l-post-content .kg-audio-card .kg-audio-playback-rate { + color: var(--secondary-foreground-color); +} +.l-post-content .kg-audio-card .kg-audio-seek-slider:before, +.l-post-content .kg-audio-card .kg-audio-volume-slider:before { + background-color: var(--secondary-foreground-color); +} + +.rtl .l-post-content ul, +.rtl .l-post-content ol { + padding-left: 0; + padding-right: 20px; +} +@media only screen and (min-width: 48rem) { + .rtl .l-post-content ul, +.rtl .l-post-content ol { + padding-left: 0; + padding-right: 40px; + } +} +.rtl .l-post-content code { + direction: ltr; +} +.rtl .l-post-content blockquote:before { + left: auto; + right: 0; +} +.rtl .l-post-content .kg-bookmark-icon { + margin-right: 0 !important; + margin-left: 8px !important; +} +@media only screen and (min-width: 48rem) { + .rtl .l-post-content figure.kg-width-full { + margin-left: 0; + margin-right: 50%; + transform: translateX(50%); + } +} +.rtl .l-post-content .kg-callout-card .kg-callout-emoji { + padding-right: auto; + padding-left: 24px; +} +.rtl .l-post-content .kg-toggle-card .kg-toggle-card-icon { + margin-left: 0; + margin-right: 16px; +} +.rtl .l-post-content .kg-product-card .kg-product-card-rating { + padding-left: 0; + padding-right: 16px; +} + +.m-button, .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card a.kg-btn, .l-post-content .kg-header-card .kg-header-card-button, .l-post-content .kg-product-card .kg-product-card-button { + display: inline-block; + color: #333; + text-align: center; + letter-spacing: 0.2px; + line-height: 1; + font-size: 1rem; + font-weight: 600; + border-radius: 5px; + padding: 13px 25px; + cursor: pointer; + outline: 0; + border: 0; + position: relative; + background-color: transparent; + transition: all 0.25s cubic-bezier(0.02, 0.01, 0.47, 1); +} +.m-button.outlined, .l-post-content button.outlined:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card a.outlined.kg-btn, .l-post-content .kg-header-card .outlined.kg-header-card-button, .l-post-content .kg-product-card .outlined.kg-product-card-button, .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button):not(.primary) { + color: var(--titles-color); + border: 1px solid var(--primary-foreground-color); +} +.m-button.filled, .l-post-content button.filled:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card a.filled.kg-btn, .l-post-content .kg-header-card .filled.kg-header-card-button, .l-post-content .kg-product-card .filled.kg-product-card-button, .m-button.primary, .l-post-content button.primary:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card a.primary.kg-btn, .l-post-content .kg-header-card .primary.kg-header-card-button, .l-post-content .kg-product-card .primary.kg-product-card-button { + box-shadow: 0 2px 4px var(--button-shadow-color-normal), 0 0 0 transparent; +} +.m-button.filled:hover, .l-post-content button.filled:hover:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card a.filled.kg-btn:hover, .l-post-content .kg-header-card .filled.kg-header-card-button:hover, .l-post-content .kg-product-card .filled.kg-product-card-button:hover, .m-button.primary:hover, .l-post-content button.primary:hover:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card a.primary.kg-btn:hover, .l-post-content .kg-header-card .primary.kg-header-card-button:hover, .l-post-content .kg-product-card .primary.kg-product-card-button:hover { + transform: translateY(-2px); + box-shadow: 0 4px 8px var(--button-shadow-color-hover), 0 0 0 transparent; +} +.m-button.filled, .l-post-content button.filled:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card a.filled.kg-btn, .l-post-content .kg-header-card .filled.kg-header-card-button, .l-post-content .kg-product-card .filled.kg-product-card-button { + border-radius: 5px; + background-color: #fff; +} +.m-button.block, .l-post-content button.block:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card a.block.kg-btn, .l-post-content .kg-header-card .block.kg-header-card-button, .l-post-content .kg-product-card .block.kg-product-card-button { + display: block; + width: 100%; +} +.m-button.primary, .l-post-content button.primary:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card a.primary.kg-btn, .l-post-content .kg-header-card .primary.kg-header-card-button, .l-post-content .kg-product-card .primary.kg-product-card-button { + color: #fff; + background-color: var(--primary-subtle-color); +} +.m-button.loading, .m-subscribe-section__container.loading .m-button, .m-subscribe-section__container.loading .l-post-content .kg-button-card a.m-button.kg-btn, .l-post-content .kg-button-card .m-subscribe-section__container.loading a.m-button.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-header-card .m-button.kg-header-card-button, .l-post-content .kg-header-card .m-subscribe-section__container.loading .m-button.kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .m-button.kg-product-card-button, .l-post-content .kg-product-card .m-subscribe-section__container.loading .m-button.kg-product-card-button, .l-post-content button.loading:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .m-subscribe-section__container.loading .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .m-subscribe-section__container.loading button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card a.loading.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-button-card a.kg-btn, .l-post-content .kg-button-card .m-subscribe-section__container.loading a.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-button-card .kg-header-card a.kg-btn.kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-header-card .kg-button-card a.kg-btn.kg-header-card-button, .l-post-content .kg-button-card .kg-header-card .m-subscribe-section__container.loading a.kg-btn.kg-header-card-button, .l-post-content .kg-header-card .m-subscribe-section__container.loading .kg-button-card a.kg-btn.kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-button-card .kg-product-card a.kg-btn.kg-product-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .kg-button-card a.kg-btn.kg-product-card-button, .l-post-content .kg-button-card .kg-product-card .m-subscribe-section__container.loading a.kg-btn.kg-product-card-button, .l-post-content .kg-product-card .m-subscribe-section__container.loading .kg-button-card a.kg-btn.kg-product-card-button, .l-post-content .kg-header-card .loading.kg-header-card-button, .l-post-content .kg-header-card .kg-button-card .m-subscribe-section__container.loading a.kg-header-card-button.kg-btn, .l-post-content .kg-button-card .m-subscribe-section__container.loading .kg-header-card a.kg-header-card-button.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-header-card .kg-header-card-button, .l-post-content .kg-header-card .m-subscribe-section__container.loading .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-header-card .kg-product-card .kg-header-card-button.kg-product-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .kg-header-card .kg-header-card-button.kg-product-card-button, .l-post-content .kg-header-card .kg-product-card .m-subscribe-section__container.loading .kg-header-card-button.kg-product-card-button, .l-post-content .kg-product-card .m-subscribe-section__container.loading .kg-header-card .kg-header-card-button.kg-product-card-button, .l-post-content .kg-product-card .loading.kg-product-card-button, .l-post-content .kg-product-card .kg-button-card .m-subscribe-section__container.loading a.kg-product-card-button.kg-btn, .l-post-content .kg-button-card .m-subscribe-section__container.loading .kg-product-card a.kg-product-card-button.kg-btn, .l-post-content .kg-product-card .kg-header-card .m-subscribe-section__container.loading .kg-product-card-button.kg-header-card-button, .l-post-content .kg-header-card .m-subscribe-section__container.loading .kg-product-card .kg-product-card-button.kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .kg-product-card-button, .l-post-content .kg-product-card .m-subscribe-section__container.loading .kg-product-card-button { + cursor: default; + overflow: hidden; +} +.m-button.loading:after, .m-subscribe-section__container.loading .m-button:after, .m-subscribe-section__container.loading .l-post-content .kg-button-card a.m-button.kg-btn:after, .l-post-content .kg-button-card .m-subscribe-section__container.loading a.m-button.kg-btn:after, .m-subscribe-section__container.loading .l-post-content .kg-header-card .m-button.kg-header-card-button:after, .l-post-content .kg-header-card .m-subscribe-section__container.loading .m-button.kg-header-card-button:after, .m-subscribe-section__container.loading .l-post-content .kg-product-card .m-button.kg-product-card-button:after, .l-post-content .kg-product-card .m-subscribe-section__container.loading .m-button.kg-product-card-button:after, .l-post-content button.loading:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button):after, .m-subscribe-section__container.loading .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button):after, .l-post-content .m-subscribe-section__container.loading button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button):after, .l-post-content .kg-button-card a.loading.kg-btn:after, .m-subscribe-section__container.loading .l-post-content .kg-button-card a.kg-btn:after, .l-post-content .kg-button-card .m-subscribe-section__container.loading a.kg-btn:after, .m-subscribe-section__container.loading .l-post-content .kg-button-card .kg-header-card a.kg-btn.kg-header-card-button:after, .m-subscribe-section__container.loading .l-post-content .kg-header-card .kg-button-card a.kg-btn.kg-header-card-button:after, .l-post-content .kg-button-card .kg-header-card .m-subscribe-section__container.loading a.kg-btn.kg-header-card-button:after, .l-post-content .kg-header-card .m-subscribe-section__container.loading .kg-button-card a.kg-btn.kg-header-card-button:after, .m-subscribe-section__container.loading .l-post-content .kg-button-card .kg-product-card a.kg-btn.kg-product-card-button:after, .m-subscribe-section__container.loading .l-post-content .kg-product-card .kg-button-card a.kg-btn.kg-product-card-button:after, .l-post-content .kg-button-card .kg-product-card .m-subscribe-section__container.loading a.kg-btn.kg-product-card-button:after, .l-post-content .kg-product-card .m-subscribe-section__container.loading .kg-button-card a.kg-btn.kg-product-card-button:after, .l-post-content .kg-header-card .loading.kg-header-card-button:after, .l-post-content .kg-header-card .kg-button-card .m-subscribe-section__container.loading a.kg-header-card-button.kg-btn:after, .l-post-content .kg-button-card .m-subscribe-section__container.loading .kg-header-card a.kg-header-card-button.kg-btn:after, .m-subscribe-section__container.loading .l-post-content .kg-header-card .kg-header-card-button:after, .l-post-content .kg-header-card .m-subscribe-section__container.loading .kg-header-card-button:after, .m-subscribe-section__container.loading .l-post-content .kg-header-card .kg-product-card .kg-header-card-button.kg-product-card-button:after, .m-subscribe-section__container.loading .l-post-content .kg-product-card .kg-header-card .kg-header-card-button.kg-product-card-button:after, .l-post-content .kg-header-card .kg-product-card .m-subscribe-section__container.loading .kg-header-card-button.kg-product-card-button:after, .l-post-content .kg-product-card .m-subscribe-section__container.loading .kg-header-card .kg-header-card-button.kg-product-card-button:after, .l-post-content .kg-product-card .loading.kg-product-card-button:after, .l-post-content .kg-product-card .kg-button-card .m-subscribe-section__container.loading a.kg-product-card-button.kg-btn:after, .l-post-content .kg-button-card .m-subscribe-section__container.loading .kg-product-card a.kg-product-card-button.kg-btn:after, .l-post-content .kg-product-card .kg-header-card .m-subscribe-section__container.loading .kg-product-card-button.kg-header-card-button:after, .l-post-content .kg-header-card .m-subscribe-section__container.loading .kg-product-card .kg-product-card-button.kg-header-card-button:after, .m-subscribe-section__container.loading .l-post-content .kg-product-card .kg-product-card-button:after, .l-post-content .kg-product-card .m-subscribe-section__container.loading .kg-product-card-button:after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + width: 25%; + height: 2px; + background-color: #fff; + -webkit-animation: loading 1s infinite; + animation: loading 1s infinite; +} +@-webkit-keyframes loading { + 0% { + transform: translatex(0); + } + 50% { + transform: translatex(300%); + } + 100% { + transform: translatex(0); + } +} +@keyframes loading { + 0% { + transform: translatex(0); + } + 50% { + transform: translatex(300%); + } + 100% { + transform: translatex(0); + } +} + +.m-input, .l-post-content input:not([type=radio]):not([type=checkbox]):not(.kg-video-card input):not(.kg-audio-card input), +.l-post-content textarea, +.l-post-content select { + color: var(--primary-foreground-color); + letter-spacing: 0.2px; + line-height: 1.3; + font-size: 1rem; + width: 100%; + border-radius: 5px; + padding: 11px 15px; + border: 1px solid var(--primary-border-color); + outline: 0; + background-color: var(--background-color); +} +.m-input:focus, .l-post-content input:focus:not([type=radio]):not([type=checkbox]):not(.kg-video-card input):not(.kg-audio-card input), +.l-post-content textarea:focus, +.l-post-content select:focus { + border-color: var(--primary-subtle-color); +} +.m-input.in-search, .l-post-content input.in-search:not([type=radio]):not([type=checkbox]):not(.kg-video-card input):not(.kg-audio-card input), +.l-post-content textarea.in-search, +.l-post-content select.in-search { + font-weight: 600; + padding-left: 40px; +} +@media only screen and (min-width: 48rem) { + .m-input.in-search, .l-post-content input.in-search:not([type=radio]):not([type=checkbox]):not(.kg-video-card input):not(.kg-audio-card input), +.l-post-content textarea.in-search, +.l-post-content select.in-search { + font-size: 1.25rem; + padding: 15px 30px 15px 60px; + } +} +.m-input.in-subscribe-section, .l-post-content input.in-subscribe-section:not([type=radio]):not([type=checkbox]):not(.kg-video-card input):not(.kg-audio-card input), +.l-post-content textarea.in-subscribe-section, +.l-post-content select.in-subscribe-section { + margin-bottom: 15px; +} + +.m-share { + position: fixed; + left: 0; + bottom: 0; + width: 100%; + height: 45px; + z-index: 3; + background-color: var(--transparent-background-color); + box-shadow: 0 -4px 10px rgba(0, 0, 0, 0.1), 0 0 0 transparent; +} +@media only screen and (min-width: 48rem) { + .m-share { + height: 50px; + } +} +@media only screen and (min-width: 64rem) { + .m-share { + position: absolute; + top: 0; + left: auto; + right: -75px; + width: 40px; + height: auto; + background-color: transparent; + box-shadow: 0 0 0 transparent, 0 0 0 transparent; + } +} +@media only screen and (min-width: 80rem) { + .m-share { + width: 50px; + right: -175px; + } +} +@media only screen and (min-width: 90rem) { + .m-share { + right: -200px; + } +} +.m-share a { + color: inherit !important; +} +.m-share a:first-of-type { + margin-left: 0; +} +@media only screen and (min-width: 64rem) { + .m-share a:first-of-type { + margin-bottom: 0; + } +} +.m-share button:last-of-type { + margin-right: 0; +} + +@media only screen and (min-width: 64rem) { + .rtl .m-share { + right: auto; + left: -75px; + } +} +@media only screen and (min-width: 80rem) { + .rtl .m-share { + left: -175px; + } +} +@media only screen and (min-width: 90rem) { + .rtl .m-share { + left: -200px; + } +} + +.m-share__content { + display: flex; + align-items: center; + justify-content: center; + height: 100%; +} +@media only screen and (min-width: 64rem) { + .m-share__content { + position: -webkit-sticky; + position: sticky; + top: 100px; + flex-direction: column-reverse; + align-items: flex-start; + height: auto; + } +} + +.rtl .m-share__content { + direction: ltr; +} + +.m-subscribe-section { + padding: 50px 0; + background-color: var(--secondary-subtle-color); +} +@media only screen and (min-width: 48rem) { + .m-subscribe-section { + padding: 80px 0; + } +} + +@media only screen and (min-width: 48rem) { + .m-subscribe-section__content { + display: flex; + align-items: center; + justify-content: space-between; + } +} + +.m-subscribe-section__text { + text-align: center; + margin-bottom: 30px; +} +@media only screen and (min-width: 48rem) { + .m-subscribe-section__text { + flex: 1; + text-align: left; + padding-right: 75px; + margin-bottom: 0; + } +} + +@media only screen and (min-width: 48rem) { + .rtl .m-subscribe-section__text { + text-align: right; + padding-right: 0; + padding-left: 75px; + } +} + +.m-subscribe-section__title { + color: var(--titles-color); + letter-spacing: 0.3px; + line-height: 1.3; + font-size: 1.25rem; + font-weight: 600; + margin: 0 0 20px; +} +@media only screen and (min-width: 48rem) { + .m-subscribe-section__title { + letter-spacing: 0.3px; + font-size: 1.5rem; + margin-bottom: 15px; + } +} + +.m-subscribe-section__description { + letter-spacing: 0.2px; + line-height: 1.4; +} +@media only screen and (min-width: 48rem) { + .m-subscribe-section__description { + font-size: 1.125rem; + } +} + +@media only screen and (min-width: 48rem) { + .m-subscribe-section__form { + width: 300px; + margin: 0 auto; + } +} + +.m-subscribe-section__container.loading .m-button, .m-subscribe-section__container.loading .m-subscribe-section__container.m-button .m-button, .m-subscribe-section__container.loading .l-post-content button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .m-button, .l-post-content .m-subscribe-section__container.loading button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .m-button, .m-subscribe-section__container.loading .l-post-content .kg-button-card a.m-subscribe-section__container.kg-btn .m-button, .l-post-content .kg-button-card .m-subscribe-section__container.loading a.m-subscribe-section__container.kg-btn .m-button, .m-subscribe-section__container.loading .l-post-content .kg-header-card .m-subscribe-section__container.kg-header-card-button .m-button, .l-post-content .kg-header-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-header-card-button .m-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .m-subscribe-section__container.kg-product-card-button .m-button, .l-post-content .kg-product-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-product-card-button .m-button, .m-subscribe-section__container.loading .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .m-subscribe-section__container.loading .m-subscribe-section__container.m-button .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .m-subscribe-section__container.loading .l-post-content button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .m-subscribe-section__container.loading button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .m-subscribe-section__container.loading .l-post-content .kg-button-card a.m-subscribe-section__container.kg-btn .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card .m-subscribe-section__container.loading a.m-subscribe-section__container.kg-btn .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .m-subscribe-section__container.loading .l-post-content .kg-header-card .m-subscribe-section__container.kg-header-card-button .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-header-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-header-card-button .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .m-subscribe-section__container.loading .l-post-content .kg-product-card .m-subscribe-section__container.kg-product-card-button .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-product-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-product-card-button .l-post-content button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .m-subscribe-section__container.loading button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .m-subscribe-section__container.loading .m-subscribe-section__container.m-button button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .m-subscribe-section__container.loading .l-post-content .m-subscribe-section__container.m-button button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .m-subscribe-section__container.loading .l-post-content button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .m-subscribe-section__container.loading button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .m-subscribe-section__container.loading .l-post-content .kg-button-card a.m-subscribe-section__container.kg-btn button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-button-card .m-subscribe-section__container.loading a.m-subscribe-section__container.kg-btn button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .m-subscribe-section__container.loading .l-post-content .kg-header-card .m-subscribe-section__container.kg-header-card-button button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-header-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-header-card-button button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .m-subscribe-section__container.loading .l-post-content .kg-product-card .m-subscribe-section__container.kg-product-card-button button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .l-post-content .kg-product-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-product-card-button button:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button), .m-subscribe-section__container.loading .l-post-content .kg-button-card a.kg-btn, .m-subscribe-section__container.loading .m-subscribe-section__container.m-button .l-post-content .kg-button-card a.kg-btn, .m-subscribe-section__container.loading .l-post-content button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .l-post-content .kg-button-card a.kg-btn, .l-post-content .m-subscribe-section__container.loading button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .l-post-content .kg-button-card a.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-button-card a.m-subscribe-section__container.kg-btn .l-post-content .kg-button-card a.kg-btn, .l-post-content .kg-button-card .m-subscribe-section__container.loading a.m-subscribe-section__container.kg-btn .l-post-content .kg-button-card a.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-header-card .m-subscribe-section__container.kg-header-card-button .l-post-content .kg-button-card a.kg-btn, .l-post-content .kg-header-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-header-card-button .l-post-content .kg-button-card a.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-product-card .m-subscribe-section__container.kg-product-card-button .l-post-content .kg-button-card a.kg-btn, .l-post-content .kg-product-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-product-card-button .l-post-content .kg-button-card a.kg-btn, .l-post-content .kg-button-card .m-subscribe-section__container.loading a.kg-btn, .l-post-content .kg-button-card .m-subscribe-section__container.loading .m-subscribe-section__container.m-button a.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-button-card .m-subscribe-section__container.m-button a.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-button-card button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) a.kg-btn, .l-post-content .kg-button-card .m-subscribe-section__container.loading button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) a.kg-btn, .l-post-content .m-subscribe-section__container.loading .kg-button-card button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) a.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-button-card a.m-subscribe-section__container.kg-btn a.kg-btn, .l-post-content .kg-button-card .m-subscribe-section__container.loading a.m-subscribe-section__container.kg-btn a.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-button-card .kg-header-card .m-subscribe-section__container.kg-header-card-button a.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-header-card .kg-button-card .m-subscribe-section__container.kg-header-card-button a.kg-btn, .l-post-content .kg-button-card .kg-header-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-header-card-button a.kg-btn, .l-post-content .kg-header-card .m-subscribe-section__container.loading .kg-button-card .m-subscribe-section__container.kg-header-card-button a.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-button-card .kg-product-card .m-subscribe-section__container.kg-product-card-button a.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-product-card .kg-button-card .m-subscribe-section__container.kg-product-card-button a.kg-btn, .l-post-content .kg-button-card .kg-product-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-product-card-button a.kg-btn, .l-post-content .kg-product-card .m-subscribe-section__container.loading .kg-button-card .m-subscribe-section__container.kg-product-card-button a.kg-btn, .m-subscribe-section__container.loading .l-post-content .kg-header-card .kg-header-card-button, .m-subscribe-section__container.loading .m-subscribe-section__container.m-button .l-post-content .kg-header-card .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .l-post-content .kg-header-card .kg-header-card-button, .l-post-content .m-subscribe-section__container.loading button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .l-post-content .kg-header-card .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-button-card a.m-subscribe-section__container.kg-btn .l-post-content .kg-header-card .kg-header-card-button, .l-post-content .kg-button-card .m-subscribe-section__container.loading a.m-subscribe-section__container.kg-btn .l-post-content .kg-header-card .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-header-card .m-subscribe-section__container.kg-header-card-button .l-post-content .kg-header-card .kg-header-card-button, .l-post-content .kg-header-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-header-card-button .l-post-content .kg-header-card .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .m-subscribe-section__container.kg-product-card-button .l-post-content .kg-header-card .kg-header-card-button, .l-post-content .kg-product-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-product-card-button .l-post-content .kg-header-card .kg-header-card-button, .l-post-content .kg-header-card .m-subscribe-section__container.loading .kg-header-card-button, .l-post-content .kg-header-card .m-subscribe-section__container.loading .m-subscribe-section__container.m-button .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-header-card .m-subscribe-section__container.m-button .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-header-card button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .kg-header-card-button, .l-post-content .kg-header-card .m-subscribe-section__container.loading button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .kg-header-card-button, .l-post-content .m-subscribe-section__container.loading .kg-header-card button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-header-card .kg-button-card a.m-subscribe-section__container.kg-btn .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-button-card .kg-header-card a.m-subscribe-section__container.kg-btn .kg-header-card-button, .l-post-content .kg-header-card .kg-button-card .m-subscribe-section__container.loading a.m-subscribe-section__container.kg-btn .kg-header-card-button, .l-post-content .kg-button-card .m-subscribe-section__container.loading .kg-header-card a.m-subscribe-section__container.kg-btn .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-header-card .m-subscribe-section__container.kg-header-card-button .kg-header-card-button, .l-post-content .kg-header-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-header-card-button .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-header-card .kg-product-card .m-subscribe-section__container.kg-product-card-button .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .kg-header-card .m-subscribe-section__container.kg-product-card-button .kg-header-card-button, .l-post-content .kg-header-card .kg-product-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-product-card-button .kg-header-card-button, .l-post-content .kg-product-card .m-subscribe-section__container.loading .kg-header-card .m-subscribe-section__container.kg-product-card-button .kg-header-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .kg-product-card-button, .m-subscribe-section__container.loading .m-subscribe-section__container.m-button .l-post-content .kg-product-card .kg-product-card-button, .m-subscribe-section__container.loading .l-post-content button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .l-post-content .kg-product-card .kg-product-card-button, .l-post-content .m-subscribe-section__container.loading button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .l-post-content .kg-product-card .kg-product-card-button, .m-subscribe-section__container.loading .l-post-content .kg-button-card a.m-subscribe-section__container.kg-btn .l-post-content .kg-product-card .kg-product-card-button, .l-post-content .kg-button-card .m-subscribe-section__container.loading a.m-subscribe-section__container.kg-btn .l-post-content .kg-product-card .kg-product-card-button, .m-subscribe-section__container.loading .l-post-content .kg-header-card .m-subscribe-section__container.kg-header-card-button .l-post-content .kg-product-card .kg-product-card-button, .l-post-content .kg-header-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-header-card-button .l-post-content .kg-product-card .kg-product-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .m-subscribe-section__container.kg-product-card-button .l-post-content .kg-product-card .kg-product-card-button, .l-post-content .kg-product-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-product-card-button .l-post-content .kg-product-card .kg-product-card-button, .l-post-content .kg-product-card .m-subscribe-section__container.loading .kg-product-card-button, .l-post-content .kg-product-card .m-subscribe-section__container.loading .m-subscribe-section__container.m-button .kg-product-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .m-subscribe-section__container.m-button .kg-product-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .kg-product-card-button, .l-post-content .kg-product-card .m-subscribe-section__container.loading button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .kg-product-card-button, .l-post-content .m-subscribe-section__container.loading .kg-product-card button.m-subscribe-section__container:not(.m-icon-button):not(.kg-video-card button):not(.kg-audio-card button):not(.kg-toggle-card button) .kg-product-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .kg-button-card a.m-subscribe-section__container.kg-btn .kg-product-card-button, .m-subscribe-section__container.loading .l-post-content .kg-button-card .kg-product-card a.m-subscribe-section__container.kg-btn .kg-product-card-button, .l-post-content .kg-product-card .kg-button-card .m-subscribe-section__container.loading a.m-subscribe-section__container.kg-btn .kg-product-card-button, .l-post-content .kg-button-card .m-subscribe-section__container.loading .kg-product-card a.m-subscribe-section__container.kg-btn .kg-product-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .kg-header-card .m-subscribe-section__container.kg-header-card-button .kg-product-card-button, .m-subscribe-section__container.loading .l-post-content .kg-header-card .kg-product-card .m-subscribe-section__container.kg-header-card-button .kg-product-card-button, .l-post-content .kg-product-card .kg-header-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-header-card-button .kg-product-card-button, .l-post-content .kg-header-card .m-subscribe-section__container.loading .kg-product-card .m-subscribe-section__container.kg-header-card-button .kg-product-card-button, .m-subscribe-section__container.loading .l-post-content .kg-product-card .m-subscribe-section__container.kg-product-card-button .kg-product-card-button, .l-post-content .kg-product-card .m-subscribe-section__container.loading .m-subscribe-section__container.kg-product-card-button .kg-product-card-button { + pointer-events: none; +} +.m-subscribe-section__container.success .m-subscribe__success { + display: block; +} +.m-subscribe-section__container.success .m-subscribe__invalid, +.m-subscribe-section__container.success .m-subscribe__error, +.m-subscribe-section__container.success .m-subscribe__form { + display: none; +} +.m-subscribe-section__container.invalid .m-subscribe__invalid { + display: block; +} +.m-subscribe-section__container.error .m-subscribe__error { + display: block; +} +.m-subscribe-section__container.error .m-subscribe__form { + margin-bottom: 20px; +} +.m-subscribe-section__container .m-subscribe__success, +.m-subscribe-section__container .m-subscribe__invalid, +.m-subscribe-section__container .m-subscribe__error { + display: none; +} + +.m-subscribe__success_icon { + display: block; + width: 64px; + height: 64px; + margin: 0 auto 25px; +} + +.m-subscribe__error { + text-align: center; +} + +.m-author { + padding: 40px 20px; + border-color: var(--primary-border-color); + border-top-width: 1px; + border-bottom-width: 1px; + border-left-width: 0; + border-right-width: 0; + border-style: solid; + margin: 0 auto; +} +@media only screen and (min-width: 48rem) { + .m-author { + display: flex; + justify-content: center; + padding: 60px 40px; + } +} +@media only screen and (min-width: 80rem) { + .m-author { + padding: 60px 0; + } +} + +@media only screen and (min-width: 48rem) { + .m-author__content { + display: flex; + max-width: 820px; + } +} + +.m-author__picture { + width: 90px; + margin: 0 auto 25px; +} +@media only screen and (min-width: 48rem) { + .m-author__picture { + width: 100px; + margin: 0 30px 0 0; + } +} + +@media only screen and (min-width: 48rem) { + .rtl .m-author__picture { + margin: 0 0 0 30px; + } +} + +.m-author__info { + text-align: center; +} +@media only screen and (min-width: 48rem) { + .m-author__info { + flex: 1; + text-align: left; + } +} + +@media only screen and (min-width: 48rem) { + .rtl .m-author__info { + text-align: right; + } +} + +.m-author__name { + color: var(--link-color); + letter-spacing: 0.2px; + line-height: 1.3; + font-size: 1.125rem; + font-weight: 400; + margin: 0 0 15px; +} +@media only screen and (min-width: 48rem) { + .m-author__name { + letter-spacing: 0.3px; + font-size: 1.25rem; + } +} + +.m-author__bio { + letter-spacing: 0.2px; + line-height: 1.5; + margin-bottom: 20px; +} +@media only screen and (min-width: 48rem) { + .m-author__bio { + margin-bottom: 15px; + } +} + +.m-author-picture { + display: block; + width: 90px; + height: 90px; +} +@media only screen and (min-width: 48rem) { + .m-author-picture { + width: 100px; + height: 100px; + } +} +.m-author-picture div { + width: 100%; + height: 100%; + border-radius: 50%; + background-repeat: no-repeat; + background-position: center; + background-size: cover; +} + +.m-author-links { + padding: 0; + margin: 0; + list-style-type: none; + text-align: center; +} +@media only screen and (min-width: 48rem) { + .m-author-links { + text-align: left; + } +} +.m-author-links li { + display: inline-block; + margin: 0 11px; +} +.m-author-links li:first-of-type { + margin-left: 0; +} +.m-author-links li:last-of-type { + margin-right: 0; +} + +.rtl .m-author-links { + direction: ltr; + text-align: right; +} + +.m-comments { + padding-top: 40px; +} +@media only screen and (min-width: 48rem) { + .m-comments { + padding-top: 60px; + } +} +.m-comments iframe { + width: 100%; + max-width: 100%; +} + +.m-recommended { + padding-top: 40px; +} +@media only screen and (min-width: 48rem) { + .m-recommended { + padding-top: 60px; + } +} + +.m-recommended__empty { + padding: 40px 0 60px; + margin: 0 auto; +} +@media only screen and (min-width: 48rem) { + .m-recommended__empty { + max-width: 420px; + padding-left: 20px; + padding-right: 20px; + } +} + +.m-recommended-articles { + margin: 0 -20px; +} +@media only screen and (min-width: 64rem) { + .m-recommended-articles { + padding: 0 40px; + margin: 0 -30px; + } +} + +.m-recommended-slider { + list-style-type: none; + padding: 0; + margin: 0; +} +@media only screen and (min-width: 64rem) { + .m-recommended-slider { + padding: 20px 30px 0 !important; + margin: -20px -30px 0 !important; + } +} +.m-recommended-slider .swiper-wrapper { + padding: 40px 0 60px; +} +@media only screen and (min-width: 64rem) { + .m-recommended-slider .swiper-wrapper { + justify-content: center; + } +} +@media only screen and (min-width: 80rem) { + .m-recommended-slider .swiper-wrapper { + overflow: visible; + } +} +.m-recommended-slider .m-article-card { + width: 100% !important; + margin: 0 !important; +} +@media only screen and (min-width: 64rem) { + .m-recommended-slider .m-article-card .m-article-card__picture { + height: 190px; + } +} +@media only screen and (min-width: 80rem) { + .m-recommended-slider .m-article-card .m-article-card__picture { + height: 220px; + } +} + +.m-recommended-slider__item { + padding: 0 20px; +} +@media only screen and (min-width: 64rem) { + .m-recommended-slider__item.swiper-slide-duplicate { + display: none !important; + } +} + +.post-template { + background-color: var(--background-color) !important; +} + +.post-template .m-hero.with-picture { + min-height: unset; + aspect-ratio: 16/9; + margin-top: 50px; +} + +@media only screen and (min-width: 48rem) { + .post-template .m-hero.with-picture { + margin-top: 65px; + } +} +@supports not (aspect-ratio: 16/9) { + .post-template .m-hero.with-picture { + width: 100%; + overflow: hidden; + } + .post-template .m-hero.with-picture { + content: ""; + display: block; + padding-top: 56.25%; + } + .post-template .m-hero.with-picture img { + -o-object-fit: fill; + object-fit: fill; + } +} +.disclamer-deprecated-post { + margin: 30px 0; + padding: 15px 20px; + color: var(--primary-text-color); + text-align: center; + line-height: 1.5; + letter-spacing: 0.2px; + background-color: rgba(231, 81, 81, 0.3); + border: 1px solid rgba(231, 81, 81, 0.5); + border-radius: 5px; + display: block; +} diff --git a/assets/css/tags.css b/assets/css/tags.css index 2e9ed385b..483831b60 100644 --- a/assets/css/tags.css +++ b/assets/css/tags.css @@ -1 +1,141 @@ -@media only screen and (min-width:48rem){.l-tags-container{display:flex;flex-wrap:wrap;justify-content:center;margin:0 auto;max-width:720px}}@media only screen and (min-width:64rem){.l-tags-container{max-width:1080px}}.m-tag-card{height:180px;margin:0 0 20px;position:relative;border-radius:10px;border:1px solid var(--secondary-border-color);transition:all .25s cubic-bezier(.02,.01,.47,1)}.m-tag-card:hover{transform:translateY(-5px)}.m-tag-card:hover:before{box-shadow:var(--article-shadow-hover),0 0 0 transparent}@media only screen and (min-width:48rem){.m-tag-card{width:320px;margin:0 20px 40px}}.m-tag-card:before{content:"";position:absolute;z-index:1;box-shadow:var(--article-shadow-normal),0 0 0 transparent;transition:all .25s cubic-bezier(.02,.01,.47,1);background:var(--secondary-subtle-color);opacity:.2;left:0;top:0}.m-tag-card:before,.m-tag-card__link{border-radius:10px;width:100%;height:100%}.m-tag-card__link{display:block;overflow:hidden;position:relative;background-color:unset;z-index:2}.m-tag-card__picture{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:10px;-o-object-fit:cover;object-fit:cover;opacity:.7;z-index:1}.m-tag-card__info{position:absolute;color:#fff;z-index:2;top:50%;left:50%;transform:translate(-50%,-50%);padding:20px;width:100%}.m-tag-card__info.no-picture{color:var(--titles-color)}.m-tag-card__name{margin:0 0 5px;color:var(--secondary-subtle-color);font-size:1.25rem;line-height:1.5rem;text-align:center;letter-spacing:.02em}.m-tag-card__counter{display:block;font-size:.75rem;line-height:1.25rem;text-align:center;letter-spacing:.02em;text-transform:uppercase}.tags-template .m-hero{background:url(/assets/images/blog.iota.org-light-tag-header.jpg);background-position:50%;min-height:320px}.tags-template .m-hero img{display:none!important}[data-theme=dark] .tags-template .m-hero{background:url(/assets/images/blog.iota.org-dark-tag-header.jpg);background-position:50%;min-height:320px}[data-theme=dark] .tags-template .m-hero img{display:none!important}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .tags-template .m-hero{background:url(/assets/images/blog.iota.org-dark-tag-header.jpg);background-position:50%;min-height:320px}:root:not([data-theme=light]) .tags-template .m-hero img{display:none!important}} \ No newline at end of file +/** Mixins */ /** Colors */ +/** Config */ +:root { + --announcement-bar-height: 0px; + --show-fade-animation: 1; +} + +@media only screen and (min-width: 48rem) { + .l-tags-container { + display: flex; + flex-wrap: wrap; + justify-content: center; + margin: 0 auto; + max-width: 720px; + } +} +@media only screen and (min-width: 64rem) { + .l-tags-container { + max-width: 1080px; + } +} + +.m-tag-card { + height: 180px; + margin: 0 0 20px; + position: relative; + border-radius: 0px; + border: 1px solid var(--secondary-border-color); + transition: all 0.25s cubic-bezier(0.02, 0.01, 0.47, 1); +} +.m-tag-card:hover { + transform: translateY(-5px); +} +.m-tag-card:hover:before { + box-shadow: var(--article-shadow-hover), 0 0 0 transparent; +} +@media only screen and (min-width: 48rem) { + .m-tag-card { + width: 320px; + margin: 0 20px 40px; + } +} +.m-tag-card:before { + content: ""; + position: absolute; + border-radius: 0px; + z-index: 1; + box-shadow: var(--article-shadow-normal), 0 0 0 transparent; + transition: all 0.25s cubic-bezier(0.02, 0.01, 0.47, 1); + background: var(--secondary-subtle-color); + opacity: 0.2; + width: 100%; + height: 100%; + left: 0; + top: 0; +} + +.m-tag-card__link { + display: block; + width: 100%; + height: 100%; + border-radius: 0px; + overflow: hidden; + position: relative; + background-color: unset; + z-index: 2; +} + +.m-tag-card__picture { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-radius: 0px; + -o-object-fit: cover; + object-fit: cover; + opacity: 0.7; + z-index: 1; +} + +.m-tag-card__info { + position: absolute; + color: #fff; + z-index: 2; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + padding: 20px; + width: 100%; +} +.m-tag-card__info.no-picture { + color: var(--titles-color); +} + +.m-tag-card__name { + margin: 0 0 5px; + color: var(--secondary-subtle-color); + font-size: 1.25rem; + line-height: 1.5rem; + text-align: center; + letter-spacing: 0.02em; +} + +.m-tag-card__counter { + display: block; + font-size: 0.75rem; + line-height: 1.25rem; + text-align: center; + letter-spacing: 0.02em; + text-transform: uppercase; +} + +.tags-template .m-hero { + background: url("/assets/images/blog.iota.org-light-tag-header.jpg"); + background-position: center; + min-height: 320px; +} +.tags-template .m-hero img { + display: none !important; +} + +[data-theme=dark] .tags-template .m-hero { + background: url("/assets/images/blog.iota.org-dark-tag-header.jpg"); + background-position: center; + min-height: 320px; +} +[data-theme=dark] .tags-template .m-hero img { + display: none !important; +} + +@media (prefers-color-scheme: dark) { + :root:not([data-theme=light]) .tags-template .m-hero { + background: url("/assets/images/blog.iota.org-dark-tag-header.jpg"); + background-position: center; + min-height: 320px; + } + :root:not([data-theme=light]) .tags-template .m-hero img { + display: none !important; + } +} diff --git a/assets/js/app.js b/assets/js/app.js index 1f0948820..28d9f71fb 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -1 +1,505 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{1:function(e,t,n){"use strict";n.r(t),n.d(t,"isRTL",(function(){return o})),n.d(t,"isMobile",(function(){return a})),n.d(t,"isDarkMode",(function(){return r})),n.d(t,"formatDate",(function(){return i})),n.d(t,"getParameterByName",(function(){return s})),n.d(t,"adjustImageGallery",(function(){return c})),n.d(t,"managePostImages",(function(){return l})),n.d(t,"makeImagesZoomable",(function(){return u}));var o=function(){var e=document.querySelector("html");return["ar","he","fa"].includes(e.getAttribute("lang"))},a=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"768px";return window.matchMedia("(max-width: ".concat(e,")")).matches},r=function(){var e=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");return e&&e.matches},i=function(e){return e?new Date(e).toLocaleDateString(document.documentElement.lang,{year:"numeric",month:"long",day:"numeric"}):""},s=function(e,t){t||(t=window.location.href),e=e.replace(/[\[\]]/g,"\\$&");var n=new RegExp("[?&]".concat(e,"(=([^&#]*)|&|#|$)")).exec(t);return n?n[2]?decodeURIComponent(n[2].replace(/\+/g," ")):"":null},c=function(){for(var e=document.querySelectorAll(".kg-gallery-image img"),t=0,n=e.length;t1&&t.last().hide()}),10)}))}},17:function(e,t,n){e.exports=n(18)},18:function(e,t,n){"use strict";n.r(t);var o=n(4),a=n.n(o),r=n(0),i=n.n(r),s=n(8),c=n.n(s),l=n(2),u=n(12),d=(n(20),n(3)),h=n(9),m=n.n(h),f=n(10),p=n(1);function g(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function b(e){for(var t=1;t0){var n=t.substring(0,t.indexOf("?"));window.history.replaceState({},document.title,n)}},H=function(e){Object(p.isMobile)()||(e?(P.addClass("toggle-overflow"),D.addClass("toggle-overflow")):(P.removeClass("toggle-overflow"),D.removeClass("toggle-overflow")))};n.on("click",(function(){t.addClass("mobile-menu-opened"),r.addClass("opened"),q()})),o.on("click",(function(){t.removeClass("mobile-menu-opened"),r.removeClass("opened"),q()})),s.on("click",(function(){(L=!L)?(t.addClass("submenu-is-active"),s.addClass("active"),g.removeClass("closed").addClass("opened")):R()}));var F,K,J;(y.on("click",(function(){O.addClass("opened"),setTimeout((function(){C.trigger("focus")}),400),q()})),k.on("click",(function(){C.trigger("blur"),O.removeClass("opened"),q()})),C.on("keyup",j(a.a.mark((function e(){var t,n,o,r,i;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(C.val().length>0&&E)){e.next=8;break}return e.next=3,N(C.val());case 3:if(t=e.sent.hits,n="",t.length>0){for(o=0,r=t.length;o

').concat(t[o].document.title,'

').concat(Object(p.formatDate)(i),"
");_.hide(),x.html(n),x.show()}else x.html(""),x.hide(),_.show();e.next=11;break;case 8:x.html(""),x.hide(),_.hide();case 11:case"end":return e.stop()}}),e)})))),T.on("change",(function(){T.is(":checked")?(i()("html").attr("data-theme","dark"),localStorage.setItem("theme","dark")):(i()("html").attr("data-theme","light"),localStorage.setItem("theme","light"))})),T.on("mouseenter",(function(){H(!0)})),T.on("mouseleave",(function(){H(!0)})),S.on("click",(function(){z(i()(this).parent())})),i()(window).on("click",(function(e){L&&h&&!h.contains(e.target)&&(L=!1,R())})),i()(document).on("keyup",(function(e){"Escape"===e.key&&O.hasClass("opened")&&k.click()})),I?(i()("html").attr("data-theme",I),"dark"===I&&T.attr("checked",!0)):Object(p.isDarkMode)()&&T.attr("checked",!0),t.length>0)&&new c.a(t[0],{tolerance:{down:10,up:20},offset:15,onUnpin:function(){if(!Object(p.isMobile)()&&A){var e=A[0];e&&e.state.isVisible&&e.hide()}}}).init();if(w.length>0){var U=new l.d(".js-recent-slider",{type:"slider",rewind:!1,perView:4,swipeThreshold:!1,dragThreshold:!1,gap:0,direction:Object(p.isRTL)()?"rtl":"ltr",breakpoints:{1024:{perView:3,swipeThreshold:80,dragThreshold:120},768:{perView:2,swipeThreshold:80,dragThreshold:120,peek:{before:0,after:115}},568:{perView:1,swipeThreshold:80,dragThreshold:120,peek:{before:0,after:115}}}});U.on("mount.after",(function(){Object(d.a)(".js-recent-article-title",50)})),U.mount({Swipe:l.c,Breakpoints:l.a})}if("undefined"!=typeof disableFadeAnimation&&disableFadeAnimation?i()("[data-aos]").addClass("no-aos-animation"):m.a.init({once:!0,startEvent:"DOMContentLoaded"}),v.length>0){var $=document.getElementById("secondary-navigation-template");A=Object(u.a)(".js-open-secondary-menu",{appendTo:document.body,content:$.innerHTML,allowHTML:!0,arrow:!0,trigger:"click",interactive:!0,onShow:function(){H(!0)},onHidden:function(){H(!1)}})}Object(u.a)(".js-tooltip"),Object(d.a)(".js-article-card-title",100),Object(d.a)(".js-article-card-title-no-image",250),F=Object(p.getParameterByName)("action"),K=Object(p.getParameterByName)("stripe"),"subscribe"===F&&V("subscribe"),"signup"===F&&(window.location="".concat(ghostHost,"/signup/?action=checkout")),"checkout"===F&&V("signup"),"signin"===F&&V("signin"),"success"===K&&V("checkout"),"undefined"!=typeof disableNewsletter&&disableNewsletter&&M.remove(),"undefined"!=typeof typesenseApiKey&&B(),J=i()("a"),i.a.each(J,(function(e,t){t.href.includes(window.location.hostname)||(t.target="_blank")}))}))}},[[17,0,1]]]); \ No newline at end of file +(self["webpackChunkliebling"] = self["webpackChunkliebling"] || []).push([["/js/app"],{ + +/***/ "./js/app.js": +/*!*******************!*\ + !*** ./js/app.js ***! + \*******************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var headroom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! headroom.js */ "./node_modules/headroom.js/dist/headroom.js"); +/* harmony import */ var headroom_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(headroom_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var tippy_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! tippy.js */ "./node_modules/tippy.js/dist/tippy.esm.js"); +/* harmony import */ var tippy_js_dist_tippy_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tippy.js/dist/tippy.css */ "./node_modules/tippy.js/dist/tippy.css"); +/* harmony import */ var shave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shave */ "./node_modules/shave/dist/shave.es.js"); +/* harmony import */ var _tryghost_content_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @tryghost/content-api */ "./node_modules/@tryghost/content-api/es/content-api.js"); +/* harmony import */ var typesense_dist_typesense_min__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! typesense/dist/typesense.min */ "./node_modules/typesense/dist/typesense.min.js"); +/* harmony import */ var typesense_dist_typesense_min__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(typesense_dist_typesense_min__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! swiper */ "./node_modules/swiper/swiper.esm.js"); +/* harmony import */ var swiper_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! swiper/css */ "./node_modules/swiper/swiper.min.css"); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./helpers */ "./js/helpers.js"); +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +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 asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + + + + + + + + + + + +jquery__WEBPACK_IMPORTED_MODULE_0___default()(function () { + if ((0,_helpers__WEBPACK_IMPORTED_MODULE_8__.isRTL)()) { + jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').attr('dir', 'rtl').addClass('rtl'); + } + + var $body = jquery__WEBPACK_IMPORTED_MODULE_0___default()('body'); + var $header = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-header'); + var $announcementBar = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#announcement-bar-root'); + var $openMenu = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-open-menu'); + var $closeMenu = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-close-menu'); + var $menu = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-menu'); + var $toggleSubmenu = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-toggle-submenu'); + var $submenuOption = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-submenu-option')[0]; + var $submenu = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-submenu'); + var $recentSlider = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-recent-slider'); + var $openSecondaryMenu = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-open-secondary-menu'); + var $openSearch = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-open-search'); + var $closeSearch = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-close-search'); + var $search = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-search'); + var $inputSearch = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-input-search'); + var $searchResults = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-search-results'); + var $searchNoResults = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-no-results'); + var $toggleDarkMode = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-toggle-darkmode'); + var $mainNav = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-main-nav'); + var $mainNavLeft = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-main-nav-left'); + var $newsletterElements = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-newsletter'); + var $nativeComments = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-native-comments > div > iframe')[0]; + var currentSavedTheme = localStorage.getItem('theme'); + var postsCollection = null; + var submenuIsOpen = false; + var secondaryMenuTippy = null; + + var showSubmenu = function showSubmenu() { + $header.addClass('submenu-is-active'); + $toggleSubmenu.addClass('active'); + $submenu.removeClass('closed').addClass('opened'); + }; + + var hideSubmenu = function hideSubmenu() { + $header.removeClass('submenu-is-active'); + $toggleSubmenu.removeClass('active'); + $submenu.removeClass('opened').addClass('closed'); + }; + + var toggleScrollVertical = function toggleScrollVertical() { + $body.toggleClass('no-scroll-y'); + }; + + var tryToRemoveNewsletter = function tryToRemoveNewsletter() { + if (typeof disableNewsletter !== 'undefined' && disableNewsletter) { + $newsletterElements.remove(); + } + }; + + var trySearchFeature = function trySearchFeature() { + if (typeof typesenseApiKey !== 'undefined') { + initTypesense(); + } + }; // NOTE: This is not from the liebling theme + + + var initTypesense = function initTypesense() { + var searchClient = new typesense_dist_typesense_min__WEBPACK_IMPORTED_MODULE_5__.SearchClient({ + nodes: [{ + host: 'blog-search.iota.org', + port: '443', + protocol: 'https' + }], + apiKey: typesenseApiKey, + connectionTimeoutSeconds: 5, + cacheSearchResultsForSeconds: 120 + }); + postsCollection = searchClient.collections('posts'); + }; + + var typesenseSearch = /*#__PURE__*/function () { + var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(query) { + var params; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + params = { + query_by: "title, tags, author, text", + query_by_weights: "3, 3, 1, 2", + highlight_fields: "text", + highlight_affix_num_tokens: 4, + per_page: 100, + typo_tokens_threshold: 10, + exclude_fields: "text", + num_typos: 2 + }; + _context.next = 3; + return postsCollection.documents().search(_objectSpread({ + q: query + }, params)); + + case 3: + return _context.abrupt("return", _context.sent); + + case 4: + case "end": + return _context.stop(); + } + } + }, _callee); + })); + + return function typesenseSearch(_x) { + return _ref.apply(this, arguments); + }; + }(); + + var toggleDesktopTopbarOverflow = function toggleDesktopTopbarOverflow(disableOverflow) { + if (!(0,_helpers__WEBPACK_IMPORTED_MODULE_8__.isMobile)()) { + if (disableOverflow) { + $mainNav.addClass('toggle-overflow'); + $mainNavLeft.addClass('toggle-overflow'); + } else { + $mainNav.removeClass('toggle-overflow'); + $mainNavLeft.removeClass('toggle-overflow'); + } + } + }; + + $openMenu.on('click', function () { + $header.addClass('mobile-menu-opened'); + $menu.addClass('opened'); + toggleScrollVertical(); + }); + $closeMenu.on('click', function () { + $header.removeClass('mobile-menu-opened'); + $menu.removeClass('opened'); + toggleScrollVertical(); + }); + $toggleSubmenu.on('click', function () { + submenuIsOpen = !submenuIsOpen; + + if (submenuIsOpen) { + showSubmenu(); + } else { + hideSubmenu(); + } + }); + + var openExternalLinksInDifferentTab = function openExternalLinksInDifferentTab() { + var links = jquery__WEBPACK_IMPORTED_MODULE_0___default()('a'); + jquery__WEBPACK_IMPORTED_MODULE_0___default().each(links, function (index, value) { + if (!value.href.includes(window.location.hostname)) { + if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(value).parents('#cookieblock', '#cookieblock__banner__wrapper', '#cookieblock__banner').length > 0) { + value.target = '_self'; + } else { + value.target = '_blank'; + } + } + }); + }; + + $openSearch.on('click', function () { + $search.addClass('opened'); + setTimeout(function () { + $inputSearch.trigger('focus'); + }, 400); + toggleScrollVertical(); + }); + $closeSearch.on('click', function () { + $inputSearch.trigger('blur'); + $search.removeClass('opened'); + toggleScrollVertical(); + }); + $inputSearch.on('keyup', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { + var results, htmlString, i, len, date; + return _regeneratorRuntime().wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + if (!($inputSearch.val().length > 0 && postsCollection)) { + _context2.next = 8; + break; + } + + _context2.next = 3; + return typesenseSearch($inputSearch.val()); + + case 3: + results = _context2.sent.hits; + htmlString = ''; + + if (results.length > 0) { + for (i = 0, len = results.length; i < len; i++) { + date = results[i].document.date * 1000; + htmlString += "\n "); + } + + $searchNoResults.hide(); + $searchResults.html(htmlString); + $searchResults.show(); + } else { + $searchResults.html(''); + $searchResults.hide(); + $searchNoResults.show(); + } + + _context2.next = 11; + break; + + case 8: + $searchResults.html(''); + $searchResults.hide(); + $searchNoResults.hide(); + + case 11: + case "end": + return _context2.stop(); + } + } + }, _callee2); + }))); + $toggleDarkMode.on('change', function () { + if ($toggleDarkMode.is(':checked')) { + jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').attr('data-theme', 'dark'); + localStorage.setItem('theme', 'dark'); + } else { + jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').attr('data-theme', 'light'); + localStorage.setItem('theme', 'light'); + } + + if ($nativeComments) { + $nativeComments.contentDocument.location.reload(true); + } + }); + $toggleDarkMode.on('mouseenter', function () { + toggleDesktopTopbarOverflow(true); + }); + $toggleDarkMode.on('mouseleave', function () { + toggleDesktopTopbarOverflow(false); + }); + jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('click', function (e) { + if (submenuIsOpen) { + if ($submenuOption && !$submenuOption.contains(e.target)) { + submenuIsOpen = false; + hideSubmenu(); + } + } + }); + jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).on('keyup', function (e) { + if (e.key === 'Escape' && $search.hasClass('opened')) { + $closeSearch.trigger('click'); + } + }); + + if (currentSavedTheme) { + if (currentSavedTheme === 'dark') { + $toggleDarkMode.each(function () { + jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).attr('checked', true); + }); + } + } + + if ($header.length > 0) { + var headroom = new (headroom_js__WEBPACK_IMPORTED_MODULE_1___default())($header[0], { + tolerance: { + down: 10, + up: 20 + }, + offset: 15, + onUnpin: function onUnpin() { + if (!(0,_helpers__WEBPACK_IMPORTED_MODULE_8__.isMobile)() && secondaryMenuTippy) { + var desktopSecondaryMenuTippy = secondaryMenuTippy[0]; + + if (desktopSecondaryMenuTippy && desktopSecondaryMenuTippy.state.isVisible) { + desktopSecondaryMenuTippy.hide(); + } + } + } + }); + headroom.init(); + } + + if ($announcementBar.length > 0) { + $header.addClass('with-announcement-bar'); + setTimeout(function () { + $header.removeAttr('data-animate'); + }, 500); + var barMutationObserver = new MutationObserver(function (e) { + if (e[0].addedNodes.length) { + $announcementBar.detach().prependTo($header); + var barHeight = $announcementBar.height(); + document.documentElement.style.setProperty('--announcement-bar-height', "".concat(barHeight, "px")); + } + + if (e[0].removedNodes.length) { + document.documentElement.style.setProperty('--announcement-bar-height', '0px'); + } + }); + var barResizeObserver = new ResizeObserver(function (entries) { + entries.forEach(function (entry) { + var barHeight = entry.contentRect.height; + document.documentElement.style.setProperty('--announcement-bar-height', "".concat(barHeight, "px")); + }); + }); + barMutationObserver.observe($announcementBar[0], { + childList: true + }); + barResizeObserver.observe($announcementBar[0]); + } else { + setTimeout(function () { + $header.removeAttr('data-animate'); + }, 500); + } + + if ($recentSlider.length > 0) { + var recentSwiper = new swiper__WEBPACK_IMPORTED_MODULE_6__["default"]('.js-recent-slider', { + modules: [swiper__WEBPACK_IMPORTED_MODULE_6__.FreeMode, swiper__WEBPACK_IMPORTED_MODULE_6__.A11y], + freeMode: true, + slidesPerView: 'auto', + a11y: true, + on: { + init: function init() { + (0,shave__WEBPACK_IMPORTED_MODULE_3__["default"])('.js-recent-article-title', 50); + } + } + }); + } + + if ($openSecondaryMenu.length > 0) { + var template = document.getElementById('secondary-navigation-template'); + secondaryMenuTippy = (0,tippy_js__WEBPACK_IMPORTED_MODULE_9__["default"])('.js-open-secondary-menu', { + appendTo: document.body, + content: template.innerHTML, + allowHTML: true, + arrow: true, + trigger: 'click', + interactive: true, + onShow: function onShow() { + toggleDesktopTopbarOverflow(true); + }, + onHidden: function onHidden() { + toggleDesktopTopbarOverflow(false); + } + }); + } + + (0,tippy_js__WEBPACK_IMPORTED_MODULE_9__["default"])('.js-tooltip', { + allowHTML: true + }); + (0,shave__WEBPACK_IMPORTED_MODULE_3__["default"])('.js-article-card-title', 100); + (0,shave__WEBPACK_IMPORTED_MODULE_3__["default"])('.js-article-card-title-no-image', 250); + tryToRemoveNewsletter(); + trySearchFeature(); + openExternalLinksInDifferentTab(); +}); + +/***/ }), + +/***/ "./js/helpers.js": +/*!***********************!*\ + !*** ./js/helpers.js ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "adjustImageGallery": () => (/* binding */ adjustImageGallery), +/* harmony export */ "formatDate": () => (/* binding */ formatDate), +/* harmony export */ "getParameterByName": () => (/* binding */ getParameterByName), +/* harmony export */ "isMobile": () => (/* binding */ isMobile), +/* harmony export */ "isRTL": () => (/* binding */ isRTL), +/* harmony export */ "makeImagesZoomable": () => (/* binding */ makeImagesZoomable), +/* harmony export */ "managePostImages": () => (/* binding */ managePostImages) +/* harmony export */ }); +var isRTL = function isRTL() { + var $html = document.querySelector('html'); + return ['ar', 'he', 'fa'].includes($html.getAttribute('lang')); +}; +var isMobile = function isMobile() { + var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '768px'; + return window.matchMedia("(max-width: ".concat(width, ")")).matches; +}; +var formatDate = function formatDate(date) { + if (date) { + return new Date(date).toLocaleDateString(document.documentElement.lang, { + year: 'numeric', + month: 'long', + day: 'numeric' + }); + } + + return ''; +}; +var getParameterByName = function getParameterByName(name, url) { + if (!url) url = window.location.href; + name = name.replace(/[\[\]]/g, '\\$&'); + var regex = new RegExp("[?&]".concat(name, "(=([^&#]*)|&|#|$)")); + var results = regex.exec(url); + if (!results) return null; + if (!results[2]) return ''; + return decodeURIComponent(results[2].replace(/\+/g, ' ')); +}; +var adjustImageGallery = function adjustImageGallery() { + var images = document.querySelectorAll('.kg-gallery-image img'); + + for (var i = 0, len = images.length; i < len; i++) { + var container = images[i].closest('.kg-gallery-image'); + var width = images[i].attributes.width.value; + var height = images[i].attributes.height.value; + var ratio = width / height; + container.style.flex = "".concat(ratio, " 1 0%"); + } +}; +var managePostImages = function managePostImages($) { + $('.js-post-content').find('img').each(function () { + if (!$(this).closest('figure').hasClass('kg-bookmark-card') && !$(this).closest('figure').hasClass('kg-nft-card') && !$(this).parent().is('a') && !$(this).hasClass('kg-product-card-image') && !$(this).hasClass('kg-audio-thumbnail')) { + $(this).addClass('js-zoomable'); + } + }); +}; +var makeImagesZoomable = function makeImagesZoomable($, mediumZoom) { + var zoom = mediumZoom('.js-zoomable'); + zoom.on('opened', function () { + setTimeout(function () { + var $mediumZoomImages = $('.medium-zoom-image--opened'); + + if ($mediumZoomImages.length > 1) { + $mediumZoomImages.last().hide(); + } + }, 10); + }); +}; + +/***/ }), + +/***/ "./node_modules/typesense/dist sync recursive": +/*!*******************************************!*\ + !*** ./node_modules/typesense/dist/ sync ***! + \*******************************************/ +/***/ ((module) => { + +function webpackEmptyContext(req) { + var e = new Error("Cannot find module '" + req + "'"); + e.code = 'MODULE_NOT_FOUND'; + throw e; +} +webpackEmptyContext.keys = () => ([]); +webpackEmptyContext.resolve = webpackEmptyContext; +webpackEmptyContext.id = "./node_modules/typesense/dist sync recursive"; +module.exports = webpackEmptyContext; + +/***/ }) + +}, +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ __webpack_require__.O(0, ["/js/vendor"], () => (__webpack_exec__("./js/app.js"))); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ } +]); \ No newline at end of file diff --git a/assets/js/helpers.js b/assets/js/helpers.js index 2215d6a54..9117ac1ae 100644 --- a/assets/js/helpers.js +++ b/assets/js/helpers.js @@ -1 +1,171 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{1:function(t,n,e){"use strict";e.r(n),e.d(n,"isRTL",(function(){return o})),e.d(n,"isMobile",(function(){return a})),e.d(n,"isDarkMode",(function(){return i})),e.d(n,"formatDate",(function(){return r})),e.d(n,"getParameterByName",(function(){return c})),e.d(n,"adjustImageGallery",(function(){return u})),e.d(n,"managePostImages",(function(){return s})),e.d(n,"makeImagesZoomable",(function(){return d}));var o=function(){var t=document.querySelector("html");return["ar","he","fa"].includes(t.getAttribute("lang"))},a=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"768px";return window.matchMedia("(max-width: ".concat(t,")")).matches},i=function(){var t=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");return t&&t.matches},r=function(t){return t?new Date(t).toLocaleDateString(document.documentElement.lang,{year:"numeric",month:"long",day:"numeric"}):""},c=function(t,n){n||(n=window.location.href),t=t.replace(/[\[\]]/g,"\\$&");var e=new RegExp("[?&]".concat(t,"(=([^&#]*)|&|#|$)")).exec(n);return e?e[2]?decodeURIComponent(e[2].replace(/\+/g," ")):"":null},u=function(){for(var t=document.querySelectorAll(".kg-gallery-image img"),n=0,e=t.length;n1&&n.last().hide()}),10)}))}},13:function(t,n,e){e(1),e(30),e(32),e(34),e(36),e(38),e(40),t.exports=e(42)},30:function(t,n){},32:function(t,n){},34:function(t,n){},36:function(t,n){},38:function(t,n){},40:function(t,n){},42:function(t,n){}},[[13,0,1]]]); \ No newline at end of file +"use strict"; +(self["webpackChunkliebling"] = self["webpackChunkliebling"] || []).push([["/js/helpers"],{ + +/***/ "./js/helpers.js": +/*!***********************!*\ + !*** ./js/helpers.js ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "adjustImageGallery": () => (/* binding */ adjustImageGallery), +/* harmony export */ "formatDate": () => (/* binding */ formatDate), +/* harmony export */ "getParameterByName": () => (/* binding */ getParameterByName), +/* harmony export */ "isMobile": () => (/* binding */ isMobile), +/* harmony export */ "isRTL": () => (/* binding */ isRTL), +/* harmony export */ "makeImagesZoomable": () => (/* binding */ makeImagesZoomable), +/* harmony export */ "managePostImages": () => (/* binding */ managePostImages) +/* harmony export */ }); +var isRTL = function isRTL() { + var $html = document.querySelector('html'); + return ['ar', 'he', 'fa'].includes($html.getAttribute('lang')); +}; +var isMobile = function isMobile() { + var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '768px'; + return window.matchMedia("(max-width: ".concat(width, ")")).matches; +}; +var formatDate = function formatDate(date) { + if (date) { + return new Date(date).toLocaleDateString(document.documentElement.lang, { + year: 'numeric', + month: 'long', + day: 'numeric' + }); + } + + return ''; +}; +var getParameterByName = function getParameterByName(name, url) { + if (!url) url = window.location.href; + name = name.replace(/[\[\]]/g, '\\$&'); + var regex = new RegExp("[?&]".concat(name, "(=([^&#]*)|&|#|$)")); + var results = regex.exec(url); + if (!results) return null; + if (!results[2]) return ''; + return decodeURIComponent(results[2].replace(/\+/g, ' ')); +}; +var adjustImageGallery = function adjustImageGallery() { + var images = document.querySelectorAll('.kg-gallery-image img'); + + for (var i = 0, len = images.length; i < len; i++) { + var container = images[i].closest('.kg-gallery-image'); + var width = images[i].attributes.width.value; + var height = images[i].attributes.height.value; + var ratio = width / height; + container.style.flex = "".concat(ratio, " 1 0%"); + } +}; +var managePostImages = function managePostImages($) { + $('.js-post-content').find('img').each(function () { + if (!$(this).closest('figure').hasClass('kg-bookmark-card') && !$(this).closest('figure').hasClass('kg-nft-card') && !$(this).parent().is('a') && !$(this).hasClass('kg-product-card-image') && !$(this).hasClass('kg-audio-thumbnail')) { + $(this).addClass('js-zoomable'); + } + }); +}; +var makeImagesZoomable = function makeImagesZoomable($, mediumZoom) { + var zoom = mediumZoom('.js-zoomable'); + zoom.on('opened', function () { + setTimeout(function () { + var $mediumZoomImages = $('.medium-zoom-image--opened'); + + if ($mediumZoomImages.length > 1) { + $mediumZoomImages.last().hide(); + } + }, 10); + }); +}; + +/***/ }), + +/***/ "./sass/tags.scss": +/*!************************!*\ + !*** ./sass/tags.scss ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./sass/404.scss": +/*!***********************!*\ + !*** ./sass/404.scss ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./sass/app.scss": +/*!***********************!*\ + !*** ./sass/app.scss ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./sass/home.scss": +/*!************************!*\ + !*** ./sass/home.scss ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./sass/listing.scss": +/*!***************************!*\ + !*** ./sass/listing.scss ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./sass/post.scss": +/*!************************!*\ + !*** ./sass/post.scss ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./sass/newsletter.scss": +/*!******************************!*\ + !*** ./sass/newsletter.scss ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }) + +}, +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ __webpack_require__.O(0, ["css/newsletter","css/post","css/listing","css/home","css/app","css/404","css/tags"], () => (__webpack_exec__("./js/helpers.js"), __webpack_exec__("./sass/app.scss"), __webpack_exec__("./sass/home.scss"), __webpack_exec__("./sass/listing.scss"), __webpack_exec__("./sass/post.scss"), __webpack_exec__("./sass/newsletter.scss"), __webpack_exec__("./sass/tags.scss"), __webpack_exec__("./sass/404.scss"))); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ } +]); \ No newline at end of file diff --git a/assets/js/home.js b/assets/js/home.js index 3945ba7d5..2e14ecced 100644 --- a/assets/js/home.js +++ b/assets/js/home.js @@ -1 +1,55 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{1:function(e,t,n){"use strict";n.r(t),n.d(t,"isRTL",(function(){return r})),n.d(t,"isMobile",(function(){return i})),n.d(t,"isDarkMode",(function(){return o})),n.d(t,"formatDate",(function(){return a})),n.d(t,"getParameterByName",(function(){return u})),n.d(t,"adjustImageGallery",(function(){return s})),n.d(t,"managePostImages",(function(){return c})),n.d(t,"makeImagesZoomable",(function(){return l}));var r=function(){var e=document.querySelector("html");return["ar","he","fa"].includes(e.getAttribute("lang"))},i=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"768px";return window.matchMedia("(max-width: ".concat(e,")")).matches},o=function(){var e=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");return e&&e.matches},a=function(e){return e?new Date(e).toLocaleDateString(document.documentElement.lang,{year:"numeric",month:"long",day:"numeric"}):""},u=function(e,t){t||(t=window.location.href),e=e.replace(/[\[\]]/g,"\\$&");var n=new RegExp("[?&]".concat(e,"(=([^&#]*)|&|#|$)")).exec(t);return n?n[2]?decodeURIComponent(n[2].replace(/\+/g," ")):"":null},s=function(){for(var e=document.querySelectorAll(".kg-gallery-image img"),t=0,n=e.length;t1&&t.last().hide()}),10)}))}},23:function(e,t,n){e.exports=n(24)},24:function(e,t,n){"use strict";n.r(t);var r=n(0),i=n.n(r),o=n(3),a=n(2),u=n(1);function s(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw o}}}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0){var t=e.find(".js-featured-slide").length,n=new a.d(".js-featured-slider",{type:"slider",rewind:!1,gap:0,swipeThreshold:!1,dragThreshold:!1,direction:Object(u.isRTL)()?"rtl":"ltr",breakpoints:{768:{swipeThreshold:1!==t&&80,dragThreshold:1!==t&&120}}});1===t&&e.find(".js-featured-slider-controls").remove(),n.on("mount.after",(function(){Object(o.a)(".js-featured-article-title",200)})),n.mount({Controls:a.b,Swipe:a.c,Breakpoints:a.a,ArrowDisabler:function(e,n){var r="js-featured-slider-controls",i="js-featured-slider-previous",o="js-featured-slider-next";return{mount:function(){e.settings.rewind||1===t||e.on(["mount.after","run"],(function(){var t,a=s(n.Controls.items);try{for(a.s();!(t=a.n()).done;){var u=t.value;if(u.className.includes(r)){var c=u.querySelector(".".concat(i));c&&(0===e.index?c.setAttribute("disabled",""):c.removeAttribute("disabled"));var l=u.querySelector(".".concat(o));if(l)(e.settings.bound?e.index+(e.settings.perView-1):e.index)===n.Sizes.length-1?l.setAttribute("disabled",""):l.removeAttribute("disabled")}}}catch(e){a.e(e)}finally{a.f()}}))}}}}),setTimeout((function(){window.dispatchEvent(new Event("resize"))}),350)}Object(o.a)(".js-featured-article-title",200)}))}},[[23,0,1]]]); \ No newline at end of file +"use strict"; +(self["webpackChunkliebling"] = self["webpackChunkliebling"] || []).push([["/js/home"],{ + +/***/ "./js/home.js": +/*!********************!*\ + !*** ./js/home.js ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var shave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shave */ "./node_modules/shave/dist/shave.es.js"); +/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! swiper */ "./node_modules/swiper/swiper.esm.js"); +/* harmony import */ var swiper_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! swiper/css */ "./node_modules/swiper/swiper.min.css"); + + + + +jquery__WEBPACK_IMPORTED_MODULE_0___default()(function () { + var $featuredSlider = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-featured-slider'); + + if ($featuredSlider.length > 0) { + var numSlides = $featuredSlider.find('.swiper-slide').length; + var featuredSwiper = new swiper__WEBPACK_IMPORTED_MODULE_2__["default"]('.js-featured-slider', { + modules: [swiper__WEBPACK_IMPORTED_MODULE_2__.Navigation, swiper__WEBPACK_IMPORTED_MODULE_2__.A11y], + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev' + }, + a11y: true, + on: { + init: function init() { + (0,shave__WEBPACK_IMPORTED_MODULE_1__["default"])('.js-featured-article-title', 200); + } + } + }); + + if (numSlides === 1) { + $featuredSlider.find('.js-featured-slider-button').remove(); + } + } + + (0,shave__WEBPACK_IMPORTED_MODULE_1__["default"])('.js-featured-article-title', 200); +}); + +/***/ }) + +}, +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ __webpack_require__.O(0, ["/js/vendor"], () => (__webpack_exec__("./js/home.js"))); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ } +]); \ No newline at end of file diff --git a/assets/js/manifest.js b/assets/js/manifest.js index 5aca81a88..ac582d8c1 100644 --- a/assets/js/manifest.js +++ b/assets/js/manifest.js @@ -1 +1,186 @@ -!function(e){function r(r){for(var n,l,f=r[0],i=r[1],a=r[2],c=0,s=[];c { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({}); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ id: moduleId, +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "/js/manifest": 0, +/******/ "css/newsletter": 0, +/******/ "css/post": 0, +/******/ "css/listing": 0, +/******/ "css/home": 0, +/******/ "css/app": 0, +/******/ "css/404": 0, +/******/ "css/tags": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkliebling"] = self["webpackChunkliebling"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/******/ /* webpack/runtime/nonce */ +/******/ (() => { +/******/ __webpack_require__.nc = undefined; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ +/******/ })() +; \ No newline at end of file diff --git a/assets/js/page.js b/assets/js/page.js index 1b1a3c28e..bee4768b1 100644 --- a/assets/js/page.js +++ b/assets/js/page.js @@ -1 +1,113 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{1:function(t,e,n){"use strict";n.r(e),n.d(e,"isRTL",(function(){return a})),n.d(e,"isMobile",(function(){return o})),n.d(e,"isDarkMode",(function(){return r})),n.d(e,"formatDate",(function(){return i})),n.d(e,"getParameterByName",(function(){return c})),n.d(e,"adjustImageGallery",(function(){return u})),n.d(e,"managePostImages",(function(){return s})),n.d(e,"makeImagesZoomable",(function(){return m}));var a=function(){var t=document.querySelector("html");return["ar","he","fa"].includes(t.getAttribute("lang"))},o=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"768px";return window.matchMedia("(max-width: ".concat(t,")")).matches},r=function(){var t=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");return t&&t.matches},i=function(t){return t?new Date(t).toLocaleDateString(document.documentElement.lang,{year:"numeric",month:"long",day:"numeric"}):""},c=function(t,e){e||(e=window.location.href),t=t.replace(/[\[\]]/g,"\\$&");var n=new RegExp("[?&]".concat(t,"(=([^&#]*)|&|#|$)")).exec(e);return n?n[2]?decodeURIComponent(n[2].replace(/\+/g," ")):"":null},u=function(){for(var t=document.querySelectorAll(".kg-gallery-image img"),e=0,n=t.length;e1&&e.last().hide()}),10)}))}},27:function(t,e,n){t.exports=n(28)},28:function(t,e,n){"use strict";n.r(e);var a=n(0),o=n.n(a),r=n(5),i=n.n(r),c=n(6),u=n(1);o()((function(){i()(".js-post-content"),Object(u.adjustImageGallery)(),Object(u.managePostImages)(o.a),Object(u.makeImagesZoomable)(o.a,c.a)}))}},[[27,0,1]]]); \ No newline at end of file +"use strict"; +(self["webpackChunkliebling"] = self["webpackChunkliebling"] || []).push([["/js/page"],{ + +/***/ "./js/helpers.js": +/*!***********************!*\ + !*** ./js/helpers.js ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "adjustImageGallery": () => (/* binding */ adjustImageGallery), +/* harmony export */ "formatDate": () => (/* binding */ formatDate), +/* harmony export */ "getParameterByName": () => (/* binding */ getParameterByName), +/* harmony export */ "isMobile": () => (/* binding */ isMobile), +/* harmony export */ "isRTL": () => (/* binding */ isRTL), +/* harmony export */ "makeImagesZoomable": () => (/* binding */ makeImagesZoomable), +/* harmony export */ "managePostImages": () => (/* binding */ managePostImages) +/* harmony export */ }); +var isRTL = function isRTL() { + var $html = document.querySelector('html'); + return ['ar', 'he', 'fa'].includes($html.getAttribute('lang')); +}; +var isMobile = function isMobile() { + var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '768px'; + return window.matchMedia("(max-width: ".concat(width, ")")).matches; +}; +var formatDate = function formatDate(date) { + if (date) { + return new Date(date).toLocaleDateString(document.documentElement.lang, { + year: 'numeric', + month: 'long', + day: 'numeric' + }); + } + + return ''; +}; +var getParameterByName = function getParameterByName(name, url) { + if (!url) url = window.location.href; + name = name.replace(/[\[\]]/g, '\\$&'); + var regex = new RegExp("[?&]".concat(name, "(=([^&#]*)|&|#|$)")); + var results = regex.exec(url); + if (!results) return null; + if (!results[2]) return ''; + return decodeURIComponent(results[2].replace(/\+/g, ' ')); +}; +var adjustImageGallery = function adjustImageGallery() { + var images = document.querySelectorAll('.kg-gallery-image img'); + + for (var i = 0, len = images.length; i < len; i++) { + var container = images[i].closest('.kg-gallery-image'); + var width = images[i].attributes.width.value; + var height = images[i].attributes.height.value; + var ratio = width / height; + container.style.flex = "".concat(ratio, " 1 0%"); + } +}; +var managePostImages = function managePostImages($) { + $('.js-post-content').find('img').each(function () { + if (!$(this).closest('figure').hasClass('kg-bookmark-card') && !$(this).closest('figure').hasClass('kg-nft-card') && !$(this).parent().is('a') && !$(this).hasClass('kg-product-card-image') && !$(this).hasClass('kg-audio-thumbnail')) { + $(this).addClass('js-zoomable'); + } + }); +}; +var makeImagesZoomable = function makeImagesZoomable($, mediumZoom) { + var zoom = mediumZoom('.js-zoomable'); + zoom.on('opened', function () { + setTimeout(function () { + var $mediumZoomImages = $('.medium-zoom-image--opened'); + + if ($mediumZoomImages.length > 1) { + $mediumZoomImages.last().hide(); + } + }, 10); + }); +}; + +/***/ }), + +/***/ "./js/page.js": +/*!********************!*\ + !*** ./js/page.js ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var fitvids__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fitvids */ "./node_modules/fitvids/index.js"); +/* harmony import */ var fitvids__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fitvids__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var medium_zoom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! medium-zoom */ "./node_modules/medium-zoom/dist/medium-zoom.esm.js"); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ "./js/helpers.js"); + + + + +jquery__WEBPACK_IMPORTED_MODULE_0___default()(function () { + fitvids__WEBPACK_IMPORTED_MODULE_1___default()('.js-post-content'); + (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.adjustImageGallery)(); + (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.managePostImages)((jquery__WEBPACK_IMPORTED_MODULE_0___default())); + (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.makeImagesZoomable)((jquery__WEBPACK_IMPORTED_MODULE_0___default()), medium_zoom__WEBPACK_IMPORTED_MODULE_3__["default"]); +}); + +/***/ }) + +}, +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ __webpack_require__.O(0, ["/js/vendor"], () => (__webpack_exec__("./js/page.js"))); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ } +]); \ No newline at end of file diff --git a/assets/js/post.js b/assets/js/post.js index 9310bf380..97b697cc3 100644 --- a/assets/js/post.js +++ b/assets/js/post.js @@ -1 +1,289 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{1:function(e,t,n){"use strict";n.r(t),n.d(t,"isRTL",(function(){return a})),n.d(t,"isMobile",(function(){return o})),n.d(t,"isDarkMode",(function(){return r})),n.d(t,"formatDate",(function(){return i})),n.d(t,"getParameterByName",(function(){return s})),n.d(t,"adjustImageGallery",(function(){return c})),n.d(t,"managePostImages",(function(){return l})),n.d(t,"makeImagesZoomable",(function(){return d}));var a=function(){var e=document.querySelector("html");return["ar","he","fa"].includes(e.getAttribute("lang"))},o=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"768px";return window.matchMedia("(max-width: ".concat(e,")")).matches},r=function(){var e=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");return e&&e.matches},i=function(e){return e?new Date(e).toLocaleDateString(document.documentElement.lang,{year:"numeric",month:"long",day:"numeric"}):""},s=function(e,t){t||(t=window.location.href),e=e.replace(/[\[\]]/g,"\\$&");var n=new RegExp("[?&]".concat(e,"(=([^&#]*)|&|#|$)")).exec(t);return n?n[2]?decodeURIComponent(n[2].replace(/\+/g," ")):"":null},c=function(){for(var e=document.querySelectorAll(".kg-gallery-image img"),t=0,n=e.length;t1&&t.last().hide()}),10)}))}},25:function(e,t,n){e.exports=n(26)},26:function(e,t,n){"use strict";n.r(t);var a=n(0),o=n.n(a),r=n(6),i=n(5),s=n.n(i),c=n(3),l=n(2),d=n(1),u=null,m=null,h=window.pageYOffset,f=0,p=0,g=0,w=!1,b=function(){h=window.pageYOffset,y()},j=function(e){Object(d.isMobile)("1023px")?(o()("body").addClass("share-menu-displayed"),setTimeout((function(){u.removeAttr("data-aos")}),e)):o()("body").removeClass("share-menu-displayed")},v=function(){T(),j(100),setTimeout((function(){x(),y()}),200)},y=function(){w||requestAnimationFrame(k),w=!0},k=function(){var e=p-f,t=Math.ceil(h/e*100);t<=100&&O(t),w=!1},T=function(){f=window.innerHeight,p=o()(document).height()},x=function(){var e=m.parent().width(),t=e/2,n=Object(d.isMobile)()?2:3;m.parent().attr("viewBox","0 0 ".concat(e," ").concat(e)),m.attr("stroke-width",n),m.attr("r",t-(n-1)),m.attr("cx",t),m.attr("cy",t),g=2*t*Math.PI,m[0].style.strokeDasharray="".concat(g," ").concat(g),m[0].style.strokeDashoffset=g},O=function(e){if(e<=100){var t=g-e/100*g;m[0].style.strokeDashoffset=t}};o()((function(){u=o()(".js-aos-wrapper");var e=o()(".js-scrolltop"),t=o()(".js-recommended-slider");if(s()(".js-post-content"),Object(d.adjustImageGallery)(),j(1e3),t.length>0){var n=new l.d(".js-recommended-slider",{type:"slider",rewind:!1,perView:3,swipeThreshold:!1,dragThreshold:!1,gap:0,direction:Object(d.isRTL)()?"rtl":"ltr",breakpoints:{1023:{type:"carousel",perView:2,swipeThreshold:80,dragThreshold:120},720:{type:"carousel",perView:2,swipeThreshold:80,dragThreshold:120},568:{type:"carousel",perView:1,swipeThreshold:80,dragThreshold:120}}});n.on("mount.after",(function(){Object(c.a)(".js-article-card-title",100),Object(c.a)(".js-article-card-title-no-image",250)})),n.on("length.change",(function(e){1===e&&(n.update({type:"slider"}),t.find(".js-controls").remove())})),n.mount({Controls:l.b,Swipe:l.c,Breakpoints:l.a,Length:function(e,t,n){return{mount:function(){n.emit("length.change",t.Sizes.length)}}}})}Object(c.a)(".js-article-card-title",100),Object(c.a)(".js-article-card-title-no-image",250),e.on("click",(function(){o()("html, body").animate({scrollTop:0},500)})),Object(d.managePostImages)(o.a),Object(d.makeImagesZoomable)(o.a,r.a),window.addEventListener("scroll",b,{passive:!0}),window.addEventListener("resize",v,{passive:!0})})),o()(window).on("load",(function(){m=o()(".js-progress"),T(),x(),k(),setTimeout((function(){m.parent().css("opacity",1)}),300)}))}},[[25,0,1]]]); \ No newline at end of file +"use strict"; +(self["webpackChunkliebling"] = self["webpackChunkliebling"] || []).push([["/js/post"],{ + +/***/ "./js/helpers.js": +/*!***********************!*\ + !*** ./js/helpers.js ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "adjustImageGallery": () => (/* binding */ adjustImageGallery), +/* harmony export */ "formatDate": () => (/* binding */ formatDate), +/* harmony export */ "getParameterByName": () => (/* binding */ getParameterByName), +/* harmony export */ "isMobile": () => (/* binding */ isMobile), +/* harmony export */ "isRTL": () => (/* binding */ isRTL), +/* harmony export */ "makeImagesZoomable": () => (/* binding */ makeImagesZoomable), +/* harmony export */ "managePostImages": () => (/* binding */ managePostImages) +/* harmony export */ }); +var isRTL = function isRTL() { + var $html = document.querySelector('html'); + return ['ar', 'he', 'fa'].includes($html.getAttribute('lang')); +}; +var isMobile = function isMobile() { + var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '768px'; + return window.matchMedia("(max-width: ".concat(width, ")")).matches; +}; +var formatDate = function formatDate(date) { + if (date) { + return new Date(date).toLocaleDateString(document.documentElement.lang, { + year: 'numeric', + month: 'long', + day: 'numeric' + }); + } + + return ''; +}; +var getParameterByName = function getParameterByName(name, url) { + if (!url) url = window.location.href; + name = name.replace(/[\[\]]/g, '\\$&'); + var regex = new RegExp("[?&]".concat(name, "(=([^&#]*)|&|#|$)")); + var results = regex.exec(url); + if (!results) return null; + if (!results[2]) return ''; + return decodeURIComponent(results[2].replace(/\+/g, ' ')); +}; +var adjustImageGallery = function adjustImageGallery() { + var images = document.querySelectorAll('.kg-gallery-image img'); + + for (var i = 0, len = images.length; i < len; i++) { + var container = images[i].closest('.kg-gallery-image'); + var width = images[i].attributes.width.value; + var height = images[i].attributes.height.value; + var ratio = width / height; + container.style.flex = "".concat(ratio, " 1 0%"); + } +}; +var managePostImages = function managePostImages($) { + $('.js-post-content').find('img').each(function () { + if (!$(this).closest('figure').hasClass('kg-bookmark-card') && !$(this).closest('figure').hasClass('kg-nft-card') && !$(this).parent().is('a') && !$(this).hasClass('kg-product-card-image') && !$(this).hasClass('kg-audio-thumbnail')) { + $(this).addClass('js-zoomable'); + } + }); +}; +var makeImagesZoomable = function makeImagesZoomable($, mediumZoom) { + var zoom = mediumZoom('.js-zoomable'); + zoom.on('opened', function () { + setTimeout(function () { + var $mediumZoomImages = $('.medium-zoom-image--opened'); + + if ($mediumZoomImages.length > 1) { + $mediumZoomImages.last().hide(); + } + }, 10); + }); +}; + +/***/ }), + +/***/ "./js/post.js": +/*!********************!*\ + !*** ./js/post.js ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var medium_zoom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! medium-zoom */ "./node_modules/medium-zoom/dist/medium-zoom.esm.js"); +/* harmony import */ var fitvids__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fitvids */ "./node_modules/fitvids/index.js"); +/* harmony import */ var fitvids__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fitvids__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var shave__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shave */ "./node_modules/shave/dist/shave.es.js"); +/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! swiper */ "./node_modules/swiper/swiper.esm.js"); +/* harmony import */ var swiper_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! swiper/css */ "./node_modules/swiper/swiper.min.css"); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers */ "./js/helpers.js"); + + + + + + + +var $animationWrapper = null; +var $progressCircle = null; +var lastScrollingY = window.pageYOffset; +var lastWindowHeight = 0; +var lastDocumentHeight = 0; +var circumference = 0; +var isTicking = false; + +var onScrolling = function onScrolling() { + lastScrollingY = window.pageYOffset; + requestTicking(); +}; + +var adjustShare = function adjustShare(timeout) { + if (!(0,_helpers__WEBPACK_IMPORTED_MODULE_5__.isMobile)('1023px')) { + jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').removeClass('share-menu-displayed'); + } else { + jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').addClass('share-menu-displayed'); + setTimeout(function () { + $animationWrapper.removeAttr('data-animate'); + }, timeout); + } +}; + +var onResizing = function onResizing() { + setHeights(); + adjustShare(100); + setTimeout(function () { + setCircleStyles(); + requestTicking(); + }, 200); +}; + +var requestTicking = function requestTicking() { + if (!isTicking) { + requestAnimationFrame(updating); + } + + isTicking = true; +}; + +var updating = function updating() { + var progressMax = lastDocumentHeight - lastWindowHeight; + var percent = Math.ceil(lastScrollingY / progressMax * 100); + + if (percent <= 100) { + setProgress(percent); + } + + isTicking = false; +}; + +var setHeights = function setHeights() { + lastWindowHeight = window.innerHeight; + lastDocumentHeight = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).height(); +}; + +var setCircleStyles = function setCircleStyles() { + var svgWidth = $progressCircle.parent().width(); + var radiusCircle = svgWidth / 2; + var borderWidth = (0,_helpers__WEBPACK_IMPORTED_MODULE_5__.isMobile)() ? 2 : 3; + $progressCircle.parent().attr('viewBox', "0 0 ".concat(svgWidth, " ").concat(svgWidth)); + $progressCircle.attr('stroke-width', borderWidth); + $progressCircle.attr('r', radiusCircle - (borderWidth - 1)); + $progressCircle.attr('cx', radiusCircle); + $progressCircle.attr('cy', radiusCircle); + circumference = radiusCircle * 2 * Math.PI; + $progressCircle[0].style.strokeDasharray = "".concat(circumference, " ").concat(circumference); + $progressCircle[0].style.strokeDashoffset = circumference; +}; + +var setProgress = function setProgress(percent) { + if (percent <= 100) { + var offset = circumference - percent / 100 * circumference; + $progressCircle[0].style.strokeDashoffset = offset; + } +}; + +var prepareProgressCircle = function prepareProgressCircle() { + $progressCircle = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-progress'); + setHeights(); + setCircleStyles(); + updating(); + setTimeout(function () { + $progressCircle.parent().css('opacity', 1); + }, 300); +}; + +var hideHardCodedFollowUs = function hideHardCodedFollowUs() { + jquery__WEBPACK_IMPORTED_MODULE_0___default()("p").filter(function () { + var text = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).text(); + return text.includes("Follow us on our official channels") || text.includes("Follow the IOTA Foundation on our official channels"); + }).hide().next('p').hide(); +}; + +jquery__WEBPACK_IMPORTED_MODULE_0___default()(function () { + hideHardCodedFollowUs(); // --> post deprecation + + if (jquery__WEBPACK_IMPORTED_MODULE_0___default()('.disclamer-deprecated-post').length > 0) { + addNoIndexMetaTag(); + } else { + var postPublishedDate = new Date(jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-date-published')[0].innerText).getTime(); + var today = new Date().getTime(); // if a post is older than two years, add a disclaimer + + if (today - postPublishedDate > 2 * 365 * 24 * 60 * 60 * 1000) { + jquery__WEBPACK_IMPORTED_MODULE_0___default()('#header').append('
Disclaimer: This blog post has been marked as deprecated, therefore some of the content might be out of date.
'); + addNoIndexMetaTag(); + } + } + + function addNoIndexMetaTag() { + var metaElement = document.createElement('meta'); + metaElement.setAttribute('name', 'robots'); + metaElement.setAttribute('content', 'noindex, nofollow'); + document.getElementsByTagName('head')[0].prepend(metaElement); + } // <-- end of post deprecation + + + $animationWrapper = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-animation-wrapper'); + var $scrollButton = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-scrolltop'); + var $recommendedSlider = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.js-recommended-slider'); + fitvids__WEBPACK_IMPORTED_MODULE_1___default()('.js-post-content'); + (0,_helpers__WEBPACK_IMPORTED_MODULE_5__.adjustImageGallery)(); + adjustShare(1000); + + if ($recommendedSlider.length > 0) { + var recommendedSwiper = new swiper__WEBPACK_IMPORTED_MODULE_3__["default"]('.js-recommended-slider', { + modules: [swiper__WEBPACK_IMPORTED_MODULE_3__.Navigation, swiper__WEBPACK_IMPORTED_MODULE_3__.A11y], + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev' + }, + slidesPerView: 1, + allowTouchMove: true, + loop: true, + a11y: true, + breakpoints: { + 720: { + slidesPerView: 2, + allowTouchMove: true, + loop: true + }, + 1024: { + slidesPerView: 3, + allowTouchMove: false, + loop: false + } + }, + on: { + init: function init() { + (0,shave__WEBPACK_IMPORTED_MODULE_2__["default"])('.js-article-card-title', 100); + (0,shave__WEBPACK_IMPORTED_MODULE_2__["default"])('.js-article-card-title-no-image', 250); + } + } + }); + } + + (0,shave__WEBPACK_IMPORTED_MODULE_2__["default"])('.js-article-card-title', 100); + (0,shave__WEBPACK_IMPORTED_MODULE_2__["default"])('.js-article-card-title-no-image', 250); + $scrollButton.on('click', function () { + jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({ + scrollTop: 0 + }, 500); + }); + (0,_helpers__WEBPACK_IMPORTED_MODULE_5__.managePostImages)((jquery__WEBPACK_IMPORTED_MODULE_0___default())); + (0,_helpers__WEBPACK_IMPORTED_MODULE_5__.makeImagesZoomable)((jquery__WEBPACK_IMPORTED_MODULE_0___default()), medium_zoom__WEBPACK_IMPORTED_MODULE_6__["default"]); + window.addEventListener('scroll', onScrolling, { + passive: true + }); + window.addEventListener('resize', onResizing, { + passive: true + }); +}); +jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('load', function () { + prepareProgressCircle(); +}); + +/***/ }) + +}, +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ __webpack_require__.O(0, ["/js/vendor"], () => (__webpack_exec__("./js/post.js"))); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ } +]); \ No newline at end of file diff --git a/assets/js/vendor.js b/assets/js/vendor.js index b297ae682..ff9e6444f 100644 --- a/assets/js/vendor.js +++ b/assets/js/vendor.js @@ -1,5 +1,12366 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[1],[function(e,t,n){(function(e){var n;function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)} +(self["webpackChunkliebling"] = self["webpackChunkliebling"] || []).push([["/js/vendor"],{ + +/***/ "./node_modules/@popperjs/core/lib/createPopper.js": +/*!*********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/createPopper.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "createPopper": () => (/* binding */ createPopper), +/* harmony export */ "detectOverflow": () => (/* reexport safe */ _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_13__["default"]), +/* harmony export */ "popperGenerator": () => (/* binding */ popperGenerator) +/* harmony export */ }); +/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js"); +/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"); +/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js"); +/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); +/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dom-utils/getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); +/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/orderModifiers.js */ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js"); +/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils/debounce.js */ "./node_modules/@popperjs/core/lib/utils/debounce.js"); +/* harmony import */ var _utils_validateModifiers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/validateModifiers.js */ "./node_modules/@popperjs/core/lib/utils/validateModifiers.js"); +/* harmony import */ var _utils_uniqueBy_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/uniqueBy.js */ "./node_modules/@popperjs/core/lib/utils/uniqueBy.js"); +/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); +/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/mergeByName.js */ "./node_modules/@popperjs/core/lib/utils/mergeByName.js"); +/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); +/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); + + + + + + + + + + + + + + +var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.'; +var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.'; +var DEFAULT_OPTIONS = { + placement: 'bottom', + modifiers: [], + strategy: 'absolute' +}; + +function areValidElements() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return !args.some(function (element) { + return !(element && typeof element.getBoundingClientRect === 'function'); + }); +} + +function popperGenerator(generatorOptions) { + if (generatorOptions === void 0) { + generatorOptions = {}; + } + + var _generatorOptions = generatorOptions, + _generatorOptions$def = _generatorOptions.defaultModifiers, + defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, + _generatorOptions$def2 = _generatorOptions.defaultOptions, + defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; + return function createPopper(reference, popper, options) { + if (options === void 0) { + options = defaultOptions; + } + + var state = { + placement: 'bottom', + orderedModifiers: [], + options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), + modifiersData: {}, + elements: { + reference: reference, + popper: popper + }, + attributes: {}, + styles: {} + }; + var effectCleanupFns = []; + var isDestroyed = false; + var instance = { + state: state, + setOptions: function setOptions(setOptionsAction) { + var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction; + cleanupModifierEffects(); + state.options = Object.assign({}, defaultOptions, state.options, options); + state.scrollParents = { + reference: (0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(reference) ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference) : reference.contextElement ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference.contextElement) : [], + popper: (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(popper) + }; // Orders the modifiers based on their dependencies and `phase` + // properties + + var orderedModifiers = (0,_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__["default"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers + + state.orderedModifiers = orderedModifiers.filter(function (m) { + return m.enabled; + }); // Validate the provided modifiers so that the consumer will get warned + // if one of the modifiers is invalid for any reason + + if (true) { + var modifiers = (0,_utils_uniqueBy_js__WEBPACK_IMPORTED_MODULE_4__["default"])([].concat(orderedModifiers, state.options.modifiers), function (_ref) { + var name = _ref.name; + return name; + }); + (0,_utils_validateModifiers_js__WEBPACK_IMPORTED_MODULE_5__["default"])(modifiers); + + if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.options.placement) === _enums_js__WEBPACK_IMPORTED_MODULE_7__.auto) { + var flipModifier = state.orderedModifiers.find(function (_ref2) { + var name = _ref2.name; + return name === 'flip'; + }); + + if (!flipModifier) { + console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' ')); + } + } + + var _getComputedStyle = (0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"])(popper), + marginTop = _getComputedStyle.marginTop, + marginRight = _getComputedStyle.marginRight, + marginBottom = _getComputedStyle.marginBottom, + marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can + // cause bugs with positioning, so we'll warn the consumer + + + if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) { + return parseFloat(margin); + })) { + console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' ')); + } + } + + runModifierEffects(); + return instance.update(); + }, + // Sync update – it will always be executed, even if not necessary. This + // is useful for low frequency updates where sync behavior simplifies the + // logic. + // For high frequency updates (e.g. `resize` and `scroll` events), always + // prefer the async Popper#update method + forceUpdate: function forceUpdate() { + if (isDestroyed) { + return; + } + + var _state$elements = state.elements, + reference = _state$elements.reference, + popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements + // anymore + + if (!areValidElements(reference, popper)) { + if (true) { + console.error(INVALID_ELEMENT_ERROR); + } + + return; + } // Store the reference and popper rects to be read by modifiers + + + state.rects = { + reference: (0,_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_9__["default"])(reference, (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__["default"])(popper), state.options.strategy === 'fixed'), + popper: (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_11__["default"])(popper) + }; // Modifiers have the ability to reset the current update cycle. The + // most common use case for this is the `flip` modifier changing the + // placement, which then needs to re-run all the modifiers, because the + // logic was previously ran for the previous placement and is therefore + // stale/incorrect + + state.reset = false; + state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier + // is filled with the initial data specified by the modifier. This means + // it doesn't persist and is fresh on each update. + // To ensure persistent data, use `${name}#persistent` + + state.orderedModifiers.forEach(function (modifier) { + return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); + }); + var __debug_loops__ = 0; + + for (var index = 0; index < state.orderedModifiers.length; index++) { + if (true) { + __debug_loops__ += 1; + + if (__debug_loops__ > 100) { + console.error(INFINITE_LOOP_ERROR); + break; + } + } + + if (state.reset === true) { + state.reset = false; + index = -1; + continue; + } + + var _state$orderedModifie = state.orderedModifiers[index], + fn = _state$orderedModifie.fn, + _state$orderedModifie2 = _state$orderedModifie.options, + _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, + name = _state$orderedModifie.name; + + if (typeof fn === 'function') { + state = fn({ + state: state, + options: _options, + name: name, + instance: instance + }) || state; + } + } + }, + // Async and optimistically optimized update – it will not be executed if + // not necessary (debounced to run at most once-per-tick) + update: (0,_utils_debounce_js__WEBPACK_IMPORTED_MODULE_12__["default"])(function () { + return new Promise(function (resolve) { + instance.forceUpdate(); + resolve(state); + }); + }), + destroy: function destroy() { + cleanupModifierEffects(); + isDestroyed = true; + } + }; + + if (!areValidElements(reference, popper)) { + if (true) { + console.error(INVALID_ELEMENT_ERROR); + } + + return instance; + } + + instance.setOptions(options).then(function (state) { + if (!isDestroyed && options.onFirstUpdate) { + options.onFirstUpdate(state); + } + }); // Modifiers have the ability to execute arbitrary code before the first + // update cycle runs. They will be executed in the same order as the update + // cycle. This is useful when a modifier adds some persistent data that + // other modifiers need to use, but the modifier is run after the dependent + // one. + + function runModifierEffects() { + state.orderedModifiers.forEach(function (_ref3) { + var name = _ref3.name, + _ref3$options = _ref3.options, + options = _ref3$options === void 0 ? {} : _ref3$options, + effect = _ref3.effect; + + if (typeof effect === 'function') { + var cleanupFn = effect({ + state: state, + name: name, + instance: instance, + options: options + }); + + var noopFn = function noopFn() {}; + + effectCleanupFns.push(cleanupFn || noopFn); + } + }); + } + + function cleanupModifierEffects() { + effectCleanupFns.forEach(function (fn) { + return fn(); + }); + effectCleanupFns = []; + } + + return instance; + }; +} +var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules + + + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/contains.js": +/*!***************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/contains.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ contains) +/* harmony export */ }); +/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); + +function contains(parent, child) { + var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method + + if (parent.contains(child)) { + return true; + } // then fallback to custom implementation with Shadow DOM support + else if (rootNode && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) { + var next = child; + + do { + if (next && parent.isSameNode(next)) { + return true; + } // $FlowFixMe[prop-missing]: need a better way to handle this... + + + next = next.parentNode || next.host; + } while (next); + } // Give up, the result is false + + + return false; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js": +/*!****************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getBoundingClientRect) +/* harmony export */ }); +/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); +/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); +/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); +/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isLayoutViewport.js */ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js"); + + + + +function getBoundingClientRect(element, includeScale, isFixedStrategy) { + if (includeScale === void 0) { + includeScale = false; + } + + if (isFixedStrategy === void 0) { + isFixedStrategy = false; + } + + var clientRect = element.getBoundingClientRect(); + var scaleX = 1; + var scaleY = 1; + + if (includeScale && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) { + scaleX = element.offsetWidth > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.width) / element.offsetWidth || 1 : 1; + scaleY = element.offsetHeight > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.height) / element.offsetHeight || 1 : 1; + } + + var _ref = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) : window, + visualViewport = _ref.visualViewport; + + var addVisualOffsets = !(0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__["default"])() && isFixedStrategy; + var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; + var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; + var width = clientRect.width / scaleX; + var height = clientRect.height / scaleY; + return { + width: width, + height: height, + top: y, + right: x + width, + bottom: y + height, + left: x, + x: x, + y: y + }; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getClippingRect) +/* harmony export */ }); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); +/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getViewportRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js"); +/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js"); +/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js"); +/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); +/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); +/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); +/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); +/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); +/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); +/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js"); +/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); +/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js"); +/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); + + + + + + + + + + + + + + + +function getInnerBoundingClientRect(element, strategy) { + var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, false, strategy === 'fixed'); + rect.top = rect.top + element.clientTop; + rect.left = rect.left + element.clientLeft; + rect.bottom = rect.top + element.clientHeight; + rect.right = rect.left + element.clientWidth; + rect.width = element.clientWidth; + rect.height = element.clientHeight; + rect.x = rect.left; + rect.y = rect.top; + return rect; +} + +function getClientRectFromMixedType(element, clippingParent, strategy) { + return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_1__.viewport ? (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, strategy)) : (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element))); +} // A "clipping parent" is an overflowable container with the characteristic of +// clipping (or hiding) overflowing elements with a position different from +// `initial` + + +function getClippingParents(element) { + var clippingParents = (0,_listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__["default"])((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_8__["default"])(element)); + var canEscapeClipping = ['absolute', 'fixed'].indexOf((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__["default"])(element).position) >= 0; + var clipperElement = canEscapeClipping && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isHTMLElement)(element) ? (0,_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element) : element; + + if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clipperElement)) { + return []; + } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 + + + return clippingParents.filter(function (clippingParent) { + return (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) && (0,_contains_js__WEBPACK_IMPORTED_MODULE_11__["default"])(clippingParent, clipperElement) && (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_12__["default"])(clippingParent) !== 'body'; + }); +} // Gets the maximum area that the element is visible in due to any number of +// clipping parents + + +function getClippingRect(element, boundary, rootBoundary, strategy) { + var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); + var clippingParents = [].concat(mainClippingParents, [rootBoundary]); + var firstClippingParent = clippingParents[0]; + var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { + var rect = getClientRectFromMixedType(element, clippingParent, strategy); + accRect.top = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.top, accRect.top); + accRect.right = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.right, accRect.right); + accRect.bottom = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.bottom, accRect.bottom); + accRect.left = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.left, accRect.left); + return accRect; + }, getClientRectFromMixedType(element, firstClippingParent, strategy)); + clippingRect.width = clippingRect.right - clippingRect.left; + clippingRect.height = clippingRect.bottom - clippingRect.top; + clippingRect.x = clippingRect.left; + clippingRect.y = clippingRect.top; + return clippingRect; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getCompositeRect) +/* harmony export */ }); +/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); +/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getNodeScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js"); +/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); +/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); +/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"); +/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); +/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"); +/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); + + + + + + + + + +function isElementScaled(element) { + var rect = element.getBoundingClientRect(); + var scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.width) / element.offsetWidth || 1; + var scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.height) / element.offsetHeight || 1; + return scaleX !== 1 || scaleY !== 1; +} // Returns the composite rect of an element relative to its offsetParent. +// Composite means it takes into account transforms as well as layout. + + +function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { + if (isFixed === void 0) { + isFixed = false; + } + + var isOffsetParentAnElement = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent); + var offsetParentIsScaled = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent) && isElementScaled(offsetParent); + var documentElement = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(offsetParent); + var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(elementOrVirtualElement, offsetParentIsScaled, isFixed); + var scroll = { + scrollLeft: 0, + scrollTop: 0 + }; + var offsets = { + x: 0, + y: 0 + }; + + if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { + if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 + (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(documentElement)) { + scroll = (0,_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__["default"])(offsetParent); + } + + if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent)) { + offsets = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(offsetParent, true); + offsets.x += offsetParent.clientLeft; + offsets.y += offsetParent.clientTop; + } else if (documentElement) { + offsets.x = (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__["default"])(documentElement); + } + } + + return { + x: rect.left + scroll.scrollLeft - offsets.x, + y: rect.top + scroll.scrollTop - offsets.y, + width: rect.width, + height: rect.height + }; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getComputedStyle) +/* harmony export */ }); +/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); + +function getComputedStyle(element) { + return (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element).getComputedStyle(element); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getDocumentElement) +/* harmony export */ }); +/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); + +function getDocumentElement(element) { + // $FlowFixMe[incompatible-return]: assume body is always available + return (((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] + element.document) || window.document).documentElement; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getDocumentRect) +/* harmony export */ }); +/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); +/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); +/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"); +/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"); +/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); + + + + + // Gets the entire size of the scrollable document area, even extending outside +// of the `` and `` rect bounds if horizontally scrollable + +function getDocumentRect(element) { + var _element$ownerDocumen; + + var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); + var winScroll = (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); + var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; + var width = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); + var height = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); + var x = -winScroll.scrollLeft + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element); + var y = -winScroll.scrollTop; + + if ((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__["default"])(body || html).direction === 'rtl') { + x += (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.clientWidth, body ? body.clientWidth : 0) - width; + } + + return { + width: width, + height: height, + x: x, + y: y + }; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js": +/*!***************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getHTMLElementScroll) +/* harmony export */ }); +function getHTMLElementScroll(element) { + return { + scrollLeft: element.scrollLeft, + scrollTop: element.scrollTop + }; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getLayoutRect) +/* harmony export */ }); +/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); + // Returns the layout rect of an element relative to its offsetParent. Layout +// means it doesn't take into account transforms. + +function getLayoutRect(element) { + var clientRect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); // Use the clientRect sizes if it's not been transformed. + // Fixes https://github.com/popperjs/popper-core/issues/1223 + + var width = element.offsetWidth; + var height = element.offsetHeight; + + if (Math.abs(clientRect.width - width) <= 1) { + width = clientRect.width; + } + + if (Math.abs(clientRect.height - height) <= 1) { + height = clientRect.height; + } + + return { + x: element.offsetLeft, + y: element.offsetTop, + width: width, + height: height + }; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js": +/*!******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getNodeName) +/* harmony export */ }); +function getNodeName(element) { + return element ? (element.nodeName || '').toLowerCase() : null; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getNodeScroll) +/* harmony export */ }); +/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"); +/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); +/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); +/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js"); + + + + +function getNodeScroll(node) { + if (node === (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node) || !(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node)) { + return (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node); + } else { + return (0,_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node); + } +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getOffsetParent) +/* harmony export */ }); +/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); +/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); +/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); +/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); +/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isTableElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js"); +/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); +/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/userAgent.js */ "./node_modules/@popperjs/core/lib/utils/userAgent.js"); + + + + + + + + +function getTrueOffsetParent(element) { + if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || // https://github.com/popperjs/popper-core/issues/837 + (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element).position === 'fixed') { + return null; + } + + return element.offsetParent; +} // `.offsetParent` reports `null` for fixed elements, while absolute elements +// return the containing block + + +function getContainingBlock(element) { + var isFirefox = /firefox/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__["default"])()); + var isIE = /Trident/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__["default"])()); + + if (isIE && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) { + // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport + var elementCss = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); + + if (elementCss.position === 'fixed') { + return null; + } + } + + var currentNode = (0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element); + + if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(currentNode)) { + currentNode = currentNode.host; + } + + while ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(currentNode) && ['html', 'body'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(currentNode)) < 0) { + var css = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that + // create a containing block. + // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block + + if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') { + return currentNode; + } else { + currentNode = currentNode.parentNode; + } + } + + return null; +} // Gets the closest ancestor positioned element. Handles some edge cases, +// such as table ancestors and cross browser bugs. + + +function getOffsetParent(element) { + var window = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element); + var offsetParent = getTrueOffsetParent(element); + + while (offsetParent && (0,_isTableElement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(offsetParent) && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static') { + offsetParent = getTrueOffsetParent(offsetParent); + } + + if (offsetParent && ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) === 'html' || (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) === 'body' && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static')) { + return window; + } + + return offsetParent || getContainingBlock(element) || window; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getParentNode) +/* harmony export */ }); +/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); +/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); +/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); + + + +function getParentNode(element) { + if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element) === 'html') { + return element; + } + + return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle + // $FlowFixMe[incompatible-return] + // $FlowFixMe[prop-missing] + element.assignedSlot || // step into the shadow DOM of the parent of a slotted node + element.parentNode || ( // DOM Element detected + (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isShadowRoot)(element) ? element.host : null) || // ShadowRoot detected + // $FlowFixMe[incompatible-call]: HTMLElement is a Node + (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) // fallback + + ); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getScrollParent) +/* harmony export */ }); +/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); +/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"); +/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); +/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); + + + + +function getScrollParent(node) { + if (['html', 'body', '#document'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node)) >= 0) { + // $FlowFixMe[incompatible-return]: assume body is always available + return node.ownerDocument.body; + } + + if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node) && (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node)) { + return node; + } + + return getScrollParent((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node)); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getViewportRect) +/* harmony export */ }); +/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); +/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); +/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"); +/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isLayoutViewport.js */ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js"); + + + + +function getViewportRect(element, strategy) { + var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); + var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); + var visualViewport = win.visualViewport; + var width = html.clientWidth; + var height = html.clientHeight; + var x = 0; + var y = 0; + + if (visualViewport) { + width = visualViewport.width; + height = visualViewport.height; + var layoutViewport = (0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"])(); + + if (layoutViewport || !layoutViewport && strategy === 'fixed') { + x = visualViewport.offsetLeft; + y = visualViewport.offsetTop; + } + } + + return { + width: width, + height: height, + x: x + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element), + y: y + }; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js": +/*!****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getWindow) +/* harmony export */ }); +function getWindow(node) { + if (node == null) { + return window; + } + + if (node.toString() !== '[object Window]') { + var ownerDocument = node.ownerDocument; + return ownerDocument ? ownerDocument.defaultView || window : window; + } + + return node; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getWindowScroll) +/* harmony export */ }); +/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); + +function getWindowScroll(node) { + var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node); + var scrollLeft = win.pageXOffset; + var scrollTop = win.pageYOffset; + return { + scrollLeft: scrollLeft, + scrollTop: scrollTop + }; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getWindowScrollBarX) +/* harmony export */ }); +/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); +/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); +/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"); + + + +function getWindowScrollBarX(element) { + // If has a CSS width greater than the viewport, then this will be + // incorrect for RTL. + // Popper 1 is broken in this case and never had a bug report so let's assume + // it's not an issue. I don't think anyone ever specifies width on + // anyway. + // Browsers where the left scrollbar doesn't cause an issue report `0` for + // this (e.g. Edge 2019, IE11, Safari) + return (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)).left + (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element).scrollLeft; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isElement": () => (/* binding */ isElement), +/* harmony export */ "isHTMLElement": () => (/* binding */ isHTMLElement), +/* harmony export */ "isShadowRoot": () => (/* binding */ isShadowRoot) +/* harmony export */ }); +/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); + + +function isElement(node) { + var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).Element; + return node instanceof OwnElement || node instanceof Element; +} + +function isHTMLElement(node) { + var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).HTMLElement; + return node instanceof OwnElement || node instanceof HTMLElement; +} + +function isShadowRoot(node) { + // IE 11 has no ShadowRoot + if (typeof ShadowRoot === 'undefined') { + return false; + } + + var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).ShadowRoot; + return node instanceof OwnElement || node instanceof ShadowRoot; +} + + + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ isLayoutViewport) +/* harmony export */ }); +/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/userAgent.js */ "./node_modules/@popperjs/core/lib/utils/userAgent.js"); + +function isLayoutViewport() { + return !/^((?!chrome|android).)*safari/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__["default"])()); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ isScrollParent) +/* harmony export */ }); +/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); + +function isScrollParent(element) { + // Firefox wants us to check `-x` and `-y` variations as well + var _getComputedStyle = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element), + overflow = _getComputedStyle.overflow, + overflowX = _getComputedStyle.overflowX, + overflowY = _getComputedStyle.overflowY; + + return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ isTableElement) +/* harmony export */ }); +/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); + +function isTableElement(element) { + return ['table', 'td', 'th'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element)) >= 0; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js": +/*!************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ listScrollParents) +/* harmony export */ }); +/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js"); +/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); +/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); +/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"); + + + + +/* +given a DOM element, return the list of all scroll parents, up the list of ancesors +until we get to the top window object. This list is what we attach scroll listeners +to, because if any of these parent elements scroll, we'll need to re-calculate the +reference element's position. +*/ + +function listScrollParents(element, list) { + var _element$ownerDocumen; + + if (list === void 0) { + list = []; + } + + var scrollParent = (0,_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); + var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); + var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scrollParent); + var target = isBody ? [win].concat(win.visualViewport || [], (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(scrollParent) ? scrollParent : []) : scrollParent; + var updatedList = list.concat(target); + return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here + updatedList.concat(listScrollParents((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(target))); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/enums.js": +/*!**************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/enums.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "afterMain": () => (/* binding */ afterMain), +/* harmony export */ "afterRead": () => (/* binding */ afterRead), +/* harmony export */ "afterWrite": () => (/* binding */ afterWrite), +/* harmony export */ "auto": () => (/* binding */ auto), +/* harmony export */ "basePlacements": () => (/* binding */ basePlacements), +/* harmony export */ "beforeMain": () => (/* binding */ beforeMain), +/* harmony export */ "beforeRead": () => (/* binding */ beforeRead), +/* harmony export */ "beforeWrite": () => (/* binding */ beforeWrite), +/* harmony export */ "bottom": () => (/* binding */ bottom), +/* harmony export */ "clippingParents": () => (/* binding */ clippingParents), +/* harmony export */ "end": () => (/* binding */ end), +/* harmony export */ "left": () => (/* binding */ left), +/* harmony export */ "main": () => (/* binding */ main), +/* harmony export */ "modifierPhases": () => (/* binding */ modifierPhases), +/* harmony export */ "placements": () => (/* binding */ placements), +/* harmony export */ "popper": () => (/* binding */ popper), +/* harmony export */ "read": () => (/* binding */ read), +/* harmony export */ "reference": () => (/* binding */ reference), +/* harmony export */ "right": () => (/* binding */ right), +/* harmony export */ "start": () => (/* binding */ start), +/* harmony export */ "top": () => (/* binding */ top), +/* harmony export */ "variationPlacements": () => (/* binding */ variationPlacements), +/* harmony export */ "viewport": () => (/* binding */ viewport), +/* harmony export */ "write": () => (/* binding */ write) +/* harmony export */ }); +var top = 'top'; +var bottom = 'bottom'; +var right = 'right'; +var left = 'left'; +var auto = 'auto'; +var basePlacements = [top, bottom, right, left]; +var start = 'start'; +var end = 'end'; +var clippingParents = 'clippingParents'; +var viewport = 'viewport'; +var popper = 'popper'; +var reference = 'reference'; +var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { + return acc.concat([placement + "-" + start, placement + "-" + end]); +}, []); +var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { + return acc.concat([placement, placement + "-" + start, placement + "-" + end]); +}, []); // modifiers that need to read the DOM + +var beforeRead = 'beforeRead'; +var read = 'read'; +var afterRead = 'afterRead'; // pure-logic modifiers + +var beforeMain = 'beforeMain'; +var main = 'main'; +var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) + +var beforeWrite = 'beforeWrite'; +var write = 'write'; +var afterWrite = 'afterWrite'; +var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js": +/*!******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); +/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); + + // This modifier takes the styles prepared by the `computeStyles` modifier +// and applies them to the HTMLElements such as popper and arrow + +function applyStyles(_ref) { + var state = _ref.state; + Object.keys(state.elements).forEach(function (name) { + var style = state.styles[name] || {}; + var attributes = state.attributes[name] || {}; + var element = state.elements[name]; // arrow is optional + virtual elements + + if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) { + return; + } // Flow doesn't support to extend this property, but it's the most + // effective way to apply styles to an HTMLElement + // $FlowFixMe[cannot-write] + + + Object.assign(element.style, style); + Object.keys(attributes).forEach(function (name) { + var value = attributes[name]; + + if (value === false) { + element.removeAttribute(name); + } else { + element.setAttribute(name, value === true ? '' : value); + } + }); + }); +} + +function effect(_ref2) { + var state = _ref2.state; + var initialStyles = { + popper: { + position: state.options.strategy, + left: '0', + top: '0', + margin: '0' + }, + arrow: { + position: 'absolute' + }, + reference: {} + }; + Object.assign(state.elements.popper.style, initialStyles.popper); + state.styles = initialStyles; + + if (state.elements.arrow) { + Object.assign(state.elements.arrow.style, initialStyles.arrow); + } + + return function () { + Object.keys(state.elements).forEach(function (name) { + var element = state.elements[name]; + var attributes = state.attributes[name] || {}; + var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them + + var style = styleProperties.reduce(function (style, property) { + style[property] = ''; + return style; + }, {}); // arrow is optional + virtual elements + + if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) { + return; + } + + Object.assign(element.style, style); + Object.keys(attributes).forEach(function (attribute) { + element.removeAttribute(attribute); + }); + }); + }; +} // eslint-disable-next-line import/no-unused-modules + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'applyStyles', + enabled: true, + phase: 'write', + fn: applyStyles, + effect: effect, + requires: ['computeStyles'] +}); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/arrow.js": +/*!************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/arrow.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); +/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"); +/* harmony import */ var _dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js"); +/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); +/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"); +/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js"); +/* harmony import */ var _utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js"); +/* harmony import */ var _utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js"); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); +/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); + + + + + + + + + + // eslint-disable-next-line import/no-unused-modules + +var toPaddingObject = function toPaddingObject(padding, state) { + padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { + placement: state.placement + })) : padding; + return (0,_utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(typeof padding !== 'number' ? padding : (0,_utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_2__.basePlacements)); +}; + +function arrow(_ref) { + var _state$modifiersData$; + + var state = _ref.state, + name = _ref.name, + options = _ref.options; + var arrowElement = state.elements.arrow; + var popperOffsets = state.modifiersData.popperOffsets; + var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(state.placement); + var axis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(basePlacement); + var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_2__.left, _enums_js__WEBPACK_IMPORTED_MODULE_2__.right].indexOf(basePlacement) >= 0; + var len = isVertical ? 'height' : 'width'; + + if (!arrowElement || !popperOffsets) { + return; + } + + var paddingObject = toPaddingObject(options.padding, state); + var arrowRect = (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])(arrowElement); + var minProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.top : _enums_js__WEBPACK_IMPORTED_MODULE_2__.left; + var maxProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_2__.right; + var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; + var startDiff = popperOffsets[axis] - state.rects.reference[axis]; + var arrowOffsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement); + var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; + var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is + // outside of the popper bounds + + var min = paddingObject[minProp]; + var max = clientSize - arrowRect[len] - paddingObject[maxProp]; + var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; + var offset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_7__.within)(min, center, max); // Prevents breaking syntax highlighting... + + var axisProp = axis; + state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); +} + +function effect(_ref2) { + var state = _ref2.state, + options = _ref2.options; + var _options$element = options.element, + arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; + + if (arrowElement == null) { + return; + } // CSS selector + + + if (typeof arrowElement === 'string') { + arrowElement = state.elements.popper.querySelector(arrowElement); + + if (!arrowElement) { + return; + } + } + + if (true) { + if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_8__.isHTMLElement)(arrowElement)) { + console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' ')); + } + } + + if (!(0,_dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_9__["default"])(state.elements.popper, arrowElement)) { + if (true) { + console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' ')); + } + + return; + } + + state.elements.arrow = arrowElement; +} // eslint-disable-next-line import/no-unused-modules + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'arrow', + enabled: true, + phase: 'main', + fn: arrow, + effect: effect, + requires: ['popperOffsets'], + requiresIfExists: ['preventOverflow'] +}); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), +/* harmony export */ "mapToStyles": () => (/* binding */ mapToStyles) +/* harmony export */ }); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); +/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); +/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); +/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); +/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); +/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); +/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); +/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); + + + + + + + + // eslint-disable-next-line import/no-unused-modules + +var unsetSides = { + top: 'auto', + right: 'auto', + bottom: 'auto', + left: 'auto' +}; // Round the offsets to the nearest suitable subpixel based on the DPR. +// Zooming can change the DPR, but it seems to report a value that will +// cleanly divide the values into the appropriate subpixels. + +function roundOffsetsByDPR(_ref) { + var x = _ref.x, + y = _ref.y; + var win = window; + var dpr = win.devicePixelRatio || 1; + return { + x: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(x * dpr) / dpr || 0, + y: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(y * dpr) / dpr || 0 + }; +} + +function mapToStyles(_ref2) { + var _Object$assign2; + + var popper = _ref2.popper, + popperRect = _ref2.popperRect, + placement = _ref2.placement, + variation = _ref2.variation, + offsets = _ref2.offsets, + position = _ref2.position, + gpuAcceleration = _ref2.gpuAcceleration, + adaptive = _ref2.adaptive, + roundOffsets = _ref2.roundOffsets, + isFixed = _ref2.isFixed; + var _offsets$x = offsets.x, + x = _offsets$x === void 0 ? 0 : _offsets$x, + _offsets$y = offsets.y, + y = _offsets$y === void 0 ? 0 : _offsets$y; + + var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({ + x: x, + y: y + }) : { + x: x, + y: y + }; + + x = _ref3.x; + y = _ref3.y; + var hasX = offsets.hasOwnProperty('x'); + var hasY = offsets.hasOwnProperty('y'); + var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.left; + var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.top; + var win = window; + + if (adaptive) { + var offsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(popper); + var heightProp = 'clientHeight'; + var widthProp = 'clientWidth'; + + if (offsetParent === (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__["default"])(popper)) { + offsetParent = (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(popper); + + if ((0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__["default"])(offsetParent).position !== 'static' && position === 'absolute') { + heightProp = 'scrollHeight'; + widthProp = 'scrollWidth'; + } + } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it + + + offsetParent = offsetParent; + + if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.right) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) { + sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom; + var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing] + offsetParent[heightProp]; + y -= offsetY - popperRect.height; + y *= gpuAcceleration ? 1 : -1; + } + + if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) { + sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.right; + var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing] + offsetParent[widthProp]; + x -= offsetX - popperRect.width; + x *= gpuAcceleration ? 1 : -1; + } + } + + var commonStyles = Object.assign({ + position: position + }, adaptive && unsetSides); + + var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ + x: x, + y: y + }) : { + x: x, + y: y + }; + + x = _ref4.x; + y = _ref4.y; + + if (gpuAcceleration) { + var _Object$assign; + + return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); + } + + return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); +} + +function computeStyles(_ref5) { + var state = _ref5.state, + options = _ref5.options; + var _options$gpuAccelerat = options.gpuAcceleration, + gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, + _options$adaptive = options.adaptive, + adaptive = _options$adaptive === void 0 ? true : _options$adaptive, + _options$roundOffsets = options.roundOffsets, + roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; + + if (true) { + var transitionProperty = (0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__["default"])(state.elements.popper).transitionProperty || ''; + + if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) { + return transitionProperty.indexOf(property) >= 0; + })) { + console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' ')); + } + } + + var commonStyles = { + placement: (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.placement), + variation: (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__["default"])(state.placement), + popper: state.elements.popper, + popperRect: state.rects.popper, + gpuAcceleration: gpuAcceleration, + isFixed: state.options.strategy === 'fixed' + }; + + if (state.modifiersData.popperOffsets != null) { + state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.popperOffsets, + position: state.options.strategy, + adaptive: adaptive, + roundOffsets: roundOffsets + }))); + } + + if (state.modifiersData.arrow != null) { + state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.arrow, + position: 'absolute', + adaptive: false, + roundOffsets: roundOffsets + }))); + } + + state.attributes.popper = Object.assign({}, state.attributes.popper, { + 'data-popper-placement': state.placement + }); +} // eslint-disable-next-line import/no-unused-modules + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'computeStyles', + enabled: true, + phase: 'beforeWrite', + fn: computeStyles, + data: {} +}); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); + // eslint-disable-next-line import/no-unused-modules + +var passive = { + passive: true +}; + +function effect(_ref) { + var state = _ref.state, + instance = _ref.instance, + options = _ref.options; + var _options$scroll = options.scroll, + scroll = _options$scroll === void 0 ? true : _options$scroll, + _options$resize = options.resize, + resize = _options$resize === void 0 ? true : _options$resize; + var window = (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state.elements.popper); + var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); + + if (scroll) { + scrollParents.forEach(function (scrollParent) { + scrollParent.addEventListener('scroll', instance.update, passive); + }); + } + + if (resize) { + window.addEventListener('resize', instance.update, passive); + } + + return function () { + if (scroll) { + scrollParents.forEach(function (scrollParent) { + scrollParent.removeEventListener('scroll', instance.update, passive); + }); + } + + if (resize) { + window.removeEventListener('resize', instance.update, passive); + } + }; +} // eslint-disable-next-line import/no-unused-modules + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'eventListeners', + enabled: true, + phase: 'write', + fn: function fn() {}, + effect: effect, + data: {} +}); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/flip.js": +/*!***********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/flip.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getOppositePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js"); +/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); +/* harmony import */ var _utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getOppositeVariationPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js"); +/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); +/* harmony import */ var _utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/computeAutoPlacement.js */ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js"); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); +/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); + + + + + + + // eslint-disable-next-line import/no-unused-modules + +function getExpandedFallbackPlacements(placement) { + if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto) { + return []; + } + + var oppositePlacement = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(placement); + return [(0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement), oppositePlacement, (0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(oppositePlacement)]; +} + +function flip(_ref) { + var state = _ref.state, + options = _ref.options, + name = _ref.name; + + if (state.modifiersData[name]._skip) { + return; + } + + var _options$mainAxis = options.mainAxis, + checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, + _options$altAxis = options.altAxis, + checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, + specifiedFallbackPlacements = options.fallbackPlacements, + padding = options.padding, + boundary = options.boundary, + rootBoundary = options.rootBoundary, + altBoundary = options.altBoundary, + _options$flipVariatio = options.flipVariations, + flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, + allowedAutoPlacements = options.allowedAutoPlacements; + var preferredPlacement = state.options.placement; + var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(preferredPlacement); + var isBasePlacement = basePlacement === preferredPlacement; + var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [(0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); + var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { + return acc.concat((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto ? (0,_utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding, + flipVariations: flipVariations, + allowedAutoPlacements: allowedAutoPlacements + }) : placement); + }, []); + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var checksMap = new Map(); + var makeFallbackChecks = true; + var firstFittingPlacement = placements[0]; + + for (var i = 0; i < placements.length; i++) { + var placement = placements[i]; + + var _basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement); + + var isStartVariation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.start; + var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.top, _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom].indexOf(_basePlacement) >= 0; + var len = isVertical ? 'width' : 'height'; + var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + altBoundary: altBoundary, + padding: padding + }); + var mainVariationSide = isVertical ? isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.right : _enums_js__WEBPACK_IMPORTED_MODULE_1__.left : isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_1__.top; + + if (referenceRect[len] > popperRect[len]) { + mainVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide); + } + + var altVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide); + var checks = []; + + if (checkMainAxis) { + checks.push(overflow[_basePlacement] <= 0); + } + + if (checkAltAxis) { + checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); + } + + if (checks.every(function (check) { + return check; + })) { + firstFittingPlacement = placement; + makeFallbackChecks = false; + break; + } + + checksMap.set(placement, checks); + } + + if (makeFallbackChecks) { + // `2` may be desired in some cases – research later + var numberOfChecks = flipVariations ? 3 : 1; + + var _loop = function _loop(_i) { + var fittingPlacement = placements.find(function (placement) { + var checks = checksMap.get(placement); + + if (checks) { + return checks.slice(0, _i).every(function (check) { + return check; + }); + } + }); + + if (fittingPlacement) { + firstFittingPlacement = fittingPlacement; + return "break"; + } + }; + + for (var _i = numberOfChecks; _i > 0; _i--) { + var _ret = _loop(_i); + + if (_ret === "break") break; + } + } + + if (state.placement !== firstFittingPlacement) { + state.modifiersData[name]._skip = true; + state.placement = firstFittingPlacement; + state.reset = true; + } +} // eslint-disable-next-line import/no-unused-modules + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'flip', + enabled: true, + phase: 'main', + fn: flip, + requiresIfExists: ['offset'], + data: { + _skip: false + } +}); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/hide.js": +/*!***********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/hide.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); +/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); + + + +function getSideOffsets(overflow, rect, preventedOffsets) { + if (preventedOffsets === void 0) { + preventedOffsets = { + x: 0, + y: 0 + }; + } + + return { + top: overflow.top - rect.height - preventedOffsets.y, + right: overflow.right - rect.width + preventedOffsets.x, + bottom: overflow.bottom - rect.height + preventedOffsets.y, + left: overflow.left - rect.width - preventedOffsets.x + }; +} + +function isAnySideFullyClipped(overflow) { + return [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom, _enums_js__WEBPACK_IMPORTED_MODULE_0__.left].some(function (side) { + return overflow[side] >= 0; + }); +} + +function hide(_ref) { + var state = _ref.state, + name = _ref.name; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var preventedOffsets = state.modifiersData.preventOverflow; + var referenceOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, { + elementContext: 'reference' + }); + var popperAltOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, { + altBoundary: true + }); + var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); + var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); + var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); + var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); + state.modifiersData[name] = { + referenceClippingOffsets: referenceClippingOffsets, + popperEscapeOffsets: popperEscapeOffsets, + isReferenceHidden: isReferenceHidden, + hasPopperEscaped: hasPopperEscaped + }; + state.attributes.popper = Object.assign({}, state.attributes.popper, { + 'data-popper-reference-hidden': isReferenceHidden, + 'data-popper-escaped': hasPopperEscaped + }); +} // eslint-disable-next-line import/no-unused-modules + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'hide', + enabled: true, + phase: 'main', + requiresIfExists: ['preventOverflow'], + fn: hide +}); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/index.js": +/*!************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/index.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "applyStyles": () => (/* reexport safe */ _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__["default"]), +/* harmony export */ "arrow": () => (/* reexport safe */ _arrow_js__WEBPACK_IMPORTED_MODULE_1__["default"]), +/* harmony export */ "computeStyles": () => (/* reexport safe */ _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"]), +/* harmony export */ "eventListeners": () => (/* reexport safe */ _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__["default"]), +/* harmony export */ "flip": () => (/* reexport safe */ _flip_js__WEBPACK_IMPORTED_MODULE_4__["default"]), +/* harmony export */ "hide": () => (/* reexport safe */ _hide_js__WEBPACK_IMPORTED_MODULE_5__["default"]), +/* harmony export */ "offset": () => (/* reexport safe */ _offset_js__WEBPACK_IMPORTED_MODULE_6__["default"]), +/* harmony export */ "popperOffsets": () => (/* reexport safe */ _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"]), +/* harmony export */ "preventOverflow": () => (/* reexport safe */ _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__["default"]) +/* harmony export */ }); +/* harmony import */ var _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"); +/* harmony import */ var _arrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js"); +/* harmony import */ var _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"); +/* harmony import */ var _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"); +/* harmony import */ var _flip_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js"); +/* harmony import */ var _hide_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js"); +/* harmony import */ var _offset_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js"); +/* harmony import */ var _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"); +/* harmony import */ var _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js"); + + + + + + + + + + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/offset.js": +/*!*************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/offset.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), +/* harmony export */ "distanceAndSkiddingToXY": () => (/* binding */ distanceAndSkiddingToXY) +/* harmony export */ }); +/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); + + // eslint-disable-next-line import/no-unused-modules + +function distanceAndSkiddingToXY(placement, rects, offset) { + var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement); + var invertDistance = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.top].indexOf(basePlacement) >= 0 ? -1 : 1; + + var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { + placement: placement + })) : offset, + skidding = _ref[0], + distance = _ref[1]; + + skidding = skidding || 0; + distance = (distance || 0) * invertDistance; + return [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.right].indexOf(basePlacement) >= 0 ? { + x: distance, + y: skidding + } : { + x: skidding, + y: distance + }; +} + +function offset(_ref2) { + var state = _ref2.state, + options = _ref2.options, + name = _ref2.name; + var _options$offset = options.offset, + offset = _options$offset === void 0 ? [0, 0] : _options$offset; + var data = _enums_js__WEBPACK_IMPORTED_MODULE_1__.placements.reduce(function (acc, placement) { + acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); + return acc; + }, {}); + var _data$state$placement = data[state.placement], + x = _data$state$placement.x, + y = _data$state$placement.y; + + if (state.modifiersData.popperOffsets != null) { + state.modifiersData.popperOffsets.x += x; + state.modifiersData.popperOffsets.y += y; + } + + state.modifiersData[name] = data; +} // eslint-disable-next-line import/no-unused-modules + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'offset', + enabled: true, + phase: 'main', + requires: ['popperOffsets'], + fn: offset +}); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js"); + + +function popperOffsets(_ref) { + var state = _ref.state, + name = _ref.name; + // Offsets are the actual position the popper needs to have to be + // properly positioned near its reference element + // This is the most basic placement, and will be adjusted by + // the modifiers in the next step + state.modifiersData[name] = (0,_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ + reference: state.rects.reference, + element: state.rects.popper, + strategy: 'absolute', + placement: state.placement + }); +} // eslint-disable-next-line import/no-unused-modules + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'popperOffsets', + enabled: true, + phase: 'read', + fn: popperOffsets, + data: {} +}); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); +/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); +/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"); +/* harmony import */ var _utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getAltAxis.js */ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js"); +/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js"); +/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"); +/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); +/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); +/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); +/* harmony import */ var _utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js"); +/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); + + + + + + + + + + + + +function preventOverflow(_ref) { + var state = _ref.state, + options = _ref.options, + name = _ref.name; + var _options$mainAxis = options.mainAxis, + checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, + _options$altAxis = options.altAxis, + checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, + boundary = options.boundary, + rootBoundary = options.rootBoundary, + altBoundary = options.altBoundary, + padding = options.padding, + _options$tether = options.tether, + tether = _options$tether === void 0 ? true : _options$tether, + _options$tetherOffset = options.tetherOffset, + tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; + var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state, { + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding, + altBoundary: altBoundary + }); + var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state.placement); + var variation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state.placement); + var isBasePlacement = !variation; + var mainAxis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement); + var altAxis = (0,_utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__["default"])(mainAxis); + var popperOffsets = state.modifiersData.popperOffsets; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { + placement: state.placement + })) : tetherOffset; + var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? { + mainAxis: tetherOffsetValue, + altAxis: tetherOffsetValue + } : Object.assign({ + mainAxis: 0, + altAxis: 0 + }, tetherOffsetValue); + var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; + var data = { + x: 0, + y: 0 + }; + + if (!popperOffsets) { + return; + } + + if (checkMainAxis) { + var _offsetModifierState$; + + var mainSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left; + var altSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right; + var len = mainAxis === 'y' ? 'height' : 'width'; + var offset = popperOffsets[mainAxis]; + var min = offset + overflow[mainSide]; + var max = offset - overflow[altSide]; + var additive = tether ? -popperRect[len] / 2 : 0; + var minLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? referenceRect[len] : popperRect[len]; + var maxLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go + // outside the reference bounds + + var arrowElement = state.elements.arrow; + var arrowRect = tether && arrowElement ? (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement) : { + width: 0, + height: 0 + }; + var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : (0,_utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__["default"])(); + var arrowPaddingMin = arrowPaddingObject[mainSide]; + var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want + // to include its full size in the calculation. If the reference is small + // and near the edge of a boundary, the popper can overflow even if the + // reference is not overflowing as well (e.g. virtual elements with no + // width or height) + + var arrowLen = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(0, referenceRect[len], arrowRect[len]); + var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; + var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; + var arrowOffsetParent = state.elements.arrow && (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__["default"])(state.elements.arrow); + var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; + var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; + var tetherMin = offset + minOffset - offsetModifierValue - clientOffset; + var tetherMax = offset + maxOffset - offsetModifierValue; + var preventedOffset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.min)(min, tetherMin) : min, offset, tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.max)(max, tetherMax) : max); + popperOffsets[mainAxis] = preventedOffset; + data[mainAxis] = preventedOffset - offset; + } + + if (checkAltAxis) { + var _offsetModifierState$2; + + var _mainSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left; + + var _altSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right; + + var _offset = popperOffsets[altAxis]; + + var _len = altAxis === 'y' ? 'height' : 'width'; + + var _min = _offset + overflow[_mainSide]; + + var _max = _offset - overflow[_altSide]; + + var isOriginSide = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.top, _enums_js__WEBPACK_IMPORTED_MODULE_5__.left].indexOf(basePlacement) !== -1; + + var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; + + var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; + + var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; + + var _preventedOffset = tether && isOriginSide ? (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.withinMaxClamp)(_tetherMin, _offset, _tetherMax) : (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); + + popperOffsets[altAxis] = _preventedOffset; + data[altAxis] = _preventedOffset - _offset; + } + + state.modifiersData[name] = data; +} // eslint-disable-next-line import/no-unused-modules + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + name: 'preventOverflow', + enabled: true, + phase: 'main', + fn: preventOverflow, + requiresIfExists: ['offset'] +}); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/popper-lite.js": +/*!********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/popper-lite.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "createPopper": () => (/* binding */ createPopper), +/* harmony export */ "defaultModifiers": () => (/* binding */ defaultModifiers), +/* harmony export */ "detectOverflow": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_5__["default"]), +/* harmony export */ "popperGenerator": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator) +/* harmony export */ }); +/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js"); +/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); +/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"); +/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"); +/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"); +/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"); + + + + + +var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"]]; +var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)({ + defaultModifiers: defaultModifiers +}); // eslint-disable-next-line import/no-unused-modules + + + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/popper.js": +/*!***************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/popper.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "applyStyles": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.applyStyles), +/* harmony export */ "arrow": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.arrow), +/* harmony export */ "computeStyles": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.computeStyles), +/* harmony export */ "createPopper": () => (/* binding */ createPopper), +/* harmony export */ "createPopperLite": () => (/* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__.createPopper), +/* harmony export */ "defaultModifiers": () => (/* binding */ defaultModifiers), +/* harmony export */ "detectOverflow": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_10__["default"]), +/* harmony export */ "eventListeners": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.eventListeners), +/* harmony export */ "flip": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.flip), +/* harmony export */ "hide": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.hide), +/* harmony export */ "offset": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.offset), +/* harmony export */ "popperGenerator": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator), +/* harmony export */ "popperOffsets": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.popperOffsets), +/* harmony export */ "preventOverflow": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.preventOverflow) +/* harmony export */ }); +/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js"); +/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); +/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"); +/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"); +/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"); +/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"); +/* harmony import */ var _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js"); +/* harmony import */ var _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modifiers/flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js"); +/* harmony import */ var _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifiers/preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js"); +/* harmony import */ var _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiers/arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js"); +/* harmony import */ var _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiers/hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js"); +/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js"); +/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js"); + + + + + + + + + + +var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"], _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__["default"], _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__["default"], _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"], _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__["default"], _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__["default"]]; +var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator)({ + defaultModifiers: defaultModifiers +}); // eslint-disable-next-line import/no-unused-modules + + // eslint-disable-next-line import/no-unused-modules + + // eslint-disable-next-line import/no-unused-modules + + + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ computeAutoPlacement) +/* harmony export */ }); +/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); +/* harmony import */ var _detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); +/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); + + + + +function computeAutoPlacement(state, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + placement = _options.placement, + boundary = _options.boundary, + rootBoundary = _options.rootBoundary, + padding = _options.padding, + flipVariations = _options.flipVariations, + _options$allowedAutoP = _options.allowedAutoPlacements, + allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements : _options$allowedAutoP; + var variation = (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement); + var placements = variation ? flipVariations ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements : _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements.filter(function (placement) { + return (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) === variation; + }) : _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements; + var allowedPlacements = placements.filter(function (placement) { + return allowedAutoPlacements.indexOf(placement) >= 0; + }); + + if (allowedPlacements.length === 0) { + allowedPlacements = placements; + + if (true) { + console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' ')); + } + } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... + + + var overflows = allowedPlacements.reduce(function (acc, placement) { + acc[placement] = (0,_detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding + })[(0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement)]; + return acc; + }, {}); + return Object.keys(overflows).sort(function (a, b) { + return overflows[a] - overflows[b]; + }); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/computeOffsets.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ computeOffsets) +/* harmony export */ }); +/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); +/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); +/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); + + + + +function computeOffsets(_ref) { + var reference = _ref.reference, + element = _ref.element, + placement = _ref.placement; + var basePlacement = placement ? (0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) : null; + var variation = placement ? (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) : null; + var commonX = reference.x + reference.width / 2 - element.width / 2; + var commonY = reference.y + reference.height / 2 - element.height / 2; + var offsets; + + switch (basePlacement) { + case _enums_js__WEBPACK_IMPORTED_MODULE_2__.top: + offsets = { + x: commonX, + y: reference.y - element.height + }; + break; + + case _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom: + offsets = { + x: commonX, + y: reference.y + reference.height + }; + break; + + case _enums_js__WEBPACK_IMPORTED_MODULE_2__.right: + offsets = { + x: reference.x + reference.width, + y: commonY + }; + break; + + case _enums_js__WEBPACK_IMPORTED_MODULE_2__.left: + offsets = { + x: reference.x - element.width, + y: commonY + }; + break; + + default: + offsets = { + x: reference.x, + y: reference.y + }; + } + + var mainAxis = basePlacement ? (0,_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement) : null; + + if (mainAxis != null) { + var len = mainAxis === 'y' ? 'height' : 'width'; + + switch (variation) { + case _enums_js__WEBPACK_IMPORTED_MODULE_2__.start: + offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); + break; + + case _enums_js__WEBPACK_IMPORTED_MODULE_2__.end: + offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); + break; + + default: + } + } + + return offsets; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/debounce.js": +/*!***********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/debounce.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ debounce) +/* harmony export */ }); +function debounce(fn) { + var pending; + return function () { + if (!pending) { + pending = new Promise(function (resolve) { + Promise.resolve().then(function () { + pending = undefined; + resolve(fn()); + }); + }); + } + + return pending; + }; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/detectOverflow.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ detectOverflow) +/* harmony export */ }); +/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js"); +/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); +/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); +/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js"); +/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js"); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); +/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); +/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js"); +/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js"); + + + + + + + + + // eslint-disable-next-line import/no-unused-modules + +function detectOverflow(state, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + _options$placement = _options.placement, + placement = _options$placement === void 0 ? state.placement : _options$placement, + _options$strategy = _options.strategy, + strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, + _options$boundary = _options.boundary, + boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents : _options$boundary, + _options$rootBoundary = _options.rootBoundary, + rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport : _options$rootBoundary, + _options$elementConte = _options.elementContext, + elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper : _options$elementConte, + _options$altBoundary = _options.altBoundary, + altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, + _options$padding = _options.padding, + padding = _options$padding === void 0 ? 0 : _options$padding; + var paddingObject = (0,_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(typeof padding !== 'number' ? padding : (0,_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements)); + var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference : _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper; + var popperRect = state.rects.popper; + var element = state.elements[altBoundary ? altContext : elementContext]; + var clippingClientRect = (0,_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(element) ? element : element.contextElement || (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(state.elements.popper), boundary, rootBoundary, strategy); + var referenceClientRect = (0,_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.elements.reference); + var popperOffsets = (0,_computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"])({ + reference: referenceClientRect, + element: popperRect, + strategy: 'absolute', + placement: placement + }); + var popperClientRect = (0,_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__["default"])(Object.assign({}, popperRect, popperOffsets)); + var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect + // 0 or negative = within the clipping rect + + var overflowOffsets = { + top: clippingClientRect.top - elementClientRect.top + paddingObject.top, + bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, + left: clippingClientRect.left - elementClientRect.left + paddingObject.left, + right: elementClientRect.right - clippingClientRect.right + paddingObject.right + }; + var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element + + if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper && offsetData) { + var offset = offsetData[placement]; + Object.keys(overflowOffsets).forEach(function (key) { + var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 1 : -1; + var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 'y' : 'x'; + overflowOffsets[key] += offset[axis] * multiply; + }); + } + + return overflowOffsets; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js": +/*!******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ expandToHashMap) +/* harmony export */ }); +function expandToHashMap(value, keys) { + return keys.reduce(function (hashMap, key) { + hashMap[key] = value; + return hashMap; + }, {}); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/format.js": +/*!*********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/format.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ format) +/* harmony export */ }); +function format(str) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + return [].concat(args).reduce(function (p, c) { + return p.replace(/%s/, c); + }, str); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js": +/*!*************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getAltAxis.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getAltAxis) +/* harmony export */ }); +function getAltAxis(axis) { + return axis === 'x' ? 'y' : 'x'; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getBasePlacement) +/* harmony export */ }); + +function getBasePlacement(placement) { + return placement.split('-')[0]; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getFreshSideObject) +/* harmony export */ }); +function getFreshSideObject() { + return { + top: 0, + right: 0, + bottom: 0, + left: 0 + }; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js": +/*!***************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getMainAxisFromPlacement) +/* harmony export */ }); +function getMainAxisFromPlacement(placement) { + return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getOppositePlacement) +/* harmony export */ }); +var hash = { + left: 'right', + right: 'left', + bottom: 'top', + top: 'bottom' +}; +function getOppositePlacement(placement) { + return placement.replace(/left|right|bottom|top/g, function (matched) { + return hash[matched]; + }); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js": +/*!********************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getOppositeVariationPlacement) +/* harmony export */ }); +var hash = { + start: 'end', + end: 'start' +}; +function getOppositeVariationPlacement(placement) { + return placement.replace(/start|end/g, function (matched) { + return hash[matched]; + }); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getVariation.js": +/*!***************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getVariation.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getVariation) +/* harmony export */ }); +function getVariation(placement) { + return placement.split('-')[1]; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/math.js": +/*!*******************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/math.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "max": () => (/* binding */ max), +/* harmony export */ "min": () => (/* binding */ min), +/* harmony export */ "round": () => (/* binding */ round) +/* harmony export */ }); +var max = Math.max; +var min = Math.min; +var round = Math.round; + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/mergeByName.js": +/*!**************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/mergeByName.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ mergeByName) +/* harmony export */ }); +function mergeByName(modifiers) { + var merged = modifiers.reduce(function (merged, current) { + var existing = merged[current.name]; + merged[current.name] = existing ? Object.assign({}, existing, current, { + options: Object.assign({}, existing.options, current.options), + data: Object.assign({}, existing.data, current.data) + }) : current; + return merged; + }, {}); // IE11 does not support Object.values + + return Object.keys(merged).map(function (key) { + return merged[key]; + }); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ mergePaddingObject) +/* harmony export */ }); +/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js"); + +function mergePaddingObject(paddingObject) { + return Object.assign({}, (0,_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), paddingObject); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/orderModifiers.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ orderModifiers) +/* harmony export */ }); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); + // source: https://stackoverflow.com/questions/49875255 + +function order(modifiers) { + var map = new Map(); + var visited = new Set(); + var result = []; + modifiers.forEach(function (modifier) { + map.set(modifier.name, modifier); + }); // On visiting object, check for its dependencies and visit them recursively + + function sort(modifier) { + visited.add(modifier.name); + var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); + requires.forEach(function (dep) { + if (!visited.has(dep)) { + var depModifier = map.get(dep); + + if (depModifier) { + sort(depModifier); + } + } + }); + result.push(modifier); + } + + modifiers.forEach(function (modifier) { + if (!visited.has(modifier.name)) { + // check for visited object + sort(modifier); + } + }); + return result; +} + +function orderModifiers(modifiers) { + // order based on dependencies + var orderedModifiers = order(modifiers); // order based on phase + + return _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases.reduce(function (acc, phase) { + return acc.concat(orderedModifiers.filter(function (modifier) { + return modifier.phase === phase; + })); + }, []); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ rectToClientRect) +/* harmony export */ }); +function rectToClientRect(rect) { + return Object.assign({}, rect, { + left: rect.x, + top: rect.y, + right: rect.x + rect.width, + bottom: rect.y + rect.height + }); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/uniqueBy.js": +/*!***********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/uniqueBy.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ uniqueBy) +/* harmony export */ }); +function uniqueBy(arr, fn) { + var identifiers = new Set(); + return arr.filter(function (item) { + var identifier = fn(item); + + if (!identifiers.has(identifier)) { + identifiers.add(identifier); + return true; + } + }); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/userAgent.js": +/*!************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/userAgent.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ getUAString) +/* harmony export */ }); +function getUAString() { + var uaData = navigator.userAgentData; + + if (uaData != null && uaData.brands) { + return uaData.brands.map(function (item) { + return item.brand + "/" + item.version; + }).join(' '); + } + + return navigator.userAgent; +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/validateModifiers.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/validateModifiers.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ validateModifiers) +/* harmony export */ }); +/* harmony import */ var _format_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./format.js */ "./node_modules/@popperjs/core/lib/utils/format.js"); +/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); + + +var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; +var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; +var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options']; +function validateModifiers(modifiers) { + modifiers.forEach(function (modifier) { + [].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)` + .filter(function (value, index, self) { + return self.indexOf(value) === index; + }).forEach(function (key) { + switch (key) { + case 'name': + if (typeof modifier.name !== 'string') { + console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\"")); + } + + break; + + case 'enabled': + if (typeof modifier.enabled !== 'boolean') { + console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\"")); + } + + break; + + case 'phase': + if (_enums_js__WEBPACK_IMPORTED_MODULE_1__.modifierPhases.indexOf(modifier.phase) < 0) { + console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + _enums_js__WEBPACK_IMPORTED_MODULE_1__.modifierPhases.join(', '), "\"" + String(modifier.phase) + "\"")); + } + + break; + + case 'fn': + if (typeof modifier.fn !== 'function') { + console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\"")); + } + + break; + + case 'effect': + if (modifier.effect != null && typeof modifier.effect !== 'function') { + console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\"")); + } + + break; + + case 'requires': + if (modifier.requires != null && !Array.isArray(modifier.requires)) { + console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\"")); + } + + break; + + case 'requiresIfExists': + if (!Array.isArray(modifier.requiresIfExists)) { + console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\"")); + } + + break; + + case 'options': + case 'data': + break; + + default: + console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) { + return "\"" + s + "\""; + }).join(', ') + "; but \"" + key + "\" was provided."); + } + + modifier.requires && modifier.requires.forEach(function (requirement) { + if (modifiers.find(function (mod) { + return mod.name === requirement; + }) == null) { + console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); + } + }); + }); + }); +} + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/within.js": +/*!*********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/within.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "within": () => (/* binding */ within), +/* harmony export */ "withinMaxClamp": () => (/* binding */ withinMaxClamp) +/* harmony export */ }); +/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); + +function within(min, value, max) { + return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(min, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(value, max)); +} +function withinMaxClamp(min, value, max) { + var v = within(min, value, max); + return v > max ? max : v; +} + +/***/ }), + +/***/ "./node_modules/@tryghost/content-api/es/content-api.js": +/*!**************************************************************!*\ + !*** ./node_modules/@tryghost/content-api/es/content-api.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ GhostContentAPI) +/* harmony export */ }); +/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js")["Buffer"]; +/* provided dependency */ var process = __webpack_require__(/*! process/browser.js */ "./node_modules/process/browser.js"); +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; +} + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var check = function (it) { + return it && it.Math == Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global_1 = + // eslint-disable-next-line es-x/no-global-this -- safe + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == 'object' && self) || + check(typeof commonjsGlobal == 'object' && commonjsGlobal) || + // eslint-disable-next-line no-new-func -- fallback + (function () { return this; })() || Function('return this')(); + +var fails = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + +// Detect IE8's incomplete defineProperty implementation +var descriptors$1 = !fails(function () { + // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; +}); + +var functionBindNative = !fails(function () { + // eslint-disable-next-line es-x/no-function-prototype-bind -- safe + var test = (function () { /* empty */ }).bind(); + // eslint-disable-next-line no-prototype-builtins -- safe + return typeof test != 'function' || test.hasOwnProperty('prototype'); +}); + +var call$2 = Function.prototype.call; + +var functionCall = functionBindNative ? call$2.bind(call$2) : function () { + return call$2.apply(call$2, arguments); +}; + +var $propertyIsEnumerable = {}.propertyIsEnumerable; +// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe +var getOwnPropertyDescriptor$4 = Object.getOwnPropertyDescriptor; + +// Nashorn ~ JDK8 bug +var NASHORN_BUG = getOwnPropertyDescriptor$4 && !$propertyIsEnumerable.call({ 1: 2 }, 1); + +// `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable +var f$6 = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor$4(this, V); + return !!descriptor && descriptor.enumerable; +} : $propertyIsEnumerable; + +var objectPropertyIsEnumerable = { + f: f$6 +}; + +var createPropertyDescriptor = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + +var FunctionPrototype$3 = Function.prototype; +var bind$3 = FunctionPrototype$3.bind; +var call$1 = FunctionPrototype$3.call; +var uncurryThis = functionBindNative && bind$3.bind(call$1, call$1); + +var functionUncurryThis = functionBindNative ? function (fn) { + return fn && uncurryThis(fn); +} : function (fn) { + return fn && function () { + return call$1.apply(fn, arguments); + }; +}; + +var toString$2 = functionUncurryThis({}.toString); +var stringSlice$3 = functionUncurryThis(''.slice); + +var classofRaw = function (it) { + return stringSlice$3(toString$2(it), 8, -1); +}; + +var $Object$3 = Object; +var split = functionUncurryThis(''.split); + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +var indexedObject = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !$Object$3('z').propertyIsEnumerable(0); +}) ? function (it) { + return classofRaw(it) == 'String' ? split(it, '') : $Object$3(it); +} : $Object$3; + +var $TypeError$e = TypeError; + +// `RequireObjectCoercible` abstract operation +// https://tc39.es/ecma262/#sec-requireobjectcoercible +var requireObjectCoercible = function (it) { + if (it == undefined) throw $TypeError$e("Can't call method on " + it); + return it; +}; + +// toObject with fallback for non-array-like ES3 strings + + + +var toIndexedObject = function (it) { + return indexedObject(requireObjectCoercible(it)); +}; + +// `IsCallable` abstract operation +// https://tc39.es/ecma262/#sec-iscallable +var isCallable = function (argument) { + return typeof argument == 'function'; +}; + +var isObject$2 = function (it) { + return typeof it == 'object' ? it !== null : isCallable(it); +}; + +var aFunction = function (argument) { + return isCallable(argument) ? argument : undefined; +}; + +var getBuiltIn = function (namespace, method) { + return arguments.length < 2 ? aFunction(global_1[namespace]) : global_1[namespace] && global_1[namespace][method]; +}; + +var objectIsPrototypeOf = functionUncurryThis({}.isPrototypeOf); + +var engineUserAgent = getBuiltIn('navigator', 'userAgent') || ''; + +var process$4 = global_1.process; +var Deno$1 = global_1.Deno; +var versions = process$4 && process$4.versions || Deno$1 && Deno$1.version; +var v8 = versions && versions.v8; +var match, version$1; + +if (v8) { + match = v8.split('.'); + // in old Chrome, versions of V8 isn't V8 = Chrome / 10 + // but their correct versions are not interesting for us + version$1 = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); +} + +// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` +// so check `userAgent` even if `.v8` exists, but 0 +if (!version$1 && engineUserAgent) { + match = engineUserAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = engineUserAgent.match(/Chrome\/(\d+)/); + if (match) version$1 = +match[1]; + } +} + +var engineV8Version = version$1; + +/* eslint-disable es-x/no-symbol -- required for testing */ + + + +// eslint-disable-next-line es-x/no-object-getownpropertysymbols -- required for testing +var nativeSymbol = !!Object.getOwnPropertySymbols && !fails(function () { + var symbol = Symbol(); + // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + return !String(symbol) || !(Object(symbol) instanceof Symbol) || + // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && engineV8Version && engineV8Version < 41; +}); + +/* eslint-disable es-x/no-symbol -- required for testing */ + + +var useSymbolAsUid = nativeSymbol + && !Symbol.sham + && typeof Symbol.iterator == 'symbol'; + +var $Object$2 = Object; + +var isSymbol = useSymbolAsUid ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + var $Symbol = getBuiltIn('Symbol'); + return isCallable($Symbol) && objectIsPrototypeOf($Symbol.prototype, $Object$2(it)); +}; + +var $String$3 = String; + +var tryToString = function (argument) { + try { + return $String$3(argument); + } catch (error) { + return 'Object'; + } +}; + +var $TypeError$d = TypeError; + +// `Assert: IsCallable(argument) is true` +var aCallable = function (argument) { + if (isCallable(argument)) return argument; + throw $TypeError$d(tryToString(argument) + ' is not a function'); +}; + +// `GetMethod` abstract operation +// https://tc39.es/ecma262/#sec-getmethod +var getMethod = function (V, P) { + var func = V[P]; + return func == null ? undefined : aCallable(func); +}; + +var $TypeError$c = TypeError; + +// `OrdinaryToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-ordinarytoprimitive +var ordinaryToPrimitive = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable(fn = input.toString) && !isObject$2(val = functionCall(fn, input))) return val; + if (isCallable(fn = input.valueOf) && !isObject$2(val = functionCall(fn, input))) return val; + if (pref !== 'string' && isCallable(fn = input.toString) && !isObject$2(val = functionCall(fn, input))) return val; + throw $TypeError$c("Can't convert object to primitive value"); +}; + +// eslint-disable-next-line es-x/no-object-defineproperty -- safe +var defineProperty$4 = Object.defineProperty; + +var defineGlobalProperty = function (key, value) { + try { + defineProperty$4(global_1, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global_1[key] = value; + } return value; +}; + +var SHARED = '__core-js_shared__'; +var store$1 = global_1[SHARED] || defineGlobalProperty(SHARED, {}); + +var sharedStore = store$1; + +var shared = createCommonjsModule(function (module) { +(module.exports = function (key, value) { + return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: '3.24.1', + mode: 'global', + copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)', + license: 'https://github.com/zloirock/core-js/blob/v3.24.1/LICENSE', + source: 'https://github.com/zloirock/core-js' +}); +}); + +var $Object$1 = Object; + +// `ToObject` abstract operation +// https://tc39.es/ecma262/#sec-toobject +var toObject = function (argument) { + return $Object$1(requireObjectCoercible(argument)); +}; + +var hasOwnProperty$1 = functionUncurryThis({}.hasOwnProperty); + +// `HasOwnProperty` abstract operation +// https://tc39.es/ecma262/#sec-hasownproperty +// eslint-disable-next-line es-x/no-object-hasown -- safe +var hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty$1(toObject(it), key); +}; + +var id = 0; +var postfix = Math.random(); +var toString$1 = functionUncurryThis(1.0.toString); + +var uid = function (key) { + return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$1(++id + postfix, 36); +}; + +var WellKnownSymbolsStore = shared('wks'); +var Symbol$1 = global_1.Symbol; +var symbolFor = Symbol$1 && Symbol$1['for']; +var createWellKnownSymbol = useSymbolAsUid ? Symbol$1 : Symbol$1 && Symbol$1.withoutSetter || uid; + +var wellKnownSymbol = function (name) { + if (!hasOwnProperty_1(WellKnownSymbolsStore, name) || !(nativeSymbol || typeof WellKnownSymbolsStore[name] == 'string')) { + var description = 'Symbol.' + name; + if (nativeSymbol && hasOwnProperty_1(Symbol$1, name)) { + WellKnownSymbolsStore[name] = Symbol$1[name]; + } else if (useSymbolAsUid && symbolFor) { + WellKnownSymbolsStore[name] = symbolFor(description); + } else { + WellKnownSymbolsStore[name] = createWellKnownSymbol(description); + } + } return WellKnownSymbolsStore[name]; +}; + +var $TypeError$b = TypeError; +var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + +// `ToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-toprimitive +var toPrimitive = function (input, pref) { + if (!isObject$2(input) || isSymbol(input)) return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = functionCall(exoticToPrim, input, pref); + if (!isObject$2(result) || isSymbol(result)) return result; + throw $TypeError$b("Can't convert object to primitive value"); + } + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive(input, pref); +}; + +// `ToPropertyKey` abstract operation +// https://tc39.es/ecma262/#sec-topropertykey +var toPropertyKey = function (argument) { + var key = toPrimitive(argument, 'string'); + return isSymbol(key) ? key : key + ''; +}; + +var document$3 = global_1.document; +// typeof document.createElement is 'object' in old IE +var EXISTS$1 = isObject$2(document$3) && isObject$2(document$3.createElement); + +var documentCreateElement = function (it) { + return EXISTS$1 ? document$3.createElement(it) : {}; +}; + +// Thanks to IE8 for its funny defineProperty +var ie8DomDefine = !descriptors$1 && !fails(function () { + // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing + return Object.defineProperty(documentCreateElement('div'), 'a', { + get: function () { return 7; } + }).a != 7; +}); + +// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor; + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor +var f$5 = descriptors$1 ? $getOwnPropertyDescriptor$1 : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (ie8DomDefine) try { + return $getOwnPropertyDescriptor$1(O, P); + } catch (error) { /* empty */ } + if (hasOwnProperty_1(O, P)) return createPropertyDescriptor(!functionCall(objectPropertyIsEnumerable.f, O, P), O[P]); +}; + +var objectGetOwnPropertyDescriptor = { + f: f$5 +}; + +// V8 ~ Chrome 36- +// https://bugs.chromium.org/p/v8/issues/detail?id=3334 +var v8PrototypeDefineBug = descriptors$1 && fails(function () { + // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing + return Object.defineProperty(function () { /* empty */ }, 'prototype', { + value: 42, + writable: false + }).prototype != 42; +}); + +var $String$2 = String; +var $TypeError$a = TypeError; + +// `Assert: Type(argument) is Object` +var anObject = function (argument) { + if (isObject$2(argument)) return argument; + throw $TypeError$a($String$2(argument) + ' is not an object'); +}; + +var $TypeError$9 = TypeError; +// eslint-disable-next-line es-x/no-object-defineproperty -- safe +var $defineProperty = Object.defineProperty; +// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var ENUMERABLE = 'enumerable'; +var CONFIGURABLE$1 = 'configurable'; +var WRITABLE = 'writable'; + +// `Object.defineProperty` method +// https://tc39.es/ecma262/#sec-object.defineproperty +var f$4 = descriptors$1 ? v8PrototypeDefineBug ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE$1 in Attributes ? Attributes[CONFIGURABLE$1] : current[CONFIGURABLE$1], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } return $defineProperty(O, P, Attributes); +} : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (ie8DomDefine) try { + return $defineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw $TypeError$9('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + +var objectDefineProperty = { + f: f$4 +}; + +var createNonEnumerableProperty = descriptors$1 ? function (object, key, value) { + return objectDefineProperty.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + +var FunctionPrototype$2 = Function.prototype; +// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe +var getDescriptor = descriptors$1 && Object.getOwnPropertyDescriptor; + +var EXISTS = hasOwnProperty_1(FunctionPrototype$2, 'name'); +// additional protection from minified / mangled / dropped function names +var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; +var CONFIGURABLE = EXISTS && (!descriptors$1 || (descriptors$1 && getDescriptor(FunctionPrototype$2, 'name').configurable)); + +var functionName = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE +}; + +var functionToString$1 = functionUncurryThis(Function.toString); + +// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper +if (!isCallable(sharedStore.inspectSource)) { + sharedStore.inspectSource = function (it) { + return functionToString$1(it); + }; +} + +var inspectSource = sharedStore.inspectSource; + +var WeakMap$1 = global_1.WeakMap; + +var nativeWeakMap = isCallable(WeakMap$1) && /native code/.test(inspectSource(WeakMap$1)); + +var keys = shared('keys'); + +var sharedKey = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + +var hiddenKeys$1 = {}; + +var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; +var TypeError$2 = global_1.TypeError; +var WeakMap = global_1.WeakMap; +var set$1, get, has; + +var enforce = function (it) { + return has(it) ? get(it) : set$1(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject$2(it) || (state = get(it)).type !== TYPE) { + throw TypeError$2('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; +}; + +if (nativeWeakMap || sharedStore.state) { + var store = sharedStore.state || (sharedStore.state = new WeakMap()); + var wmget = functionUncurryThis(store.get); + var wmhas = functionUncurryThis(store.has); + var wmset = functionUncurryThis(store.set); + set$1 = function (it, metadata) { + if (wmhas(store, it)) throw new TypeError$2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + wmset(store, it, metadata); + return metadata; + }; + get = function (it) { + return wmget(store, it) || {}; + }; + has = function (it) { + return wmhas(store, it); + }; +} else { + var STATE = sharedKey('state'); + hiddenKeys$1[STATE] = true; + set$1 = function (it, metadata) { + if (hasOwnProperty_1(it, STATE)) throw new TypeError$2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return hasOwnProperty_1(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return hasOwnProperty_1(it, STATE); + }; +} + +var internalState = { + set: set$1, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor +}; + +var makeBuiltIn_1 = createCommonjsModule(function (module) { +var CONFIGURABLE_FUNCTION_NAME = functionName.CONFIGURABLE; + + + +var enforceInternalState = internalState.enforce; +var getInternalState = internalState.get; +// eslint-disable-next-line es-x/no-object-defineproperty -- safe +var defineProperty = Object.defineProperty; + +var CONFIGURABLE_LENGTH = descriptors$1 && !fails(function () { + return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8; +}); + +var TEMPLATE = String(String).split('String'); + +var makeBuiltIn = module.exports = function (value, name, options) { + if (String(name).slice(0, 7) === 'Symbol(') { + name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']'; + } + if (options && options.getter) name = 'get ' + name; + if (options && options.setter) name = 'set ' + name; + if (!hasOwnProperty_1(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) { + if (descriptors$1) defineProperty(value, 'name', { value: name, configurable: true }); + else value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwnProperty_1(options, 'arity') && value.length !== options.arity) { + defineProperty(value, 'length', { value: options.arity }); + } + try { + if (options && hasOwnProperty_1(options, 'constructor') && options.constructor) { + if (descriptors$1) defineProperty(value, 'prototype', { writable: false }); + // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable + } else if (value.prototype) value.prototype = undefined; + } catch (error) { /* empty */ } + var state = enforceInternalState(value); + if (!hasOwnProperty_1(state, 'source')) { + state.source = TEMPLATE.join(typeof name == 'string' ? name : ''); + } return value; +}; + +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative +// eslint-disable-next-line no-extend-native -- required +Function.prototype.toString = makeBuiltIn(function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); +}, 'toString'); +}); + +var defineBuiltIn = function (O, key, value, options) { + if (!options) options = {}; + var simple = options.enumerable; + var name = options.name !== undefined ? options.name : key; + if (isCallable(value)) makeBuiltIn_1(value, name, options); + if (options.global) { + if (simple) O[key] = value; + else defineGlobalProperty(key, value); + } else { + try { + if (!options.unsafe) delete O[key]; + else if (O[key]) simple = true; + } catch (error) { /* empty */ } + if (simple) O[key] = value; + else objectDefineProperty.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } return O; +}; + +var ceil = Math.ceil; +var floor$1 = Math.floor; + +// `Math.trunc` method +// https://tc39.es/ecma262/#sec-math.trunc +// eslint-disable-next-line es-x/no-math-trunc -- safe +var mathTrunc = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor$1 : ceil)(n); +}; + +// `ToIntegerOrInfinity` abstract operation +// https://tc39.es/ecma262/#sec-tointegerorinfinity +var toIntegerOrInfinity = function (argument) { + var number = +argument; + // eslint-disable-next-line no-self-compare -- NaN check + return number !== number || number === 0 ? 0 : mathTrunc(number); +}; + +var max = Math.max; +var min$3 = Math.min; + +// Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). +var toAbsoluteIndex = function (index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min$3(integer, length); +}; + +var min$2 = Math.min; + +// `ToLength` abstract operation +// https://tc39.es/ecma262/#sec-tolength +var toLength = function (argument) { + return argument > 0 ? min$2(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + +// `LengthOfArrayLike` abstract operation +// https://tc39.es/ecma262/#sec-lengthofarraylike +var lengthOfArrayLike = function (obj) { + return toLength(obj.length); +}; + +// `Array.prototype.{ indexOf, includes }` methods implementation +var createMethod$2 = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare -- NaN check + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +var arrayIncludes = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod$2(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod$2(false) +}; + +var indexOf$1 = arrayIncludes.indexOf; + + +var push$1 = functionUncurryThis([].push); + +var objectKeysInternal = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !hasOwnProperty_1(hiddenKeys$1, key) && hasOwnProperty_1(O, key) && push$1(result, key); + // Don't enum bug & hidden keys + while (names.length > i) if (hasOwnProperty_1(O, key = names[i++])) { + ~indexOf$1(result, key) || push$1(result, key); + } + return result; +}; + +// IE8- don't enum bug keys +var enumBugKeys = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + +var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + +// `Object.getOwnPropertyNames` method +// https://tc39.es/ecma262/#sec-object.getownpropertynames +// eslint-disable-next-line es-x/no-object-getownpropertynames -- safe +var f$3 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return objectKeysInternal(O, hiddenKeys); +}; + +var objectGetOwnPropertyNames = { + f: f$3 +}; + +// eslint-disable-next-line es-x/no-object-getownpropertysymbols -- safe +var f$2 = Object.getOwnPropertySymbols; + +var objectGetOwnPropertySymbols = { + f: f$2 +}; + +var concat$1 = functionUncurryThis([].concat); + +// all object keys, includes non-enumerable and symbols +var ownKeys = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = objectGetOwnPropertyNames.f(anObject(it)); + var getOwnPropertySymbols = objectGetOwnPropertySymbols.f; + return getOwnPropertySymbols ? concat$1(keys, getOwnPropertySymbols(it)) : keys; +}; + +var copyConstructorProperties = function (target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = objectDefineProperty.f; + var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwnProperty_1(target, key) && !(exceptions && hasOwnProperty_1(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } +}; + +var replacement = /#|\.prototype\./; + +var isForced = function (feature, detection) { + var value = data$1[normalize(feature)]; + return value == POLYFILL ? true + : value == NATIVE ? false + : isCallable(detection) ? fails(detection) + : !!detection; +}; + +var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data$1 = isForced.data = {}; +var NATIVE = isForced.NATIVE = 'N'; +var POLYFILL = isForced.POLYFILL = 'P'; + +var isForced_1 = isForced; + +var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f; + + + + + + +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.dontCallGetSet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key +*/ +var _export = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global_1; + } else if (STATIC) { + target = global_1[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = (global_1[TARGET] || {}).prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor$3(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced_1(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty == typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, 'sham', true); + } + defineBuiltIn(target, key, sourceProperty, options); + } +}; + +var TO_STRING_TAG$2 = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG$2] = 'z'; + +var toStringTagSupport = String(test) === '[object z]'; + +var TO_STRING_TAG$1 = wellKnownSymbol('toStringTag'); +var $Object = Object; + +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +var classof = toStringTagSupport ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG$1)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result; +}; + +var $String$1 = String; + +var toString_1 = function (argument) { + if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string'); + return $String$1(argument); +}; + +// `RegExp.prototype.flags` getter implementation +// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags +var regexpFlags = function () { + var that = anObject(this); + var result = ''; + if (that.hasIndices) result += 'd'; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.dotAll) result += 's'; + if (that.unicode) result += 'u'; + if (that.unicodeSets) result += 'v'; + if (that.sticky) result += 'y'; + return result; +}; + +// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError +var $RegExp$2 = global_1.RegExp; + +var UNSUPPORTED_Y$1 = fails(function () { + var re = $RegExp$2('a', 'y'); + re.lastIndex = 2; + return re.exec('abcd') != null; +}); + +// UC Browser bug +// https://github.com/zloirock/core-js/issues/1008 +var MISSED_STICKY = UNSUPPORTED_Y$1 || fails(function () { + return !$RegExp$2('a', 'y').sticky; +}); + +var BROKEN_CARET = UNSUPPORTED_Y$1 || fails(function () { + // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 + var re = $RegExp$2('^r', 'gy'); + re.lastIndex = 2; + return re.exec('str') != null; +}); + +var regexpStickyHelpers = { + BROKEN_CARET: BROKEN_CARET, + MISSED_STICKY: MISSED_STICKY, + UNSUPPORTED_Y: UNSUPPORTED_Y$1 +}; + +// `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +// eslint-disable-next-line es-x/no-object-keys -- safe +var objectKeys$1 = Object.keys || function keys(O) { + return objectKeysInternal(O, enumBugKeys); +}; + +// `Object.defineProperties` method +// https://tc39.es/ecma262/#sec-object.defineproperties +// eslint-disable-next-line es-x/no-object-defineproperties -- safe +var f$1 = descriptors$1 && !v8PrototypeDefineBug ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys$1(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) objectDefineProperty.f(O, key = keys[index++], props[key]); + return O; +}; + +var objectDefineProperties = { + f: f$1 +}; + +var html = getBuiltIn('document', 'documentElement'); + +/* global ActiveXObject -- old IE, WSH */ + + + + + + + + +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; + +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; +}; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = typeof document != 'undefined' + ? document.domain && activeXDocument + ? NullProtoObjectViaActiveX(activeXDocument) // old IE + : NullProtoObjectViaIFrame() + : NullProtoObjectViaActiveX(activeXDocument); // WSH + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); +}; + +hiddenKeys$1[IE_PROTO] = true; + +// `Object.create` method +// https://tc39.es/ecma262/#sec-object.create +// eslint-disable-next-line es-x/no-object-create -- safe +var objectCreate = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : objectDefineProperties.f(result, Properties); +}; + +// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError +var $RegExp$1 = global_1.RegExp; + +var regexpUnsupportedDotAll = fails(function () { + var re = $RegExp$1('.', 's'); + return !(re.dotAll && re.exec('\n') && re.flags === 's'); +}); + +// babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError +var $RegExp = global_1.RegExp; + +var regexpUnsupportedNcg = fails(function () { + var re = $RegExp('(?b)', 'g'); + return re.exec('b').groups.a !== 'b' || + 'b'.replace(re, '$c') !== 'bc'; +}); + +/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */ +/* eslint-disable regexp/no-useless-quantifier -- testing */ + + + + + + + +var getInternalState = internalState.get; + + + +var nativeReplace = shared('native-string-replace', String.prototype.replace); +var nativeExec = RegExp.prototype.exec; +var patchedExec = nativeExec; +var charAt$2 = functionUncurryThis(''.charAt); +var indexOf = functionUncurryThis(''.indexOf); +var replace = functionUncurryThis(''.replace); +var stringSlice$2 = functionUncurryThis(''.slice); + +var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/; + var re2 = /b*/g; + functionCall(nativeExec, re1, 'a'); + functionCall(nativeExec, re2, 'a'); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; +})(); + +var UNSUPPORTED_Y = regexpStickyHelpers.BROKEN_CARET; + +// nonparticipating capturing group, copied from es5-shim's String#split patch. +var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + +var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || regexpUnsupportedDotAll || regexpUnsupportedNcg; + +if (PATCH) { + patchedExec = function exec(string) { + var re = this; + var state = getInternalState(re); + var str = toString_1(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + + if (raw) { + raw.lastIndex = re.lastIndex; + result = functionCall(patchedExec, raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + + var groups = state.groups; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = functionCall(regexpFlags, re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = replace(flags, 'y', ''); + if (indexOf(flags, 'g') === -1) { + flags += 'g'; + } + + strCopy = stringSlice$2(str, re.lastIndex); + // Support anchored sticky behavior. + if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt$2(str, re.lastIndex - 1) !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } + // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + reCopy = new RegExp('^(?:' + source + ')', flags); + } + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; + + match = functionCall(nativeExec, sticky ? reCopy : re, strCopy); + + if (sticky) { + if (match) { + match.input = stringSlice$2(match.input, charsAdded); + match[0] = stringSlice$2(match[0], charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/ + functionCall(nativeReplace, match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + if (match && groups) { + match.groups = object = objectCreate(null); + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + + return match; + }; +} + +var regexpExec = patchedExec; + +// `RegExp.prototype.exec` method +// https://tc39.es/ecma262/#sec-regexp.prototype.exec +_export({ target: 'RegExp', proto: true, forced: /./.exec !== regexpExec }, { + exec: regexpExec +}); + +// TODO: Remove from `core-js@4` since it's moved to entry points + + + + + + + + +var SPECIES$5 = wellKnownSymbol('species'); +var RegExpPrototype = RegExp.prototype; + +var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) { + var SYMBOL = wellKnownSymbol(KEY); + + var DELEGATES_TO_SYMBOL = !fails(function () { + // String methods call symbol-named RegEp methods + var O = {}; + O[SYMBOL] = function () { return 7; }; + return ''[KEY](O) != 7; + }); + + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + + if (KEY === 'split') { + // We can't use real regex here since it causes deoptimization + // and serious performance degradation in V8 + // https://github.com/zloirock/core-js/issues/306 + re = {}; + // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + re.constructor = {}; + re.constructor[SPECIES$5] = function () { return re; }; + re.flags = ''; + re[SYMBOL] = /./[SYMBOL]; + } + + re.exec = function () { execCalled = true; return null; }; + + re[SYMBOL](''); + return !execCalled; + }); + + if ( + !DELEGATES_TO_SYMBOL || + !DELEGATES_TO_EXEC || + FORCED + ) { + var uncurriedNativeRegExpMethod = functionUncurryThis(/./[SYMBOL]); + var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { + var uncurriedNativeMethod = functionUncurryThis(nativeMethod); + var $exec = regexp.exec; + if ($exec === regexpExec || $exec === RegExpPrototype.exec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) }; + } + return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) }; + } + return { done: false }; + }); + + defineBuiltIn(String.prototype, KEY, methods[0]); + defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]); + } + + if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true); +}; + +var charAt$1 = functionUncurryThis(''.charAt); +var charCodeAt = functionUncurryThis(''.charCodeAt); +var stringSlice$1 = functionUncurryThis(''.slice); + +var createMethod$1 = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = toString_1(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = charCodeAt(S, position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING + ? charAt$1(S, position) + : first + : CONVERT_TO_STRING + ? stringSlice$1(S, position, position + 2) + : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; +}; + +var stringMultibyte = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod$1(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod$1(true) +}; + +var charAt = stringMultibyte.charAt; + +// `AdvanceStringIndex` abstract operation +// https://tc39.es/ecma262/#sec-advancestringindex +var advanceStringIndex = function (S, index, unicode) { + return index + (unicode ? charAt(S, index).length : 1); +}; + +var $TypeError$8 = TypeError; + +// `RegExpExec` abstract operation +// https://tc39.es/ecma262/#sec-regexpexec +var regexpExecAbstract = function (R, S) { + var exec = R.exec; + if (isCallable(exec)) { + var result = functionCall(exec, R, S); + if (result !== null) anObject(result); + return result; + } + if (classofRaw(R) === 'RegExp') return functionCall(regexpExec, R, S); + throw $TypeError$8('RegExp#exec called on incompatible receiver'); +}; + +// @@match logic +fixRegexpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) { + return [ + // `String.prototype.match` method + // https://tc39.es/ecma262/#sec-string.prototype.match + function match(regexp) { + var O = requireObjectCoercible(this); + var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH); + return matcher ? functionCall(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString_1(O)); + }, + // `RegExp.prototype[@@match]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@match + function (string) { + var rx = anObject(this); + var S = toString_1(string); + var res = maybeCallNative(nativeMatch, rx, S); + + if (res.done) return res.value; + + if (!rx.global) return regexpExecAbstract(rx, S); + + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + var A = []; + var n = 0; + var result; + while ((result = regexpExecAbstract(rx, S)) !== null) { + var matchStr = toString_1(result[0]); + A[n] = matchStr; + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + n++; + } + return n === 0 ? null : A; + } + ]; +}); + +var arrayMethodIsStrict = function (METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails(function () { + // eslint-disable-next-line no-useless-call -- required for testing + method.call(null, argument || function () { return 1; }, 1); + }); +}; + +var un$Join = functionUncurryThis([].join); + +var ES3_STRINGS = indexedObject != Object; +var STRICT_METHOD$1 = arrayMethodIsStrict('join', ','); + +// `Array.prototype.join` method +// https://tc39.es/ecma262/#sec-array.prototype.join +_export({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD$1 }, { + join: function join(separator) { + return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator); + } +}); + +// `Object.prototype.toString` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.tostring +var objectToString = toStringTagSupport ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; +}; + +// `Object.prototype.toString` method +// https://tc39.es/ecma262/#sec-object.prototype.tostring +if (!toStringTagSupport) { + defineBuiltIn(Object.prototype, 'toString', objectToString, { unsafe: true }); +} + +var FAILS_ON_PRIMITIVES = fails(function () { objectKeys$1(1); }); + +// `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +_export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { + keys: function keys(it) { + return objectKeys$1(toObject(it)); + } +}); + +// `IsArray` abstract operation +// https://tc39.es/ecma262/#sec-isarray +// eslint-disable-next-line es-x/no-array-isarray -- safe +var isArray$2 = Array.isArray || function isArray(argument) { + return classofRaw(argument) == 'Array'; +}; + +var $TypeError$7 = TypeError; +var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991 + +var doesNotExceedSafeInteger = function (it) { + if (it > MAX_SAFE_INTEGER) throw $TypeError$7('Maximum allowed index exceeded'); + return it; +}; + +var createProperty = function (object, key, value) { + var propertyKey = toPropertyKey(key); + if (propertyKey in object) objectDefineProperty.f(object, propertyKey, createPropertyDescriptor(0, value)); + else object[propertyKey] = value; +}; + +var noop = function () { /* empty */ }; +var empty = []; +var construct = getBuiltIn('Reflect', 'construct'); +var constructorRegExp = /^\s*(?:class|function)\b/; +var exec = functionUncurryThis(constructorRegExp.exec); +var INCORRECT_TO_STRING = !constructorRegExp.exec(noop); + +var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) return false; + try { + construct(noop, empty, argument); + return true; + } catch (error) { + return false; + } +}; + +var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) return false; + switch (classof(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': return false; + } + try { + // we can't check .prototype since constructors produced by .bind haven't it + // `Function#toString` throws on some built-it function in some legacy engines + // (for example, `DOMQuad` and similar in FF41-) + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } +}; + +isConstructorLegacy.sham = true; + +// `IsConstructor` abstract operation +// https://tc39.es/ecma262/#sec-isconstructor +var isConstructor = !construct || fails(function () { + var called; + return isConstructorModern(isConstructorModern.call) + || !isConstructorModern(Object) + || !isConstructorModern(function () { called = true; }) + || called; +}) ? isConstructorLegacy : isConstructorModern; + +var SPECIES$4 = wellKnownSymbol('species'); +var $Array = Array; + +// a part of `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate +var arraySpeciesConstructor = function (originalArray) { + var C; + if (isArray$2(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (isConstructor(C) && (C === $Array || isArray$2(C.prototype))) C = undefined; + else if (isObject$2(C)) { + C = C[SPECIES$4]; + if (C === null) C = undefined; + } + } return C === undefined ? $Array : C; +}; + +// `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate +var arraySpeciesCreate = function (originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); +}; + +var SPECIES$3 = wellKnownSymbol('species'); + +var arrayMethodHasSpeciesSupport = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return engineV8Version >= 51 || !fails(function () { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES$3] = function () { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); +}; + +var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); + +// We can't use this feature detection in V8 since it causes +// deoptimization and serious performance degradation +// https://github.com/zloirock/core-js/issues/679 +var IS_CONCAT_SPREADABLE_SUPPORT = engineV8Version >= 51 || !fails(function () { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; +}); + +var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat'); + +var isConcatSpreadable = function (O) { + if (!isObject$2(O)) return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== undefined ? !!spreadable : isArray$2(O); +}; + +var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; + +// `Array.prototype.concat` method +// https://tc39.es/ecma262/#sec-array.prototype.concat +// with adding support of @@isConcatSpreadable and @@species +_export({ target: 'Array', proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + concat: function concat(arg) { + var O = toObject(this); + var A = arraySpeciesCreate(O, 0); + var n = 0; + var i, k, length, len, E; + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + if (isConcatSpreadable(E)) { + len = lengthOfArrayLike(E); + doesNotExceedSafeInteger(n + len); + for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); + } else { + doesNotExceedSafeInteger(n + 1); + createProperty(A, n++, E); + } + } + A.length = n; + return A; + } +}); + +var defineProperty$3 = objectDefineProperty.f; + +var UNSCOPABLES = wellKnownSymbol('unscopables'); +var ArrayPrototype$1 = Array.prototype; + +// Array.prototype[@@unscopables] +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +if (ArrayPrototype$1[UNSCOPABLES] == undefined) { + defineProperty$3(ArrayPrototype$1, UNSCOPABLES, { + configurable: true, + value: objectCreate(null) + }); +} + +// add a key to Array.prototype[@@unscopables] +var addToUnscopables = function (key) { + ArrayPrototype$1[UNSCOPABLES][key] = true; +}; + +var $includes = arrayIncludes.includes; + + + +// FF99+ bug +var BROKEN_ON_SPARSE = fails(function () { + return !Array(1).includes(); +}); + +// `Array.prototype.includes` method +// https://tc39.es/ecma262/#sec-array.prototype.includes +_export({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('includes'); + +var MATCH$1 = wellKnownSymbol('match'); + +// `IsRegExp` abstract operation +// https://tc39.es/ecma262/#sec-isregexp +var isRegexp = function (it) { + var isRegExp; + return isObject$2(it) && ((isRegExp = it[MATCH$1]) !== undefined ? !!isRegExp : classofRaw(it) == 'RegExp'); +}; + +var $TypeError$6 = TypeError; + +var notARegexp = function (it) { + if (isRegexp(it)) { + throw $TypeError$6("The method doesn't accept regular expressions"); + } return it; +}; + +var MATCH = wellKnownSymbol('match'); + +var correctIsRegexpLogic = function (METHOD_NAME) { + var regexp = /./; + try { + '/./'[METHOD_NAME](regexp); + } catch (error1) { + try { + regexp[MATCH] = false; + return '/./'[METHOD_NAME](regexp); + } catch (error2) { /* empty */ } + } return false; +}; + +var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f; + + + + + + + +// eslint-disable-next-line es-x/no-string-prototype-endswith -- safe +var un$EndsWith = functionUncurryThis(''.endsWith); +var slice = functionUncurryThis(''.slice); +var min$1 = Math.min; + +var CORRECT_IS_REGEXP_LOGIC$1 = correctIsRegexpLogic('endsWith'); +// https://github.com/zloirock/core-js/pull/702 +var MDN_POLYFILL_BUG$1 = !CORRECT_IS_REGEXP_LOGIC$1 && !!function () { + var descriptor = getOwnPropertyDescriptor$2(String.prototype, 'endsWith'); + return descriptor && !descriptor.writable; +}(); + +// `String.prototype.endsWith` method +// https://tc39.es/ecma262/#sec-string.prototype.endswith +_export({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG$1 && !CORRECT_IS_REGEXP_LOGIC$1 }, { + endsWith: function endsWith(searchString /* , endPosition = @length */) { + var that = toString_1(requireObjectCoercible(this)); + notARegexp(searchString); + var endPosition = arguments.length > 1 ? arguments[1] : undefined; + var len = that.length; + var end = endPosition === undefined ? len : min$1(toLength(endPosition), len); + var search = toString_1(searchString); + return un$EndsWith + ? un$EndsWith(that, search, end) + : slice(that, end - search.length, end) === search; + } +}); + +var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; + + + + + + + +// eslint-disable-next-line es-x/no-string-prototype-startswith -- safe +var un$StartsWith = functionUncurryThis(''.startsWith); +var stringSlice = functionUncurryThis(''.slice); +var min = Math.min; + +var CORRECT_IS_REGEXP_LOGIC = correctIsRegexpLogic('startsWith'); +// https://github.com/zloirock/core-js/pull/702 +var MDN_POLYFILL_BUG = !CORRECT_IS_REGEXP_LOGIC && !!function () { + var descriptor = getOwnPropertyDescriptor$1(String.prototype, 'startsWith'); + return descriptor && !descriptor.writable; +}(); + +// `String.prototype.startsWith` method +// https://tc39.es/ecma262/#sec-string.prototype.startswith +_export({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, { + startsWith: function startsWith(searchString /* , position = 0 */) { + var that = toString_1(requireObjectCoercible(this)); + notARegexp(searchString); + var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length)); + var search = toString_1(searchString); + return un$StartsWith + ? un$StartsWith(that, search, index) + : stringSlice(that, index, index + search.length) === search; + } +}); + +var engineIsNode = classofRaw(global_1.process) == 'process'; + +var $String = String; +var $TypeError$5 = TypeError; + +var aPossiblePrototype = function (argument) { + if (typeof argument == 'object' || isCallable(argument)) return argument; + throw $TypeError$5("Can't set " + $String(argument) + ' as a prototype'); +}; + +/* eslint-disable no-proto -- safe */ + + + + +// `Object.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.setprototypeof +// Works with __proto__ only. Old v8 can't work with null proto objects. +// eslint-disable-next-line es-x/no-object-setprototypeof -- safe +var objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe + setter = functionUncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter(O, proto); + else O.__proto__ = proto; + return O; + }; +}() : undefined); + +var defineProperty$2 = objectDefineProperty.f; + + + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +var setToStringTag = function (target, TAG, STATIC) { + if (target && !STATIC) target = target.prototype; + if (target && !hasOwnProperty_1(target, TO_STRING_TAG)) { + defineProperty$2(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } +}; + +var SPECIES$2 = wellKnownSymbol('species'); + +var setSpecies = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + var defineProperty = objectDefineProperty.f; + + if (descriptors$1 && Constructor && !Constructor[SPECIES$2]) { + defineProperty(Constructor, SPECIES$2, { + configurable: true, + get: function () { return this; } + }); + } +}; + +var $TypeError$4 = TypeError; + +var anInstance = function (it, Prototype) { + if (objectIsPrototypeOf(Prototype, it)) return it; + throw $TypeError$4('Incorrect invocation'); +}; + +var $TypeError$3 = TypeError; + +// `Assert: IsConstructor(argument) is true` +var aConstructor = function (argument) { + if (isConstructor(argument)) return argument; + throw $TypeError$3(tryToString(argument) + ' is not a constructor'); +}; + +var SPECIES$1 = wellKnownSymbol('species'); + +// `SpeciesConstructor` abstract operation +// https://tc39.es/ecma262/#sec-speciesconstructor +var speciesConstructor = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES$1]) == undefined ? defaultConstructor : aConstructor(S); +}; + +var FunctionPrototype$1 = Function.prototype; +var apply = FunctionPrototype$1.apply; +var call = FunctionPrototype$1.call; + +// eslint-disable-next-line es-x/no-reflect -- safe +var functionApply = typeof Reflect == 'object' && Reflect.apply || (functionBindNative ? call.bind(apply) : function () { + return call.apply(apply, arguments); +}); + +var bind$2 = functionUncurryThis(functionUncurryThis.bind); + +// optional / simple context binding +var functionBindContext = function (fn, that) { + aCallable(fn); + return that === undefined ? fn : functionBindNative ? bind$2(fn, that) : function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + +var arraySlice = functionUncurryThis([].slice); + +var $TypeError$2 = TypeError; + +var validateArgumentsLength = function (passed, required) { + if (passed < required) throw $TypeError$2('Not enough arguments'); + return passed; +}; + +var engineIsIos = /(?:ipad|iphone|ipod).*applewebkit/i.test(engineUserAgent); + +var set = global_1.setImmediate; +var clear = global_1.clearImmediate; +var process$3 = global_1.process; +var Dispatch = global_1.Dispatch; +var Function$1 = global_1.Function; +var MessageChannel = global_1.MessageChannel; +var String$1 = global_1.String; +var counter = 0; +var queue$1 = {}; +var ONREADYSTATECHANGE = 'onreadystatechange'; +var location, defer, channel, port; + +try { + // Deno throws a ReferenceError on `location` access without `--location` flag + location = global_1.location; +} catch (error) { /* empty */ } + +var run = function (id) { + if (hasOwnProperty_1(queue$1, id)) { + var fn = queue$1[id]; + delete queue$1[id]; + fn(); + } +}; + +var runner = function (id) { + return function () { + run(id); + }; +}; + +var listener = function (event) { + run(event.data); +}; + +var post = function (id) { + // old engines have not location.origin + global_1.postMessage(String$1(id), location.protocol + '//' + location.host); +}; + +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if (!set || !clear) { + set = function setImmediate(handler) { + validateArgumentsLength(arguments.length, 1); + var fn = isCallable(handler) ? handler : Function$1(handler); + var args = arraySlice(arguments, 1); + queue$1[++counter] = function () { + functionApply(fn, undefined, args); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue$1[id]; + }; + // Node.js 0.8- + if (engineIsNode) { + defer = function (id) { + process$3.nextTick(runner(id)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(runner(id)); + }; + // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + } else if (MessageChannel && !engineIsIos) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = functionBindContext(port.postMessage, port); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if ( + global_1.addEventListener && + isCallable(global_1.postMessage) && + !global_1.importScripts && + location && location.protocol !== 'file:' && + !fails(post) + ) { + defer = post; + global_1.addEventListener('message', listener, false); + // IE8- + } else if (ONREADYSTATECHANGE in documentCreateElement('script')) { + defer = function (id) { + html.appendChild(documentCreateElement('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(runner(id), 0); + }; + } +} + +var task$1 = { + set: set, + clear: clear +}; + +var engineIsIosPebble = /ipad|iphone|ipod/i.test(engineUserAgent) && global_1.Pebble !== undefined; + +var engineIsWebosWebkit = /web0s(?!.*chrome)/i.test(engineUserAgent); + +var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f; +var macrotask = task$1.set; + + + + + +var MutationObserver = global_1.MutationObserver || global_1.WebKitMutationObserver; +var document$2 = global_1.document; +var process$2 = global_1.process; +var Promise$1 = global_1.Promise; +// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` +var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global_1, 'queueMicrotask'); +var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; + +var flush, head, last, notify$1, toggle, node, promise, then; + +// modern engines have queueMicrotask method +if (!queueMicrotask) { + flush = function () { + var parent, fn; + if (engineIsNode && (parent = process$2.domain)) parent.exit(); + while (head) { + fn = head.fn; + head = head.next; + try { + fn(); + } catch (error) { + if (head) notify$1(); + else last = undefined; + throw error; + } + } last = undefined; + if (parent) parent.enter(); + }; + + // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898 + if (!engineIsIos && !engineIsNode && !engineIsWebosWebkit && MutationObserver && document$2) { + toggle = true; + node = document$2.createTextNode(''); + new MutationObserver(flush).observe(node, { characterData: true }); + notify$1 = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (!engineIsIosPebble && Promise$1 && Promise$1.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise$1.resolve(undefined); + // workaround of WebKit ~ iOS Safari 10.1 bug + promise.constructor = Promise$1; + then = functionBindContext(promise.then, promise); + notify$1 = function () { + then(flush); + }; + // Node.js without promises + } else if (engineIsNode) { + notify$1 = function () { + process$2.nextTick(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessage + // - onreadystatechange + // - setTimeout + } else { + // strange IE + webpack dev server bug - use .bind(global) + macrotask = functionBindContext(macrotask, global_1); + notify$1 = function () { + macrotask(flush); + }; + } +} + +var microtask = queueMicrotask || function (fn) { + var task = { fn: fn, next: undefined }; + if (last) last.next = task; + if (!head) { + head = task; + notify$1(); + } last = task; +}; + +var hostReportErrors = function (a, b) { + var console = global_1.console; + if (console && console.error) { + arguments.length == 1 ? console.error(a) : console.error(a, b); + } +}; + +var perform = function (exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } +}; + +var Queue = function () { + this.head = null; + this.tail = null; +}; + +Queue.prototype = { + add: function (item) { + var entry = { item: item, next: null }; + if (this.head) this.tail.next = entry; + else this.head = entry; + this.tail = entry; + }, + get: function () { + var entry = this.head; + if (entry) { + this.head = entry.next; + if (this.tail === entry) this.tail = null; + return entry.item; + } + } +}; + +var queue = Queue; + +var promiseNativeConstructor = global_1.Promise; + +/* global Deno -- Deno case */ +var engineIsDeno = typeof Deno == 'object' && Deno && typeof Deno.version == 'object'; + +var engineIsBrowser = !engineIsDeno && !engineIsNode + && typeof window == 'object' + && typeof document == 'object'; + +promiseNativeConstructor && promiseNativeConstructor.prototype; +var SPECIES = wellKnownSymbol('species'); +var SUBCLASSING = false; +var NATIVE_PROMISE_REJECTION_EVENT$1 = isCallable(global_1.PromiseRejectionEvent); + +var FORCED_PROMISE_CONSTRUCTOR$5 = isForced_1('Promise', function () { + var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(promiseNativeConstructor); + var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(promiseNativeConstructor); + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + if (!GLOBAL_CORE_JS_PROMISE && engineV8Version === 66) return true; + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (!engineV8Version || engineV8Version < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) { + // Detect correctness of subclassing with @@species support + var promise = new promiseNativeConstructor(function (resolve) { resolve(1); }); + var FakePromise = function (exec) { + exec(function () { /* empty */ }, function () { /* empty */ }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES] = FakePromise; + SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise; + if (!SUBCLASSING) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + } return !GLOBAL_CORE_JS_PROMISE && (engineIsBrowser || engineIsDeno) && !NATIVE_PROMISE_REJECTION_EVENT$1; +}); + +var promiseConstructorDetection = { + CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR$5, + REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT$1, + SUBCLASSING: SUBCLASSING +}; + +var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aCallable(resolve); + this.reject = aCallable(reject); +}; + +// `NewPromiseCapability` abstract operation +// https://tc39.es/ecma262/#sec-newpromisecapability +var f = function (C) { + return new PromiseCapability(C); +}; + +var newPromiseCapability$1 = { + f: f +}; + +var task = task$1.set; + + + + + + + + + +var PROMISE = 'Promise'; +var FORCED_PROMISE_CONSTRUCTOR$4 = promiseConstructorDetection.CONSTRUCTOR; +var NATIVE_PROMISE_REJECTION_EVENT = promiseConstructorDetection.REJECTION_EVENT; +var NATIVE_PROMISE_SUBCLASSING = promiseConstructorDetection.SUBCLASSING; +var getInternalPromiseState = internalState.getterFor(PROMISE); +var setInternalState = internalState.set; +var NativePromisePrototype$1 = promiseNativeConstructor && promiseNativeConstructor.prototype; +var PromiseConstructor = promiseNativeConstructor; +var PromisePrototype = NativePromisePrototype$1; +var TypeError$1 = global_1.TypeError; +var document$1 = global_1.document; +var process$1 = global_1.process; +var newPromiseCapability = newPromiseCapability$1.f; +var newGenericPromiseCapability = newPromiseCapability; + +var DISPATCH_EVENT = !!(document$1 && document$1.createEvent && global_1.dispatchEvent); +var UNHANDLED_REJECTION = 'unhandledrejection'; +var REJECTION_HANDLED = 'rejectionhandled'; +var PENDING = 0; +var FULFILLED = 1; +var REJECTED = 2; +var HANDLED = 1; +var UNHANDLED = 2; + +var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + +// helpers +var isThenable = function (it) { + var then; + return isObject$2(it) && isCallable(then = it.then) ? then : false; +}; + +var callReaction = function (reaction, state) { + var value = state.value; + var ok = state.state == FULFILLED; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) onHandleUnhandled(state); + state.rejection = HANDLED; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // can throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(TypeError$1('Promise-chain cycle')); + } else if (then = isThenable(result)) { + functionCall(then, result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } +}; + +var notify = function (state, isReject) { + if (state.notified) return; + state.notified = true; + microtask(function () { + var reactions = state.reactions; + var reaction; + while (reaction = reactions.get()) { + callReaction(reaction, state); + } + state.notified = false; + if (isReject && !state.rejection) onUnhandled(state); + }); +}; + +var dispatchEvent = function (name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document$1.createEvent('Event'); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global_1.dispatchEvent(event); + } else event = { promise: promise, reason: reason }; + if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global_1['on' + name])) handler(event); + else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); +}; + +var onUnhandled = function (state) { + functionCall(task, global_1, function () { + var promise = state.facade; + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function () { + if (engineIsNode) { + process$1.emit('unhandledRejection', value, promise); + } else dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + state.rejection = engineIsNode || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); +}; + +var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; +}; + +var onHandleUnhandled = function (state) { + functionCall(task, global_1, function () { + var promise = state.facade; + if (engineIsNode) { + process$1.emit('rejectionHandled', promise); + } else dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); +}; + +var bind$1 = function (fn, state, unwrap) { + return function (value) { + fn(state, value, unwrap); + }; +}; + +var internalReject = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify(state, true); +}; + +var internalResolve = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + try { + if (state.facade === value) throw TypeError$1("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function () { + var wrapper = { done: false }; + try { + functionCall(then, value, + bind$1(internalResolve, wrapper, state), + bind$1(internalReject, wrapper, state) + ); + } catch (error) { + internalReject(wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(state, false); + } + } catch (error) { + internalReject({ done: false }, error, state); + } +}; + +// constructor polyfill +if (FORCED_PROMISE_CONSTRUCTOR$4) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance(this, PromisePrototype); + aCallable(executor); + functionCall(Internal, this); + var state = getInternalPromiseState(this); + try { + executor(bind$1(internalResolve, state), bind$1(internalReject, state)); + } catch (error) { + internalReject(state, error); + } + }; + + PromisePrototype = PromiseConstructor.prototype; + + // eslint-disable-next-line no-unused-vars -- required for `.length` + Internal = function Promise(executor) { + setInternalState(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: new queue(), + rejection: false, + state: PENDING, + value: undefined + }); + }; + + // `Promise.prototype.then` method + // https://tc39.es/ecma262/#sec-promise.prototype.then + Internal.prototype = defineBuiltIn(PromisePrototype, 'then', function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); + state.parent = true; + reaction.ok = isCallable(onFulfilled) ? onFulfilled : true; + reaction.fail = isCallable(onRejected) && onRejected; + reaction.domain = engineIsNode ? process$1.domain : undefined; + if (state.state == PENDING) state.reactions.add(reaction); + else microtask(function () { + callReaction(reaction, state); + }); + return reaction.promise; + }); + + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalPromiseState(promise); + this.promise = promise; + this.resolve = bind$1(internalResolve, state); + this.reject = bind$1(internalReject, state); + }; + + newPromiseCapability$1.f = newPromiseCapability = function (C) { + return C === PromiseConstructor || C === PromiseWrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; + + if (isCallable(promiseNativeConstructor) && NativePromisePrototype$1 !== Object.prototype) { + nativeThen = NativePromisePrototype$1.then; + + if (!NATIVE_PROMISE_SUBCLASSING) { + // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs + defineBuiltIn(NativePromisePrototype$1, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + functionCall(nativeThen, that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, { unsafe: true }); + } + + // make `.constructor === Promise` work for native promise-based APIs + try { + delete NativePromisePrototype$1.constructor; + } catch (error) { /* empty */ } + + // make `instanceof Promise` work for native promise-based APIs + if (objectSetPrototypeOf) { + objectSetPrototypeOf(NativePromisePrototype$1, PromisePrototype); + } + } +} + +_export({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR$4 }, { + Promise: PromiseConstructor +}); + +setToStringTag(PromiseConstructor, PROMISE, false); +setSpecies(PROMISE); + +var iterators = {}; + +var ITERATOR$2 = wellKnownSymbol('iterator'); +var ArrayPrototype = Array.prototype; + +// check on default Array iterator +var isArrayIteratorMethod = function (it) { + return it !== undefined && (iterators.Array === it || ArrayPrototype[ITERATOR$2] === it); +}; + +var ITERATOR$1 = wellKnownSymbol('iterator'); + +var getIteratorMethod = function (it) { + if (it != undefined) return getMethod(it, ITERATOR$1) + || getMethod(it, '@@iterator') + || iterators[classof(it)]; +}; + +var $TypeError$1 = TypeError; + +var getIterator = function (argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) return anObject(functionCall(iteratorMethod, argument)); + throw $TypeError$1(tryToString(argument) + ' is not iterable'); +}; + +var iteratorClose = function (iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, 'return'); + if (!innerResult) { + if (kind === 'throw') throw value; + return value; + } + innerResult = functionCall(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === 'throw') throw value; + if (innerError) throw innerResult; + anObject(innerResult); + return value; +}; + +var $TypeError = TypeError; + +var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; +}; + +var ResultPrototype = Result.prototype; + +var iterate = function (iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_RECORD = !!(options && options.IS_RECORD); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = functionBindContext(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + + var stop = function (condition) { + if (iterator) iteratorClose(iterator, 'normal', condition); + return new Result(true, condition); + }; + + var callFn = function (value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } return INTERRUPTED ? fn(value, stop) : fn(value); + }; + + if (IS_RECORD) { + iterator = iterable.iterator; + } else if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) throw $TypeError(tryToString(iterable) + ' is not iterable'); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && objectIsPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + + next = IS_RECORD ? iterable.next : iterator.next; + while (!(step = functionCall(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } + if (typeof result == 'object' && result && objectIsPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); +}; + +var ITERATOR = wellKnownSymbol('iterator'); +var SAFE_CLOSING = false; + +try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line es-x/no-array-from, no-throw-literal -- required for testing + Array.from(iteratorWithReturn, function () { throw 2; }); +} catch (error) { /* empty */ } + +var checkCorrectnessOfIteration = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; +}; + +var FORCED_PROMISE_CONSTRUCTOR$3 = promiseConstructorDetection.CONSTRUCTOR; + +var promiseStaticsIncorrectIteration = FORCED_PROMISE_CONSTRUCTOR$3 || !checkCorrectnessOfIteration(function (iterable) { + promiseNativeConstructor.all(iterable).then(undefined, function () { /* empty */ }); +}); + +// `Promise.all` method +// https://tc39.es/ecma262/#sec-promise.all +_export({ target: 'Promise', stat: true, forced: promiseStaticsIncorrectIteration }, { + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability$1.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + functionCall($promiseResolve, C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + +var FORCED_PROMISE_CONSTRUCTOR$2 = promiseConstructorDetection.CONSTRUCTOR; + + + + + +var NativePromisePrototype = promiseNativeConstructor && promiseNativeConstructor.prototype; + +// `Promise.prototype.catch` method +// https://tc39.es/ecma262/#sec-promise.prototype.catch +_export({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR$2, real: true }, { + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } +}); + +// makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then` +if (isCallable(promiseNativeConstructor)) { + var method = getBuiltIn('Promise').prototype['catch']; + if (NativePromisePrototype['catch'] !== method) { + defineBuiltIn(NativePromisePrototype, 'catch', method, { unsafe: true }); + } +} + +// `Promise.race` method +// https://tc39.es/ecma262/#sec-promise.race +_export({ target: 'Promise', stat: true, forced: promiseStaticsIncorrectIteration }, { + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability$1.f(C); + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + iterate(iterable, function (promise) { + functionCall($promiseResolve, C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + +var FORCED_PROMISE_CONSTRUCTOR$1 = promiseConstructorDetection.CONSTRUCTOR; + +// `Promise.reject` method +// https://tc39.es/ecma262/#sec-promise.reject +_export({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR$1 }, { + reject: function reject(r) { + var capability = newPromiseCapability$1.f(this); + functionCall(capability.reject, undefined, r); + return capability.promise; + } +}); + +var promiseResolve = function (C, x) { + anObject(C); + if (isObject$2(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability$1.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; +}; + +var FORCED_PROMISE_CONSTRUCTOR = promiseConstructorDetection.CONSTRUCTOR; + + +getBuiltIn('Promise'); + +// `Promise.resolve` method +// https://tc39.es/ecma262/#sec-promise.resolve +_export({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, { + resolve: function resolve(x) { + return promiseResolve(this, x); + } +}); + +// eslint-disable-next-line es-x/no-object-assign -- safe +var $assign = Object.assign; +// eslint-disable-next-line es-x/no-object-defineproperty -- required for testing +var defineProperty$1 = Object.defineProperty; +var concat = functionUncurryThis([].concat); + +// `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +var objectAssign = !$assign || fails(function () { + // should have correct order of operations (Edge bug) + if (descriptors$1 && $assign({ b: 1 }, $assign(defineProperty$1({}, 'a', { + enumerable: true, + get: function () { + defineProperty$1(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) + var A = {}; + var B = {}; + // eslint-disable-next-line es-x/no-symbol -- safe + var symbol = Symbol(); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { B[chr] = chr; }); + return $assign({}, A)[symbol] != 7 || objectKeys$1($assign({}, B)).join('') != alphabet; +}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length` + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = objectGetOwnPropertySymbols.f; + var propertyIsEnumerable = objectPropertyIsEnumerable.f; + while (argumentsLength > index) { + var S = indexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? concat(objectKeys$1(S), getOwnPropertySymbols(S)) : objectKeys$1(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!descriptors$1 || functionCall(propertyIsEnumerable, S, key)) T[key] = S[key]; + } + } return T; +} : $assign; + +// `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +// eslint-disable-next-line es-x/no-object-assign -- required for testing +_export({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== objectAssign }, { + assign: objectAssign +}); + +var FUNCTION_NAME_EXISTS = functionName.EXISTS; + +var defineProperty = objectDefineProperty.f; + +var FunctionPrototype = Function.prototype; +var functionToString = functionUncurryThis(FunctionPrototype.toString); +var nameRE = /function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/; +var regExpExec = functionUncurryThis(nameRE.exec); +var NAME = 'name'; + +// Function instances `.name` property +// https://tc39.es/ecma262/#sec-function-instances-name +if (descriptors$1 && !FUNCTION_NAME_EXISTS) { + defineProperty(FunctionPrototype, NAME, { + configurable: true, + get: function () { + try { + return regExpExec(nameRE, functionToString(this))[1]; + } catch (error) { + return ''; + } + } + }); +} + +// iterable DOM collections +// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods +var domIterables = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 +}; + +// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList` + + +var classList = documentCreateElement('span').classList; +var DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype; + +var domTokenListPrototype = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype; + +var push = functionUncurryThis([].push); + +// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation +var createMethod = function (TYPE) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var IS_FILTER_REJECT = TYPE == 7; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = indexedObject(O); + var boundFunction = functionBindContext(callbackfn, that); + var length = lengthOfArrayLike(self); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined; + var value, result; + for (;length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: return true; // some + case 5: return value; // find + case 6: return index; // findIndex + case 2: push(target, value); // filter + } else switch (TYPE) { + case 4: return false; // every + case 7: push(target, value); // filterReject + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; +}; + +var arrayIteration = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod(7) +}; + +var $forEach = arrayIteration.forEach; + + +var STRICT_METHOD = arrayMethodIsStrict('forEach'); + +// `Array.prototype.forEach` method implementation +// https://tc39.es/ecma262/#sec-array.prototype.foreach +var arrayForEach = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) { + return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); +// eslint-disable-next-line es-x/no-array-prototype-foreach -- safe +} : [].forEach; + +var handlePrototype = function (CollectionPrototype) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype && CollectionPrototype.forEach !== arrayForEach) try { + createNonEnumerableProperty(CollectionPrototype, 'forEach', arrayForEach); + } catch (error) { + CollectionPrototype.forEach = arrayForEach; + } +}; + +for (var COLLECTION_NAME in domIterables) { + if (domIterables[COLLECTION_NAME]) { + handlePrototype(global_1[COLLECTION_NAME] && global_1[COLLECTION_NAME].prototype); + } +} + +handlePrototype(domTokenListPrototype); + +var bind = function bind(fn, thisArg) { + return function wrap() { + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + return fn.apply(thisArg, args); + }; +}; + +// utils is a library of generic helper functions non-specific to axios + +var toString = Object.prototype.toString; + +// eslint-disable-next-line func-names +var kindOf = (function(cache) { + // eslint-disable-next-line func-names + return function(thing) { + var str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); + }; +})(Object.create(null)); + +function kindOfTest(type) { + type = type.toLowerCase(); + return function isKindOf(thing) { + return kindOf(thing) === type; + }; +} + +/** + * Array with axios supported protocols. + */ +var supportedProtocols = [ 'http:', 'https:', 'file:' ]; + +/** + * Returns URL protocol passed as param if is not undefined or null, + * otherwise just returns 'http:' + * + * @param {String} protocol The String value of URL protocol + * @returns {String} Protocol if the value is not undefined or null + */ +function getProtocol(protocol) { + return protocol || 'http:'; +} + +/** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Array, otherwise false + */ +function isArray$1(val) { + return Array.isArray(val); +} + +/** + * Determine if a value is undefined + * + * @param {Object} val The value to test + * @returns {boolean} True if the value is undefined, otherwise false + */ +function isUndefined(val) { + return typeof val === 'undefined'; +} + +/** + * Determine if a value is a Buffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) + && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +var isArrayBuffer = kindOfTest('ArrayBuffer'); + + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + var result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a String, otherwise false + */ +function isString$1(val) { + return typeof val === 'string'; +} + +/** + * Determine if a value is a Number + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Number, otherwise false + */ +function isNumber(val) { + return typeof val === 'number'; +} + +/** + * Determine if a value is an Object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Object, otherwise false + */ +function isObject$1(val) { + return val !== null && typeof val === 'object'; +} + +/** + * Determine if a value is a plain Object + * + * @param {Object} val The value to test + * @return {boolean} True if value is a plain Object, otherwise false + */ +function isPlainObject(val) { + if (kindOf(val) !== 'object') { + return false; + } + + var prototype = Object.getPrototypeOf(val); + return prototype === null || prototype === Object.prototype; +} + +/** + * Determine if a value is a Date + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a Date, otherwise false + */ +var isDate = kindOfTest('Date'); + +/** + * Determine if a value is a File + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ +var isFile = kindOfTest('File'); + +/** + * Determine if a value is a Blob + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a Blob, otherwise false + */ +var isBlob = kindOfTest('Blob'); + +/** + * Determine if a value is a FileList + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ +var isFileList = kindOfTest('FileList'); + +/** + * Determine if a value is a Function + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +function isFunction(val) { + return toString.call(val) === '[object Function]'; +} + +/** + * Determine if a value is a Stream + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Stream, otherwise false + */ +function isStream(val) { + return isObject$1(val) && isFunction(val.pipe); +} + +/** + * Determine if a value is a FormData + * + * @param {Object} thing The value to test + * @returns {boolean} True if value is an FormData, otherwise false + */ +function isFormData(thing) { + var pattern = '[object FormData]'; + return thing && ( + (typeof FormData === 'function' && thing instanceof FormData) || + toString.call(thing) === pattern || + (isFunction(thing.toString) && thing.toString() === pattern) + ); +} + +/** + * Determine if a value is a URLSearchParams object + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +var isURLSearchParams = kindOfTest('URLSearchParams'); + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * @returns {String} The String freed of excess whitespace + */ +function trim(str) { + return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); +} + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + */ +function isStandardBrowserEnv() { + if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || + navigator.product === 'NativeScript' || + navigator.product === 'NS')) { + return false; + } + return ( + typeof window !== 'undefined' && + typeof document !== 'undefined' + ); +} + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + */ +function forEach(obj, fn) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + // Force an array if not already something iterable + if (typeof obj !== 'object') { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray$1(obj)) { + // Iterate over array values + for (var i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + fn.call(null, obj[key], key, obj); + } + } + } +} + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + var result = {}; + function assignValue(val, key) { + if (isPlainObject(result[key]) && isPlainObject(val)) { + result[key] = merge(result[key], val); + } else if (isPlainObject(val)) { + result[key] = merge({}, val); + } else if (isArray$1(val)) { + result[key] = val.slice(); + } else { + result[key] = val; + } + } + + for (var i = 0, l = arguments.length; i < l; i++) { + forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * @return {Object} The resulting value of object a + */ +function extend(a, b, thisArg) { + forEach(b, function assignValue(val, key) { + if (thisArg && typeof val === 'function') { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }); + return a; +} + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * @return {string} content value without BOM + */ +function stripBOM(content) { + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; +} + +/** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + */ + +function inherits(constructor, superConstructor, props, descriptors) { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); + constructor.prototype.constructor = constructor; + props && Object.assign(constructor.prototype, props); +} + +/** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function} [filter] + * @returns {Object} + */ + +function toFlatObject(sourceObj, destObj, filter) { + var props; + var i; + var prop; + var merged = {}; + + destObj = destObj || {}; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if (!merged[prop]) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = Object.getPrototypeOf(sourceObj); + } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); + + return destObj; +} + +/* + * determines whether a string ends with the characters of a specified string + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * @returns {boolean} + */ +function endsWith(str, searchString, position) { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + var lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; +} + + +/** + * Returns new array from array like object + * @param {*} [thing] + * @returns {Array} + */ +function toArray(thing) { + if (!thing) return null; + var i = thing.length; + if (isUndefined(i)) return null; + var arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; +} + +// eslint-disable-next-line func-names +var isTypedArray = (function(TypedArray) { + // eslint-disable-next-line func-names + return function(thing) { + return TypedArray && thing instanceof TypedArray; + }; +})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array)); + +var utils = { + supportedProtocols: supportedProtocols, + getProtocol: getProtocol, + isArray: isArray$1, + isArrayBuffer: isArrayBuffer, + isBuffer: isBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString$1, + isNumber: isNumber, + isObject: isObject$1, + isPlainObject: isPlainObject, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isFunction: isFunction, + isStream: isStream, + isURLSearchParams: isURLSearchParams, + isStandardBrowserEnv: isStandardBrowserEnv, + forEach: forEach, + merge: merge, + extend: extend, + trim: trim, + stripBOM: stripBOM, + inherits: inherits, + toFlatObject: toFlatObject, + kindOf: kindOf, + kindOfTest: kindOfTest, + endsWith: endsWith, + toArray: toArray, + isTypedArray: isTypedArray, + isFileList: isFileList +}; + +function encode$1(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @returns {string} The formatted url + */ +var buildURL = function buildURL(url, params, paramsSerializer) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + var serializedParams; + if (paramsSerializer) { + serializedParams = paramsSerializer(params); + } else if (utils.isURLSearchParams(params)) { + serializedParams = params.toString(); + } else { + var parts = []; + + utils.forEach(params, function serialize(val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + + if (utils.isArray(val)) { + key = key + '[]'; + } else { + val = [val]; + } + + utils.forEach(val, function parseValue(v) { + if (utils.isDate(v)) { + v = v.toISOString(); + } else if (utils.isObject(v)) { + v = JSON.stringify(v); + } + parts.push(encode$1(key) + '=' + encode$1(v)); + }); + }); + + serializedParams = parts.join('&'); + } + + if (serializedParams) { + var hashmarkIndex = url.indexOf('#'); + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +}; + +function InterceptorManager() { + this.handlers = []; +} + +/** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ +InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; +}; + +/** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + */ +InterceptorManager.prototype.eject = function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } +}; + +/** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + */ +InterceptorManager.prototype.forEach = function forEach(fn) { + utils.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); +}; + +var InterceptorManager_1 = InterceptorManager; + +var normalizeHeaderName = function normalizeHeaderName(headers, normalizedName) { + utils.forEach(headers, function processHeader(value, name) { + if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { + headers[normalizedName] = value; + delete headers[name]; + } + }); +}; + +/** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * @returns {Error} The created error. + */ +function AxiosError(message, code, config, request, response) { + Error.call(this); + this.message = message; + this.name = 'AxiosError'; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + response && (this.response = response); +} + +utils.inherits(AxiosError, Error, { + toJSON: function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: this.config, + code: this.code, + status: this.response && this.response.status ? this.response.status : null + }; + } +}); + +var prototype = AxiosError.prototype; +var descriptors = {}; + +[ + 'ERR_BAD_OPTION_VALUE', + 'ERR_BAD_OPTION', + 'ECONNABORTED', + 'ETIMEDOUT', + 'ERR_NETWORK', + 'ERR_FR_TOO_MANY_REDIRECTS', + 'ERR_DEPRECATED', + 'ERR_BAD_RESPONSE', + 'ERR_BAD_REQUEST', + 'ERR_CANCELED' +// eslint-disable-next-line func-names +].forEach(function(code) { + descriptors[code] = {value: code}; +}); + +Object.defineProperties(AxiosError, descriptors); +Object.defineProperty(prototype, 'isAxiosError', {value: true}); + +// eslint-disable-next-line func-names +AxiosError.from = function(error, code, config, request, response, customProps) { + var axiosError = Object.create(prototype); + + utils.toFlatObject(error, axiosError, function filter(obj) { + return obj !== Error.prototype; + }); + + AxiosError.call(axiosError, error.message, code, config, request, response); + + axiosError.name = error.name; + + customProps && Object.assign(axiosError, customProps); + + return axiosError; +}; + +var AxiosError_1 = AxiosError; + +var transitional = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false +}; +transitional.silentJSONParsing; +transitional.forcedJSONParsing; +transitional.clarifyTimeoutError; + +/** + * Convert a data object to FormData + * @param {Object} obj + * @param {?Object} [formData] + * @returns {Object} + **/ + +function toFormData(obj, formData) { + // eslint-disable-next-line no-param-reassign + formData = formData || new FormData(); + + var stack = []; + + function convertValue(value) { + if (value === null) return ''; + + if (utils.isDate(value)) { + return value.toISOString(); + } + + if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) { + return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + function build(data, parentKey) { + if (utils.isPlainObject(data) || utils.isArray(data)) { + if (stack.indexOf(data) !== -1) { + throw Error('Circular reference detected in ' + parentKey); + } + + stack.push(data); + + utils.forEach(data, function each(value, key) { + if (utils.isUndefined(value)) return; + var fullKey = parentKey ? parentKey + '.' + key : key; + var arr; + + if (value && !parentKey && typeof value === 'object') { + if (utils.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) { + // eslint-disable-next-line func-names + arr.forEach(function(el) { + !utils.isUndefined(el) && formData.append(fullKey, convertValue(el)); + }); + return; + } + } + + build(value, fullKey); + }); + + stack.pop(); + } else { + formData.append(parentKey, convertValue(data)); + } + } + + build(obj); + + return formData; +} + +var toFormData_1 = toFormData; + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + */ +var settle = function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError_1( + 'Request failed with status code ' + response.status, + [AxiosError_1.ERR_BAD_REQUEST, AxiosError_1.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } +}; + +var cookies = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs support document.cookie + (function standardBrowserEnv() { + return { + write: function write(name, value, expires, path, domain, secure) { + var cookie = []; + cookie.push(name + '=' + encodeURIComponent(value)); + + if (utils.isNumber(expires)) { + cookie.push('expires=' + new Date(expires).toGMTString()); + } + + if (utils.isString(path)) { + cookie.push('path=' + path); + } + + if (utils.isString(domain)) { + cookie.push('domain=' + domain); + } + + if (secure === true) { + cookie.push('secure'); + } + + document.cookie = cookie.join('; '); + }, + + read: function read(name) { + var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove: function remove(name) { + this.write(name, '', Date.now() - 86400000); + } + }; + })() : + + // Non standard browser env (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return { + write: function write() {}, + read: function read() { return null; }, + remove: function remove() {} + }; + })() +); + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +var isAbsoluteURL = function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +}; + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * @returns {string} The combined URL + */ +var combineURLs = function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +}; + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * @returns {string} The combined full path + */ +var buildFullPath = function buildFullPath(baseURL, requestedURL) { + if (baseURL && !isAbsoluteURL(requestedURL)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +}; + +// Headers whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +var ignoreDuplicateOf = [ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]; + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} headers Headers needing to be parsed + * @returns {Object} Headers parsed into an object + */ +var parseHeaders = function parseHeaders(headers) { + var parsed = {}; + var key; + var val; + var i; + + if (!headers) { return parsed; } + + utils.forEach(headers.split('\n'), function parser(line) { + i = line.indexOf(':'); + key = utils.trim(line.substr(0, i)).toLowerCase(); + val = utils.trim(line.substr(i + 1)); + + if (key) { + if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { + return; + } + if (key === 'set-cookie') { + parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + } + }); + + return parsed; +}; + +var isURLSameOrigin = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs have full support of the APIs needed to test + // whether the request URL is of the same origin as current location. + (function standardBrowserEnv() { + var msie = /(msie|trident)/i.test(navigator.userAgent); + var urlParsingNode = document.createElement('a'); + var originURL; + + /** + * Parse a URL to discover it's components + * + * @param {String} url The URL to be parsed + * @returns {Object} + */ + function resolveURL(url) { + var href = url; + + if (msie) { + // IE needs attribute set twice to normalize properties + urlParsingNode.setAttribute('href', href); + href = urlParsingNode.href; + } + + urlParsingNode.setAttribute('href', href); + + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', + host: urlParsingNode.host, + search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', + hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', + hostname: urlParsingNode.hostname, + port: urlParsingNode.port, + pathname: (urlParsingNode.pathname.charAt(0) === '/') ? + urlParsingNode.pathname : + '/' + urlParsingNode.pathname + }; + } + + originURL = resolveURL(window.location.href); + + /** + * Determine if a URL shares the same origin as the current location + * + * @param {String} requestURL The URL to test + * @returns {boolean} True if URL shares the same origin, otherwise false + */ + return function isURLSameOrigin(requestURL) { + var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; + return (parsed.protocol === originURL.protocol && + parsed.host === originURL.host); + }; + })() : + + // Non standard browser envs (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return function isURLSameOrigin() { + return true; + }; + })() +); + +/*! https://mths.be/punycode v1.4.1 by @mathias */ + + +/** Highest positive signed 32-bit float value */ +var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +var base = 36; +var tMin = 1; +var tMax = 26; +var skew = 38; +var damp = 700; +var initialBias = 72; +var initialN = 128; // 0x80 +var delimiter = '-'; // '\x2D' +var regexNonASCII = /[^\x20-\x7E]/; // unprintable ASCII chars + non-ASCII chars +var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +var errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +var baseMinusTMin = base - tMin; +var floor = Math.floor; +var stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map$1(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ +function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map$1(labels, fn).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +} + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for ( /* no initialization */ ; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +} + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; + + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); + + // Cache the length + inputLength = input.length; + + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; + + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + handledCPCount = basicLength = output.length; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */ ; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); +} + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) ? + 'xn--' + encode(string) : + string; + }); +} + +function isNull(arg) { + return arg === null; +} + +function isNullOrUndefined(arg) { + return arg == null; +} + +function isString(arg) { + return typeof arg === 'string'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +// Copyright Joyent, Inc. and other Node 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. + + +// If obj.hasOwnProperty has been overridden, then calling +// obj.hasOwnProperty(prop) will break. +// See: https://github.com/joyent/node/issues/1707 +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; +function stringifyPrimitive(v) { + switch (typeof v) { + case 'string': + return v; + + case 'boolean': + return v ? 'true' : 'false'; + + case 'number': + return isFinite(v) ? v : ''; + + default: + return ''; + } +} + +function stringify (obj, sep, eq, name) { + sep = sep || '&'; + eq = eq || '='; + if (obj === null) { + obj = undefined; + } + + if (typeof obj === 'object') { + return map(objectKeys(obj), function(k) { + var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; + if (isArray(obj[k])) { + return map(obj[k], function(v) { + return ks + encodeURIComponent(stringifyPrimitive(v)); + }).join(sep); + } else { + return ks + encodeURIComponent(stringifyPrimitive(obj[k])); + } + }).join(sep); + + } + + if (!name) return ''; + return encodeURIComponent(stringifyPrimitive(name)) + eq + + encodeURIComponent(stringifyPrimitive(obj)); +} +function map (xs, f) { + if (xs.map) return xs.map(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + res.push(f(xs[i], i)); + } + return res; +} + +var objectKeys = Object.keys || function (obj) { + var res = []; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); + } + return res; +}; + +function parse$1(qs, sep, eq, options) { + sep = sep || '&'; + eq = eq || '='; + var obj = {}; + + if (typeof qs !== 'string' || qs.length === 0) { + return obj; + } + + var regexp = /\+/g; + qs = qs.split(sep); + + var maxKeys = 1000; + if (options && typeof options.maxKeys === 'number') { + maxKeys = options.maxKeys; + } + + var len = qs.length; + // maxKeys <= 0 means that we should not limit keys count + if (maxKeys > 0 && len > maxKeys) { + len = maxKeys; + } + + for (var i = 0; i < len; ++i) { + var x = qs[i].replace(regexp, '%20'), + idx = x.indexOf(eq), + kstr, vstr, k, v; + + if (idx >= 0) { + kstr = x.substr(0, idx); + vstr = x.substr(idx + 1); + } else { + kstr = x; + vstr = ''; + } + + k = decodeURIComponent(kstr); + v = decodeURIComponent(vstr); + + if (!hasOwnProperty(obj, k)) { + obj[k] = v; + } else if (isArray(obj[k])) { + obj[k].push(v); + } else { + obj[k] = [obj[k], v]; + } + } + + return obj; +} + +// Copyright Joyent, Inc. and other Node contributors. +var url = { + parse: urlParse, + resolve: urlResolve, + resolveObject: urlResolveObject, + fileURLToPath: urlFileURLToPath, + format: urlFormat, + Url: Url +}; +function Url() { + this.protocol = null; + this.slashes = null; + this.auth = null; + this.host = null; + this.port = null; + this.hostname = null; + this.hash = null; + this.search = null; + this.query = null; + this.pathname = null; + this.path = null; + this.href = null; +} + +// Reference: RFC 3986, RFC 1808, RFC 2396 + +// define these here so at least they only have to be +// compiled once on the first module load. +var protocolPattern = /^([a-z0-9.+-]+:)/i, + portPattern = /:[0-9]*$/, + + // Special case for a simple path URL + simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, + + // RFC 2396: characters reserved for delimiting URLs. + // We actually just auto-escape these. + delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], + + // RFC 2396: characters not allowed for various reasons. + unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), + + // Allowed by RFCs, but cause of XSS attacks. Always escape these. + autoEscape = ['\''].concat(unwise), + // Characters that are never ever allowed in a hostname. + // Note that any invalid chars are also handled, but these + // are the ones that are *expected* to be seen, so we fast-path + // them. + nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), + hostEndingChars = ['/', '?', '#'], + hostnameMaxLen = 255, + hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, + hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, + // protocols that can allow "unsafe" and "unwise" chars. + unsafeProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that never have a hostname. + hostlessProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that always contain a // bit. + slashedProtocol = { + 'http': true, + 'https': true, + 'ftp': true, + 'gopher': true, + 'file': true, + 'http:': true, + 'https:': true, + 'ftp:': true, + 'gopher:': true, + 'file:': true + }; + +function urlParse(url, parseQueryString, slashesDenoteHost) { + if (url && isObject(url) && url instanceof Url) return url; + + var u = new Url; + u.parse(url, parseQueryString, slashesDenoteHost); + return u; +} +Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { + return parse(this, url, parseQueryString, slashesDenoteHost); +}; + +function parse(self, url, parseQueryString, slashesDenoteHost) { + if (!isString(url)) { + throw new TypeError('Parameter \'url\' must be a string, not ' + typeof url); + } + + // Copy chrome, IE, opera backslash-handling behavior. + // Back slashes before the query string get converted to forward slashes + // See: https://code.google.com/p/chromium/issues/detail?id=25916 + var queryIndex = url.indexOf('?'), + splitter = + (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#', + uSplit = url.split(splitter), + slashRegex = /\\/g; + uSplit[0] = uSplit[0].replace(slashRegex, '/'); + url = uSplit.join(splitter); + + var rest = url; + + // trim before proceeding. + // This is to support parse stuff like " http://foo.com \n" + rest = rest.trim(); + + if (!slashesDenoteHost && url.split('#').length === 1) { + // Try fast path regexp + var simplePath = simplePathPattern.exec(rest); + if (simplePath) { + self.path = rest; + self.href = rest; + self.pathname = simplePath[1]; + if (simplePath[2]) { + self.search = simplePath[2]; + if (parseQueryString) { + self.query = parse$1(self.search.substr(1)); + } else { + self.query = self.search.substr(1); + } + } else if (parseQueryString) { + self.search = ''; + self.query = {}; + } + return self; + } + } + + var proto = protocolPattern.exec(rest); + if (proto) { + proto = proto[0]; + var lowerProto = proto.toLowerCase(); + self.protocol = lowerProto; + rest = rest.substr(proto.length); + } + + // figure out if it's got a host + // user@server is *always* interpreted as a hostname, and url + // resolution will treat //foo/bar as host=foo,path=bar because that's + // how the browser resolves relative URLs. + if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { + var slashes = rest.substr(0, 2) === '//'; + if (slashes && !(proto && hostlessProtocol[proto])) { + rest = rest.substr(2); + self.slashes = true; + } + } + var i, hec, l, p; + if (!hostlessProtocol[proto] && + (slashes || (proto && !slashedProtocol[proto]))) { + + // there's a hostname. + // the first instance of /, ?, ;, or # ends the host. + // + // If there is an @ in the hostname, then non-host chars *are* allowed + // to the left of the last @ sign, unless some host-ending character + // comes *before* the @-sign. + // URLs are obnoxious. + // + // ex: + // http://a@b@c/ => user:a@b host:c + // http://a@b?@c => user:a host:c path:/?@c + + // v0.12 TODO(isaacs): This is not quite how Chrome does things. + // Review our test case against browsers more comprehensively. + + // find the first instance of any hostEndingChars + var hostEnd = -1; + for (i = 0; i < hostEndingChars.length; i++) { + hec = rest.indexOf(hostEndingChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + + // at this point, either we have an explicit point where the + // auth portion cannot go past, or the last @ char is the decider. + var auth, atSign; + if (hostEnd === -1) { + // atSign can be anywhere. + atSign = rest.lastIndexOf('@'); + } else { + // atSign must be in auth portion. + // http://a@b/c@d => host:b auth:a path:/c@d + atSign = rest.lastIndexOf('@', hostEnd); + } + + // Now we have a portion which is definitely the auth. + // Pull that off. + if (atSign !== -1) { + auth = rest.slice(0, atSign); + rest = rest.slice(atSign + 1); + self.auth = decodeURIComponent(auth); + } + + // the host is the remaining to the left of the first non-host char + hostEnd = -1; + for (i = 0; i < nonHostChars.length; i++) { + hec = rest.indexOf(nonHostChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + // if we still have not hit it, then the entire thing is a host. + if (hostEnd === -1) + hostEnd = rest.length; + + self.host = rest.slice(0, hostEnd); + rest = rest.slice(hostEnd); + + // pull out port. + parseHost(self); + + // we've indicated that there is a hostname, + // so even if it's empty, it has to be present. + self.hostname = self.hostname || ''; + + // if hostname begins with [ and ends with ] + // assume that it's an IPv6 address. + var ipv6Hostname = self.hostname[0] === '[' && + self.hostname[self.hostname.length - 1] === ']'; + + // validate a little. + if (!ipv6Hostname) { + var hostparts = self.hostname.split(/\./); + for (i = 0, l = hostparts.length; i < l; i++) { + var part = hostparts[i]; + if (!part) continue; + if (!part.match(hostnamePartPattern)) { + var newpart = ''; + for (var j = 0, k = part.length; j < k; j++) { + if (part.charCodeAt(j) > 127) { + // we replace non-ASCII char with a temporary placeholder + // we need this to make sure size of hostname is not + // broken by replacing non-ASCII by nothing + newpart += 'x'; + } else { + newpart += part[j]; + } + } + // we test again with ASCII char only + if (!newpart.match(hostnamePartPattern)) { + var validParts = hostparts.slice(0, i); + var notHost = hostparts.slice(i + 1); + var bit = part.match(hostnamePartStart); + if (bit) { + validParts.push(bit[1]); + notHost.unshift(bit[2]); + } + if (notHost.length) { + rest = '/' + notHost.join('.') + rest; + } + self.hostname = validParts.join('.'); + break; + } + } + } + } + + if (self.hostname.length > hostnameMaxLen) { + self.hostname = ''; + } else { + // hostnames are always lower case. + self.hostname = self.hostname.toLowerCase(); + } + + if (!ipv6Hostname) { + // IDNA Support: Returns a punycoded representation of "domain". + // It only converts parts of the domain name that + // have non-ASCII characters, i.e. it doesn't matter if + // you call it with a domain that already is ASCII-only. + self.hostname = toASCII(self.hostname); + } + + p = self.port ? ':' + self.port : ''; + var h = self.hostname || ''; + self.host = h + p; + self.href += self.host; + + // strip [ and ] from the hostname + // the host field still retains them, though + if (ipv6Hostname) { + self.hostname = self.hostname.substr(1, self.hostname.length - 2); + if (rest[0] !== '/') { + rest = '/' + rest; + } + } + } + + // now rest is set to the post-host stuff. + // chop off any delim chars. + if (!unsafeProtocol[lowerProto]) { + + // First, make 100% sure that any "autoEscape" chars get + // escaped, even if encodeURIComponent doesn't think they + // need to be. + for (i = 0, l = autoEscape.length; i < l; i++) { + var ae = autoEscape[i]; + if (rest.indexOf(ae) === -1) + continue; + var esc = encodeURIComponent(ae); + if (esc === ae) { + esc = escape(ae); + } + rest = rest.split(ae).join(esc); + } + } + + + // chop off from the tail first. + var hash = rest.indexOf('#'); + if (hash !== -1) { + // got a fragment string. + self.hash = rest.substr(hash); + rest = rest.slice(0, hash); + } + var qm = rest.indexOf('?'); + if (qm !== -1) { + self.search = rest.substr(qm); + self.query = rest.substr(qm + 1); + if (parseQueryString) { + self.query = parse$1(self.query); + } + rest = rest.slice(0, qm); + } else if (parseQueryString) { + // no query string, but parseQueryString still requested + self.search = ''; + self.query = {}; + } + if (rest) self.pathname = rest; + if (slashedProtocol[lowerProto] && + self.hostname && !self.pathname) { + self.pathname = '/'; + } + + //to support http.request + if (self.pathname || self.search) { + p = self.pathname || ''; + var s = self.search || ''; + self.path = p + s; + } + + // finally, reconstruct the href based on what has been validated. + self.href = format(self); + return self; +} + +function urlFileURLToPath(path) { + if (typeof path === 'string') + path = new Url().parse(path); + else if (!(path instanceof Url)) + throw new TypeError('The "path" argument must be of type string or an instance of URL. Received type ' + (typeof path) + String(path)); + if (path.protocol !== 'file:') + throw new TypeError('The URL must be of scheme file'); + return getPathFromURLPosix(path); +} + +function getPathFromURLPosix(url) { + const pathname = url.pathname; + for (let n = 0; n < pathname.length; n++) { + if (pathname[n] === '%') { + const third = pathname.codePointAt(n + 2) | 0x20; + if (pathname[n + 1] === '2' && third === 102) { + throw new TypeError( + 'must not include encoded / characters' + ); + } + } + } + return decodeURIComponent(pathname); +} + +// format a parsed object into a url string +function urlFormat(obj) { + // ensure it's an object, and not a string url. + // If it's an obj, this is a no-op. + // this way, you can call url_format() on strings + // to clean up potentially wonky urls. + if (isString(obj)) obj = parse({}, obj); + return format(obj); +} + +function format(self) { + var auth = self.auth || ''; + if (auth) { + auth = encodeURIComponent(auth); + auth = auth.replace(/%3A/i, ':'); + auth += '@'; + } + + var protocol = self.protocol || '', + pathname = self.pathname || '', + hash = self.hash || '', + host = false, + query = ''; + + if (self.host) { + host = auth + self.host; + } else if (self.hostname) { + host = auth + (self.hostname.indexOf(':') === -1 ? + self.hostname : + '[' + this.hostname + ']'); + if (self.port) { + host += ':' + self.port; + } + } + + if (self.query && + isObject(self.query) && + Object.keys(self.query).length) { + query = stringify(self.query); + } + + var search = self.search || (query && ('?' + query)) || ''; + + if (protocol && protocol.substr(-1) !== ':') protocol += ':'; + + // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. + // unless they had them to begin with. + if (self.slashes || + (!protocol || slashedProtocol[protocol]) && host !== false) { + host = '//' + (host || ''); + if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; + } else if (!host) { + host = ''; + } + + if (hash && hash.charAt(0) !== '#') hash = '#' + hash; + if (search && search.charAt(0) !== '?') search = '?' + search; + + pathname = pathname.replace(/[?#]/g, function(match) { + return encodeURIComponent(match); + }); + search = search.replace('#', '%23'); + + return protocol + host + pathname + search + hash; +} + +Url.prototype.format = function() { + return format(this); +}; + +function urlResolve(source, relative) { + return urlParse(source, false, true).resolve(relative); +} + +Url.prototype.resolve = function(relative) { + return this.resolveObject(urlParse(relative, false, true)).format(); +}; + +function urlResolveObject(source, relative) { + if (!source) return relative; + return urlParse(source, false, true).resolveObject(relative); +} + +Url.prototype.resolveObject = function(relative) { + if (isString(relative)) { + var rel = new Url(); + rel.parse(relative, false, true); + relative = rel; + } + + var result = new Url(); + var tkeys = Object.keys(this); + for (var tk = 0; tk < tkeys.length; tk++) { + var tkey = tkeys[tk]; + result[tkey] = this[tkey]; + } + + // hash is always overridden, no matter what. + // even href="" will remove it. + result.hash = relative.hash; + + // if the relative url is empty, then there's nothing left to do here. + if (relative.href === '') { + result.href = result.format(); + return result; + } + + // hrefs like //foo/bar always cut to the protocol. + if (relative.slashes && !relative.protocol) { + // take everything except the protocol from relative + var rkeys = Object.keys(relative); + for (var rk = 0; rk < rkeys.length; rk++) { + var rkey = rkeys[rk]; + if (rkey !== 'protocol') + result[rkey] = relative[rkey]; + } + + //urlParse appends trailing / to urls like http://www.example.com + if (slashedProtocol[result.protocol] && + result.hostname && !result.pathname) { + result.path = result.pathname = '/'; + } + + result.href = result.format(); + return result; + } + var relPath; + if (relative.protocol && relative.protocol !== result.protocol) { + // if it's a known url protocol, then changing + // the protocol does weird things + // first, if it's not file:, then we MUST have a host, + // and if there was a path + // to begin with, then we MUST have a path. + // if it is file:, then the host is dropped, + // because that's known to be hostless. + // anything else is assumed to be absolute. + if (!slashedProtocol[relative.protocol]) { + var keys = Object.keys(relative); + for (var v = 0; v < keys.length; v++) { + var k = keys[v]; + result[k] = relative[k]; + } + result.href = result.format(); + return result; + } + + result.protocol = relative.protocol; + if (!relative.host && !hostlessProtocol[relative.protocol]) { + relPath = (relative.pathname || '').split('/'); + while (relPath.length && !(relative.host = relPath.shift())); + if (!relative.host) relative.host = ''; + if (!relative.hostname) relative.hostname = ''; + if (relPath[0] !== '') relPath.unshift(''); + if (relPath.length < 2) relPath.unshift(''); + result.pathname = relPath.join('/'); + } else { + result.pathname = relative.pathname; + } + result.search = relative.search; + result.query = relative.query; + result.host = relative.host || ''; + result.auth = relative.auth; + result.hostname = relative.hostname || relative.host; + result.port = relative.port; + // to support http.request + if (result.pathname || result.search) { + var p = result.pathname || ''; + var s = result.search || ''; + result.path = p + s; + } + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; + } + + var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), + isRelAbs = ( + relative.host || + relative.pathname && relative.pathname.charAt(0) === '/' + ), + mustEndAbs = (isRelAbs || isSourceAbs || + (result.host && relative.pathname)), + removeAllDots = mustEndAbs, + srcPath = result.pathname && result.pathname.split('/') || [], + psychotic = result.protocol && !slashedProtocol[result.protocol]; + relPath = relative.pathname && relative.pathname.split('/') || []; + // if the url is a non-slashed url, then relative + // links like ../.. should be able + // to crawl up to the hostname, as well. This is strange. + // result.protocol has already been set by now. + // Later on, put the first path part into the host field. + if (psychotic) { + result.hostname = ''; + result.port = null; + if (result.host) { + if (srcPath[0] === '') srcPath[0] = result.host; + else srcPath.unshift(result.host); + } + result.host = ''; + if (relative.protocol) { + relative.hostname = null; + relative.port = null; + if (relative.host) { + if (relPath[0] === '') relPath[0] = relative.host; + else relPath.unshift(relative.host); + } + relative.host = null; + } + mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); + } + var authInHost; + if (isRelAbs) { + // it's absolute. + result.host = (relative.host || relative.host === '') ? + relative.host : result.host; + result.hostname = (relative.hostname || relative.hostname === '') ? + relative.hostname : result.hostname; + result.search = relative.search; + result.query = relative.query; + srcPath = relPath; + // fall through to the dot-handling below. + } else if (relPath.length) { + // it's relative + // throw away the existing file, and take the new path instead. + if (!srcPath) srcPath = []; + srcPath.pop(); + srcPath = srcPath.concat(relPath); + result.search = relative.search; + result.query = relative.query; + } else if (!isNullOrUndefined(relative.search)) { + // just pull out the search. + // like href='?foo'. + // Put this after the other two cases because it simplifies the booleans + if (psychotic) { + result.hostname = result.host = srcPath.shift(); + //occationaly the auth can get stuck only in host + //this especially happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + result.search = relative.search; + result.query = relative.query; + //to support http.request + if (!isNull(result.pathname) || !isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.href = result.format(); + return result; + } + + if (!srcPath.length) { + // no path at all. easy. + // we've already handled the other stuff above. + result.pathname = null; + //to support http.request + if (result.search) { + result.path = '/' + result.search; + } else { + result.path = null; + } + result.href = result.format(); + return result; + } + + // if a url ENDs in . or .., then it must get a trailing slash. + // however, if it ends in anything else non-slashy, + // then it must NOT get a trailing slash. + var last = srcPath.slice(-1)[0]; + var hasTrailingSlash = ( + (result.host || relative.host || srcPath.length > 1) && + (last === '.' || last === '..') || last === ''); + + // strip single dots, resolve double dots to parent dir + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = srcPath.length; i >= 0; i--) { + last = srcPath[i]; + if (last === '.') { + srcPath.splice(i, 1); + } else if (last === '..') { + srcPath.splice(i, 1); + up++; + } else if (up) { + srcPath.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (!mustEndAbs && !removeAllDots) { + for (; up--; up) { + srcPath.unshift('..'); + } + } + + if (mustEndAbs && srcPath[0] !== '' && + (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { + srcPath.unshift(''); + } + + if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { + srcPath.push(''); + } + + var isAbsolute = srcPath[0] === '' || + (srcPath[0] && srcPath[0].charAt(0) === '/'); + + // put the host back + if (psychotic) { + result.hostname = result.host = isAbsolute ? '' : + srcPath.length ? srcPath.shift() : ''; + //occationaly the auth can get stuck only in host + //this especially happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + + mustEndAbs = mustEndAbs || (result.host && srcPath.length); + + if (mustEndAbs && !isAbsolute) { + srcPath.unshift(''); + } + + if (!srcPath.length) { + result.pathname = null; + result.path = null; + } else { + result.pathname = srcPath.join('/'); + } + + //to support request.http + if (!isNull(result.pathname) || !isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.auth = relative.auth || result.auth; + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; +}; + +Url.prototype.parseHost = function() { + return parseHost(this); +}; + +function parseHost(self) { + var host = self.host; + var port = portPattern.exec(host); + if (port) { + port = port[0]; + if (port !== ':') { + self.port = port.substr(1); + } + host = host.substr(0, host.length - port.length); + } + if (host) self.hostname = host; +} + +/** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @class + * @param {string=} message The message. + */ +function CanceledError(message) { + // eslint-disable-next-line no-eq-null,eqeqeq + AxiosError_1.call(this, message == null ? 'canceled' : message, AxiosError_1.ERR_CANCELED); + this.name = 'CanceledError'; +} + +utils.inherits(CanceledError, AxiosError_1, { + __CANCEL__: true +}); + +var CanceledError_1 = CanceledError; + +var xhr = function xhrAdapter(config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + var requestData = config.data; + var requestHeaders = config.headers; + var responseType = config.responseType; + var onCanceled; + function done() { + if (config.cancelToken) { + config.cancelToken.unsubscribe(onCanceled); + } + + if (config.signal) { + config.signal.removeEventListener('abort', onCanceled); + } + } + + var request = new XMLHttpRequest(); + + // HTTP basic authentication + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; + requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); + } + + var fullPath = buildFullPath(config.baseURL, config.url); + var parsed = url.parse(fullPath); + var protocol = utils.getProtocol(parsed.protocol); + + request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); + + // Set the request timeout in MS + request.timeout = config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; + var responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError_1('Request aborted', AxiosError_1.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new AxiosError_1('Network Error', AxiosError_1.ERR_NETWORK, config, request, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; + var transitional$1 = config.transitional || transitional; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + reject(new AxiosError_1( + timeoutErrorMessage, + transitional$1.clarifyTimeoutError ? AxiosError_1.ETIMEDOUT : AxiosError_1.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + if (utils.isStandardBrowserEnv()) { + // Add xsrf header + var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? + cookies.read(config.xsrfCookieName) : + undefined; + + if (xsrfValue) { + requestHeaders[config.xsrfHeaderName] = xsrfValue; + } + } + + // Add headers to the request + if ('setRequestHeader' in request) { + utils.forEach(requestHeaders, function setRequestHeader(val, key) { + if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { + // Remove Content-Type if data is undefined + delete requestHeaders[key]; + } else { + // Otherwise add header to the request + request.setRequestHeader(key, val); + } + }); + } + + // Add withCredentials to request if needed + if (!utils.isUndefined(config.withCredentials)) { + request.withCredentials = !!config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = config.responseType; + } + + // Handle progress if needed + if (typeof config.onDownloadProgress === 'function') { + request.addEventListener('progress', config.onDownloadProgress); + } + + // Not all browsers support upload events + if (typeof config.onUploadProgress === 'function' && request.upload) { + request.upload.addEventListener('progress', config.onUploadProgress); + } + + if (config.cancelToken || config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = function(cancel) { + if (!request) { + return; + } + reject(!cancel || (cancel && cancel.type) ? new CanceledError_1() : cancel); + request.abort(); + request = null; + }; + + config.cancelToken && config.cancelToken.subscribe(onCanceled); + if (config.signal) { + config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); + } + } + + if (!requestData) { + requestData = null; + } + + if (parsed.path === null) { + reject(new AxiosError_1('Malformed URL ' + fullPath, AxiosError_1.ERR_BAD_REQUEST, config)); + return; + } + + if (!utils.supportedProtocols.includes(protocol)) { + reject(new AxiosError_1('Unsupported protocol ' + protocol, AxiosError_1.ERR_BAD_REQUEST, config)); + return; + } + + // Send the request + request.send(requestData); + }); +}; + +// eslint-disable-next-line strict +var _null = null; + +var DEFAULT_CONTENT_TYPE = { + 'Content-Type': 'application/x-www-form-urlencoded' +}; + +function setContentTypeIfUnset(headers, value) { + if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = value; + } +} + +function getDefaultAdapter() { + var adapter; + if (typeof XMLHttpRequest !== 'undefined') { + // For browsers use XHR adapter + adapter = xhr; + } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { + // For node use HTTP adapter + adapter = xhr; + } + return adapter; +} + +function stringifySafely(rawValue, parser, encoder) { + if (utils.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); +} + +var defaults = { + + transitional: transitional, + + adapter: getDefaultAdapter(), + + transformRequest: [function transformRequest(data, headers) { + normalizeHeaderName(headers, 'Accept'); + normalizeHeaderName(headers, 'Content-Type'); + + if (utils.isFormData(data) || + utils.isArrayBuffer(data) || + utils.isBuffer(data) || + utils.isStream(data) || + utils.isFile(data) || + utils.isBlob(data) + ) { + return data; + } + if (utils.isArrayBufferView(data)) { + return data.buffer; + } + if (utils.isURLSearchParams(data)) { + setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); + return data.toString(); + } + + var isObjectPayload = utils.isObject(data); + var contentType = headers && headers['Content-Type']; + + var isFileList; + + if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) { + var _FormData = this.env && this.env.FormData; + return toFormData_1(isFileList ? {'files[]': data} : data, _FormData && new _FormData()); + } else if (isObjectPayload || contentType === 'application/json') { + setContentTypeIfUnset(headers, 'application/json'); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + var transitional = this.transitional || defaults.transitional; + var silentJSONParsing = transitional && transitional.silentJSONParsing; + var forcedJSONParsing = transitional && transitional.forcedJSONParsing; + var strictJSONParsing = !silentJSONParsing && this.responseType === 'json'; + + if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) { + try { + return JSON.parse(data); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError_1.from(e, AxiosError_1.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: _null + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*' + } + } +}; + +utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { + defaults.headers[method] = {}; +}); + +utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); +}); + +var defaults_1 = defaults; + +/** + * Transform the data for a request or a response + * + * @param {Object|String} data The data to be transformed + * @param {Array} headers The headers for the request or response + * @param {Array|Function} fns A single function or Array of functions + * @returns {*} The resulting transformed data + */ +var transformData = function transformData(data, headers, fns) { + var context = this || defaults_1; + /*eslint no-param-reassign:0*/ + utils.forEach(fns, function transform(fn) { + data = fn.call(context, data, headers); + }); + + return data; +}; + +var isCancel = function isCancel(value) { + return !!(value && value.__CANCEL__); +}; + +/** + * Throws a `CanceledError` if cancellation has been requested. + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError_1(); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * @returns {Promise} The Promise to be fulfilled + */ +var dispatchRequest = function dispatchRequest(config) { + throwIfCancellationRequested(config); + + // Ensure headers exist + config.headers = config.headers || {}; + + // Transform request data + config.data = transformData.call( + config, + config.data, + config.headers, + config.transformRequest + ); + + // Flatten headers + config.headers = utils.merge( + config.headers.common || {}, + config.headers[config.method] || {}, + config.headers + ); + + utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + function cleanHeaderConfig(method) { + delete config.headers[method]; + } + ); + + var adapter = config.adapter || defaults_1.adapter; + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + response.data, + response.headers, + config.transformResponse + ); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + reason.response.data, + reason.response.headers, + config.transformResponse + ); + } + } + + return Promise.reject(reason); + }); +}; + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * @returns {Object} New object resulting from merging config2 to config1 + */ +var mergeConfig = function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + var config = {}; + + function getMergedValue(target, source) { + if (utils.isPlainObject(target) && utils.isPlainObject(source)) { + return utils.merge(target, source); + } else if (utils.isPlainObject(source)) { + return utils.merge({}, source); + } else if (utils.isArray(source)) { + return source.slice(); + } + return source; + } + + // eslint-disable-next-line consistent-return + function mergeDeepProperties(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(config1[prop], config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + return getMergedValue(undefined, config1[prop]); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(undefined, config2[prop]); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(undefined, config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + return getMergedValue(undefined, config1[prop]); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(prop) { + if (prop in config2) { + return getMergedValue(config1[prop], config2[prop]); + } else if (prop in config1) { + return getMergedValue(undefined, config1[prop]); + } + } + + var mergeMap = { + 'url': valueFromConfig2, + 'method': valueFromConfig2, + 'data': valueFromConfig2, + 'baseURL': defaultToConfig2, + 'transformRequest': defaultToConfig2, + 'transformResponse': defaultToConfig2, + 'paramsSerializer': defaultToConfig2, + 'timeout': defaultToConfig2, + 'timeoutMessage': defaultToConfig2, + 'withCredentials': defaultToConfig2, + 'adapter': defaultToConfig2, + 'responseType': defaultToConfig2, + 'xsrfCookieName': defaultToConfig2, + 'xsrfHeaderName': defaultToConfig2, + 'onUploadProgress': defaultToConfig2, + 'onDownloadProgress': defaultToConfig2, + 'decompress': defaultToConfig2, + 'maxContentLength': defaultToConfig2, + 'maxBodyLength': defaultToConfig2, + 'beforeRedirect': defaultToConfig2, + 'transport': defaultToConfig2, + 'httpAgent': defaultToConfig2, + 'httpsAgent': defaultToConfig2, + 'cancelToken': defaultToConfig2, + 'socketPath': defaultToConfig2, + 'responseEncoding': defaultToConfig2, + 'validateStatus': mergeDirectKeys + }; + + utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { + var merge = mergeMap[prop] || mergeDeepProperties; + var configValue = merge(prop); + (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); + }); + + return config; +}; + +var data = { + "version": "0.27.0" +}; + +var VERSION = data.version; + + +var validators$1 = {}; + +// eslint-disable-next-line func-names +['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) { + validators$1[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; +}); + +var deprecatedWarnings = {}; + +/** + * Transitional option validator + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * @returns {function} + */ +validators$1.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return function(value, opt, opts) { + if (validator === false) { + throw new AxiosError_1( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError_1.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; +}; + +/** + * Assert object's properties type + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + */ + +function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError_1('options must be an object', AxiosError_1.ERR_BAD_OPTION_VALUE); + } + var keys = Object.keys(options); + var i = keys.length; + while (i-- > 0) { + var opt = keys[i]; + var validator = schema[opt]; + if (validator) { + var value = options[opt]; + var result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError_1('option ' + opt + ' must be ' + result, AxiosError_1.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError_1('Unknown option ' + opt, AxiosError_1.ERR_BAD_OPTION); + } + } +} + +var validator = { + assertOptions: assertOptions, + validators: validators$1 +}; + +var validators = validator.validators; +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + */ +function Axios(instanceConfig) { + this.defaults = instanceConfig; + this.interceptors = { + request: new InterceptorManager_1(), + response: new InterceptorManager_1() + }; +} + +/** + * Dispatch a request + * + * @param {Object} config The config specific for this request (merged with this.defaults) + */ +Axios.prototype.request = function request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig(this.defaults, config); + + // Set config.method + if (config.method) { + config.method = config.method.toLowerCase(); + } else if (this.defaults.method) { + config.method = this.defaults.method.toLowerCase(); + } else { + config.method = 'get'; + } + + var transitional = config.transitional; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean) + }, false); + } + + // filter out skipped interceptors + var requestInterceptorChain = []; + var synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + var responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + var promise; + + if (!synchronousRequestInterceptors) { + var chain = [dispatchRequest, undefined]; + + Array.prototype.unshift.apply(chain, requestInterceptorChain); + chain = chain.concat(responseInterceptorChain); + + promise = Promise.resolve(config); + while (chain.length) { + promise = promise.then(chain.shift(), chain.shift()); + } + + return promise; + } + + + var newConfig = config; + while (requestInterceptorChain.length) { + var onFulfilled = requestInterceptorChain.shift(); + var onRejected = requestInterceptorChain.shift(); + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected(error); + break; + } + } + + try { + promise = dispatchRequest(newConfig); + } catch (error) { + return Promise.reject(error); + } + + while (responseInterceptorChain.length) { + promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); + } + + return promise; +}; + +Axios.prototype.getUri = function getUri(config) { + config = mergeConfig(this.defaults, config); + var fullPath = buildFullPath(config.baseURL, config.url); + return buildURL(fullPath, config.params, config.paramsSerializer); +}; + +// Provide aliases for supported request methods +utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method: method, + url: url, + data: (config || {}).data + })); + }; +}); + +utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method: method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url: url, + data: data + })); + }; + } + + Axios.prototype[method] = generateHTTPMethod(); + + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); +}); + +var Axios_1 = Axios; + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @class + * @param {Function} executor The executor function. + */ +function CancelToken(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + var resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + var token = this; + + // eslint-disable-next-line func-names + this.promise.then(function(cancel) { + if (!token._listeners) return; + + var i; + var l = token._listeners.length; + + for (i = 0; i < l; i++) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = function(onfulfilled) { + var _resolve; + // eslint-disable-next-line func-names + var promise = new Promise(function(resolve) { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError_1(message); + resolvePromise(token.reason); + }); +} + +/** + * Throws a `CanceledError` if cancellation has been requested. + */ +CancelToken.prototype.throwIfRequested = function throwIfRequested() { + if (this.reason) { + throw this.reason; + } +}; + +/** + * Subscribe to the cancel signal + */ + +CancelToken.prototype.subscribe = function subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } +}; + +/** + * Unsubscribe from the cancel signal + */ + +CancelToken.prototype.unsubscribe = function unsubscribe(listener) { + if (!this._listeners) { + return; + } + var index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } +}; + +/** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ +CancelToken.source = function source() { + var cancel; + var token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token: token, + cancel: cancel + }; +}; + +var CancelToken_1 = CancelToken; + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * @returns {Function} + */ +var spread = function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +}; + +/** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ +var isAxiosError = function isAxiosError(payload) { + return utils.isObject(payload) && (payload.isAxiosError === true); +}; + +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * @return {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + var context = new Axios_1(defaultConfig); + var instance = bind(Axios_1.prototype.request, context); + + // Copy axios.prototype to instance + utils.extend(instance, Axios_1.prototype, context); + + // Copy context to instance + utils.extend(instance, context); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + + return instance; +} + +// Create the default instance to be exported +var axios$1 = createInstance(defaults_1); + +// Expose Axios class to allow class inheritance +axios$1.Axios = Axios_1; + +// Expose Cancel & CancelToken +axios$1.CanceledError = CanceledError_1; +axios$1.CancelToken = CancelToken_1; +axios$1.isCancel = isCancel; +axios$1.VERSION = data.version; +axios$1.toFormData = toFormData_1; + +// Expose AxiosError class +axios$1.AxiosError = AxiosError_1; + +// alias for CanceledError for backward compatibility +axios$1.Cancel = axios$1.CanceledError; + +// Expose all/spread +axios$1.all = function all(promises) { + return Promise.all(promises); +}; +axios$1.spread = spread; + +// Expose isAxiosError +axios$1.isAxiosError = isAxiosError; + +var axios_1 = axios$1; + +// Allow use of default import syntax in TypeScript +var default_1 = axios$1; +axios_1.default = default_1; + +var axios = axios_1; + +var name$1 = "@tryghost/content-api"; +var version = "1.11.1"; +var repository = "https://github.com/TryGhost/SDK/tree/master/packages/content-api"; +var author = "Ghost Foundation"; +var license = "MIT"; +var main = "cjs/content-api.js"; +var unpkg = "umd/content-api.min.js"; +var module = "es/content-api.js"; +var source = "lib/content-api.js"; +var files = [ + "LICENSE", + "README.md", + "cjs/", + "lib/", + "umd/", + "es/" +]; +var scripts = { + dev: "echo \"Implement me!\"", + pretest: "yarn build", + test: "NODE_ENV=testing c8 --all --reporter text --reporter cobertura mocha './test/**/*.test.js'", + build: "rollup -c", + lint: "eslint . --ext .js --cache", + prepare: "NODE_ENV=production yarn build", + posttest: "yarn lint" +}; +var publishConfig = { + access: "public" +}; +var devDependencies = { + "@babel/core": "7.18.10", + "@babel/polyfill": "7.12.1", + "@babel/preset-env": "7.18.10", + "@rollup/plugin-json": "4.1.0", + c8: "7.12.0", + "core-js": "3.24.1", + "eslint-plugin-ghost": "2.14.0", + mocha: "10.0.0", + rollup: "2.77.2", + "rollup-plugin-babel": "4.4.0", + "rollup-plugin-commonjs": "10.1.0", + "rollup-plugin-node-resolve": "5.2.0", + "rollup-plugin-polyfill-node": "0.10.2", + "rollup-plugin-replace": "2.2.0", + "rollup-plugin-terser": "7.0.2", + should: "13.2.3", + sinon: "14.0.0" +}; +var dependencies = { + axios: "^0.27.0" +}; +var gitHead = "9251588cb81347205c5dab850636bba4c86fe58d"; +var packageInfo = { + name: name$1, + version: version, + repository: repository, + author: author, + license: license, + main: main, + "umd:main": "umd/content-api.min.js", + unpkg: unpkg, + module: module, + source: source, + files: files, + scripts: scripts, + publishConfig: publishConfig, + devDependencies: devDependencies, + dependencies: dependencies, + gitHead: gitHead +}; + +var USER_AGENT_DEFAULT = false; +var packageVersion = packageInfo.version; +var defaultAcceptVersionHeader = 'v5.0'; +var supportedVersions = ['v2', 'v3', 'v4', 'v5', 'canary']; +var name = '@tryghost/content-api'; +/** + * This method can go away in favor of only sending 'Accept-Version` headers + * once the Ghost API removes a concept of version from it's URLS (with Ghost v5) + * + * @param {string} [version] version in `v{major}` format + * @returns {string} + */ + +var resolveAPIPrefix = function resolveAPIPrefix(version) { + var prefix; // NOTE: the "version.match(/^v5\.\d+/)" expression should be changed to "version.match(/^v\d+\.\d+/)" once Ghost v5 is out + + if (version === 'v5' || version === undefined || version.match(/^v5\.\d+/)) { + prefix = "/content/"; + } else if (version.match(/^v\d+\.\d+/)) { + var versionPrefix = /^(v\d+)\.\d+/.exec(version)[1]; + prefix = "/".concat(versionPrefix, "/content/"); + } else { + prefix = "/".concat(version, "/content/"); + } + + return prefix; +}; + +var defaultMakeRequest = function defaultMakeRequest(_ref) { + var url = _ref.url, + method = _ref.method, + params = _ref.params, + headers = _ref.headers; + return axios[method](url, { + params: params, + paramsSerializer: function paramsSerializer(parameters) { + return Object.keys(parameters).reduce(function (parts, k) { + var val = encodeURIComponent([].concat(parameters[k]).join(',')); + return parts.concat("".concat(k, "=").concat(val)); + }, []).join('&'); + }, + headers: headers + }); +}; +/** + * + * @param {Object} options + * @param {String} options.url + * @param {String} options.key + * @param {String} [options.ghostPath] + * @param {String|Boolean} options.version - a version string like v3, v4, v5 or boolean value identifying presence of Accept-Version header + * @param {String|Boolean} [options.userAgent] - value controlling the 'User-Agent' header should be sent with a request + * @param {Function} [options.makeRequest] + * @param {String} [options.host] Deprecated + */ + + +function GhostContentAPI(_ref2) { + var url = _ref2.url, + key = _ref2.key, + host = _ref2.host, + version = _ref2.version, + userAgent = _ref2.userAgent, + _ref2$ghostPath = _ref2.ghostPath, + ghostPath = _ref2$ghostPath === void 0 ? 'ghost' : _ref2$ghostPath, + _ref2$makeRequest = _ref2.makeRequest, + makeRequest = _ref2$makeRequest === void 0 ? defaultMakeRequest : _ref2$makeRequest; + + /** + * host parameter is deprecated + * @deprecated use "url" instead + */ + if (host) { + // eslint-disable-next-line + console.warn("".concat(name, ": The 'host' parameter is deprecated, please use 'url' instead")); + + if (!url) { + url = host; + } + } + + if (this instanceof GhostContentAPI) { + return GhostContentAPI({ + url: url, + key: key, + version: version, + userAgent: userAgent, + ghostPath: ghostPath, + makeRequest: makeRequest + }); + } + + if (version === undefined) { + throw new Error("".concat(name, " Config Missing: 'version' is required. E.g. ").concat(supportedVersions.join(','))); + } + + var acceptVersionHeader; + + if (typeof version === 'boolean') { + if (version === true) { + acceptVersionHeader = defaultAcceptVersionHeader; + } + + version = undefined; + } else if (version && !supportedVersions.includes(version) && !version.match(/^v\d+\.\d+/)) { + throw new Error("".concat(name, " Config Invalid: 'version' ").concat(version, " is not supported")); + } else { + if (version === 'canary') { + // eslint-disable-next-line + console.warn("".concat(name, ": The 'version' parameter has a deprecated format 'canary', please use 'v{major}.{minor}' format instead")); + acceptVersionHeader = defaultAcceptVersionHeader; + } else if (version.match(/^v\d+$/)) { + // eslint-disable-next-line + console.warn("".concat(name, ": The 'version' parameter has a deprecated format 'v{major}', please use 'v{major}.{minor}' format instead")); + acceptVersionHeader = "".concat(version, ".0"); + } else { + acceptVersionHeader = version; + } + } + + if (!url) { + throw new Error("".concat(name, " Config Missing: 'url' is required. E.g. 'https://site.com'")); + } + + if (!/https?:\/\//.test(url)) { + throw new Error("".concat(name, " Config Invalid: 'url' ").concat(url, " requires a protocol. E.g. 'https://site.com'")); + } + + if (url.endsWith('/')) { + throw new Error("".concat(name, " Config Invalid: 'url' ").concat(url, " must not have a trailing slash. E.g. 'https://site.com'")); + } + + if (ghostPath.endsWith('/') || ghostPath.startsWith('/')) { + throw new Error("".concat(name, " Config Invalid: 'ghostPath' ").concat(ghostPath, " must not have a leading or trailing slash. E.g. 'ghost'")); + } + + if (key && !/[0-9a-f]{26}/.test(key)) { + throw new Error("".concat(name, " Config Invalid: 'key' ").concat(key, " must have 26 hex characters")); + } + + if (userAgent === undefined) { + userAgent = USER_AGENT_DEFAULT; + } + + var api = ['posts', 'authors', 'tags', 'pages', 'settings', 'tiers', 'newsletters', 'offers'].reduce(function (apiObject, resourceType) { + function browse() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var memberToken = arguments.length > 1 ? arguments[1] : undefined; + return makeApiRequest(resourceType, options, null, memberToken); + } + + function read(data) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var memberToken = arguments.length > 2 ? arguments[2] : undefined; + + if (!data || !data.id && !data.slug) { + return Promise.reject(new Error("".concat(name, " read requires an id or slug."))); + } + + var params = Object.assign({}, data, options); + return makeApiRequest(resourceType, params, data.id || "slug/".concat(data.slug), memberToken); + } + + return Object.assign(apiObject, _defineProperty({}, resourceType, { + read: read, + browse: browse + })); + }, {}); // Settings, tiers & newsletters only have browse methods, offers only has read + + delete api.settings.read; + delete api.tiers.read; + delete api.newsletters.read; + delete api.offers.browse; + return api; + + function makeApiRequest(resourceType, params, id) { + var membersToken = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; + + if (!membersToken && !key) { + return Promise.reject(new Error("".concat(name, " Config Missing: 'key' is required."))); + } + + delete params.id; + var headers = membersToken ? { + Authorization: "GhostMembers ".concat(membersToken) + } : {}; + + if (userAgent) { + if (typeof userAgent === 'boolean') { + headers['User-Agent'] = "GhostContentSDK/".concat(packageVersion); + } else { + headers['User-Agent'] = userAgent; + } + } + + if (acceptVersionHeader) { + headers['Accept-Version'] = acceptVersionHeader; + } + + params = Object.assign({ + key: key + }, params); + var apiUrl = "".concat(url, "/").concat(ghostPath, "/api").concat(resolveAPIPrefix(version)).concat(resourceType, "/").concat(id ? id + '/' : ''); + return makeRequest({ + url: apiUrl, + method: 'get', + params: params, + headers: headers + }).then(function (res) { + if (!Array.isArray(res.data[resourceType])) { + return res.data[resourceType]; + } + + if (res.data[resourceType].length === 1 && !res.data.meta) { + return res.data[resourceType][0]; + } + + return Object.assign(res.data[resourceType], { + meta: res.data.meta + }); + }).catch(function (err) { + if (err.response && err.response.data && err.response.data.errors) { + var props = err.response.data.errors[0]; + var toThrow = new Error(props.message); + var keys = Object.keys(props); + toThrow.name = props.type; + keys.forEach(function (k) { + toThrow[k] = props[k]; + }); + toThrow.response = err.response; // @TODO: remove in 2.0. We have enhanced the error handling, but we don't want to break existing implementations. + + toThrow.request = err.request; + toThrow.config = err.config; + throw toThrow; + } else { + throw err; + } + }); + } +} + + +//# sourceMappingURL=content-api.js.map + + +/***/ }), + +/***/ "./node_modules/base64-js/index.js": +/*!*****************************************!*\ + !*** ./node_modules/base64-js/index.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +exports.byteLength = byteLength +exports.toByteArray = toByteArray +exports.fromByteArray = fromByteArray + +var lookup = [] +var revLookup = [] +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array + +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i +} + +// Support decoding URL-safe base64 strings, as Node.js does. +// See: https://en.wikipedia.org/wiki/Base64#URL_applications +revLookup['-'.charCodeAt(0)] = 62 +revLookup['_'.charCodeAt(0)] = 63 + +function getLens (b64) { + var len = b64.length + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('=') + if (validLen === -1) validLen = len + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4) + + return [validLen, placeHoldersLen] +} + +// base64 is 4/3 + up to two characters of the original data +function byteLength (b64) { + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function toByteArray (b64) { + var tmp + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) + + var curByte = 0 + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen + + var i + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)] + arr[curByte++] = (tmp >> 16) & 0xFF + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + return arr +} + +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] +} + +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF) + output.push(tripletToBase64(tmp)) + } + return output.join('') +} + +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ) + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1] + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ) + } + + return parts.join('') +} + + +/***/ }), + +/***/ "./node_modules/buffer/index.js": +/*!**************************************!*\ + !*** ./node_modules/buffer/index.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; /*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + + + +var base64 = __webpack_require__(/*! base64-js */ "./node_modules/base64-js/index.js") +var ieee754 = __webpack_require__(/*! ieee754 */ "./node_modules/ieee754/index.js") +var customInspectSymbol = + (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation + ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation + : null + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +var K_MAX_LENGTH = 0x7fffffff +exports.kMaxLength = K_MAX_LENGTH + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() + +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && + typeof console.error === 'function') { + console.error( + 'This browser lacks typed array (Uint8Array) support which is required by ' + + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' + ) +} + +function typedArraySupport () { + // Can typed array instances can be augmented? + try { + var arr = new Uint8Array(1) + var proto = { foo: function () { return 42 } } + Object.setPrototypeOf(proto, Uint8Array.prototype) + Object.setPrototypeOf(arr, proto) + return arr.foo() === 42 + } catch (e) { + return false + } +} + +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } +}) + +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } +}) + +function createBuffer (length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"') + } + // Return an augmented `Uint8Array` instance + var buf = new Uint8Array(length) + Object.setPrototypeOf(buf, Buffer.prototype) + return buf +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ) + } + return allocUnsafe(arg) + } + return from(arg, encodingOrOffset, length) +} + +Buffer.poolSize = 8192 // not used by this implementation + +function from (value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayView(value) + } + + if (value == null) { + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof SharedArrayBuffer !== 'undefined' && + (isInstance(value, SharedArrayBuffer) || + (value && isInstance(value.buffer, SharedArrayBuffer)))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) + } + + var valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + var b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from( + value[Symbol.toPrimitive]('string'), encodingOrOffset, length + ) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length) +} + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) +Object.setPrototypeOf(Buffer, Uint8Array) + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number') + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } +} + +function alloc (size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpreted as a start offset. + return typeof encoding === 'string' + ? createBuffer(size).fill(fill, encoding) + : createBuffer(size).fill(fill) + } + return createBuffer(size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding) +} + +function allocUnsafe (size) { + assertSize(size) + return createBuffer(size < 0 ? 0 : checked(size) | 0) +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size) +} + +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + var length = byteLength(string, encoding) | 0 + var buf = createBuffer(length) + + var actual = buf.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual) + } + + return buf +} + +function fromArrayLike (array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0 + var buf = createBuffer(length) + for (var i = 0; i < length; i += 1) { + buf[i] = array[i] & 255 + } + return buf +} + +function fromArrayView (arrayView) { + if (isInstance(arrayView, Uint8Array)) { + var copy = new Uint8Array(arrayView) + return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength) + } + return fromArrayLike(arrayView) +} + +function fromArrayBuffer (array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds') + } + + var buf + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array) + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset) + } else { + buf = new Uint8Array(array, byteOffset, length) + } + + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(buf, Buffer.prototype) + + return buf +} + +function fromObject (obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0 + var buf = createBuffer(len) + + if (buf.length === 0) { + return buf + } + + obj.copy(buf, 0, 0, len) + return buf + } + + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) + } + return fromArrayLike(obj) + } + + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } +} + +function checked (length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false +} + +Buffer.compare = function compare (a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + var buffer = Buffer.allocUnsafe(length) + var pos = 0 + for (i = 0; i < list.length; ++i) { + var buf = list[i] + if (isInstance(buf, Uint8Array)) { + if (pos + buf.length > buffer.length) { + Buffer.from(buf).copy(buffer, pos) + } else { + Uint8Array.prototype.set.call( + buffer, + buf, + pos + ) + } + } else if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } else { + buf.copy(buffer, pos) + } + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) + } + + var len = string.length + var mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 + } + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + var loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coercion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true + +function swap (b, n, m) { + var i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + var len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + var len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + var len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + var length = this.length + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.toLocaleString = Buffer.prototype.toString + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' + return '' +} +if (customInspectSymbol) { + Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } + if (!Buffer.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) + + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i + if (dir) { + var foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + var found = true + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + var strLen = string.length + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (numberIsNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0 + if (isFinite(length)) { + length = length >>> 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + case 'latin1': + case 'binary': + return asciiWrite(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) + ? 4 + : (firstByte > 0xDF) + ? 3 + : (firstByte > 0xBF) + ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; ++i) { + out += hexSliceLookupTable[buf[i]] + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + // If bytes.length is odd, the last 8 bits must be ignored (same as node.js) + for (var i = 0; i < bytes.length - 1; i += 2) { + res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf = this.subarray(start, end) + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(newBuf, Buffer.prototype) + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUintLE = +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUintBE = +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUint8 = +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUint16LE = +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUint16BE = +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUint32LE = +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUint32BE = +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUintLE = +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUintBE = +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUint8 = +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeUint16LE = +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeUint16BE = +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeUint32LE = +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeUint32BE = +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + if (val.length === 1) { + var code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } + } else if (typeof val === 'number') { + val = val & 255 + } else if (typeof val === 'boolean') { + val = Number(val) + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + var i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + var bytes = Buffer.isBuffer(val) + ? val + : Buffer.from(val, encoding) + var len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// HELPER FUNCTIONS +// ================ + +var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance (obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) +} +function numberIsNaN (obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare +} + +// Create lookup table for `toString('hex')` +// See: https://github.com/feross/buffer/issues/219 +var hexSliceLookupTable = (function () { + var alphabet = '0123456789abcdef' + var table = new Array(256) + for (var i = 0; i < 16; ++i) { + var i16 = i * 16 + for (var j = 0; j < 16; ++j) { + table[i16 + j] = alphabet[i] + alphabet[j] + } + } + return table +})() + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[12].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[12].oneOf[1].use[2]!./node_modules/swiper/swiper.min.css": +/*!********************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[12].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[12].oneOf[1].use[2]!./node_modules/swiper/swiper.min.css ***! + \********************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); +// Imports + +var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]}); +// Module +___CSS_LOADER_EXPORT___.push([module.id, "/**\n * Swiper 8.3.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2022 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: July 26, 2022\n */\n\n@font-face{font-family:swiper-icons;src:url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA');font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-android .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-pointer-events{touch-action:pan-y}.swiper-pointer-events.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-3d,.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d .swiper-slide,.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:rgba(0,0,0,.15)}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-horizontal.swiper-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-vertical.swiper-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-centered>.swiper-wrapper::before{content:'';flex-shrink:0;order:9999}.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{-webkit-margin-start:var(--swiper-centered-offset-before);margin-inline-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-horizontal>.swiper-wrapper::before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{-webkit-margin-before:var(--swiper-centered-offset-before);margin-block-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-vertical>.swiper-wrapper::before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center}", ""]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[12].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[12].oneOf[1].use[2]!./node_modules/tippy.js/dist/tippy.css": +/*!**********************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[12].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[12].oneOf[1].use[2]!./node_modules/tippy.js/dist/tippy.css ***! + \**********************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); +// Imports + +var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]}); +// Module +___CSS_LOADER_EXPORT___.push([module.id, ".tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:\"\";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}", ""]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/runtime/api.js": +/*!*****************************************************!*\ + !*** ./node_modules/css-loader/dist/runtime/api.js ***! + \*****************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +// css base code, injected by the css-loader +// eslint-disable-next-line func-names +module.exports = function (cssWithMappingToString) { + var list = []; // return the list of modules as css string + + list.toString = function toString() { + return this.map(function (item) { + var content = cssWithMappingToString(item); + + if (item[2]) { + return "@media ".concat(item[2], " {").concat(content, "}"); + } + + return content; + }).join(""); + }; // import a list of modules into the list + // eslint-disable-next-line func-names + + + list.i = function (modules, mediaQuery, dedupe) { + if (typeof modules === "string") { + // eslint-disable-next-line no-param-reassign + modules = [[null, modules, ""]]; + } + + var alreadyImportedModules = {}; + + if (dedupe) { + for (var i = 0; i < this.length; i++) { + // eslint-disable-next-line prefer-destructuring + var id = this[i][0]; + + if (id != null) { + alreadyImportedModules[id] = true; + } + } + } + + for (var _i = 0; _i < modules.length; _i++) { + var item = [].concat(modules[_i]); + + if (dedupe && alreadyImportedModules[item[0]]) { + // eslint-disable-next-line no-continue + continue; + } + + if (mediaQuery) { + if (!item[2]) { + item[2] = mediaQuery; + } else { + item[2] = "".concat(mediaQuery, " and ").concat(item[2]); + } + } + + list.push(item); + } + }; + + return list; +}; + +/***/ }), + +/***/ "./node_modules/fitvids/index.js": +/*!***************************************!*\ + !*** ./node_modules/fitvids/index.js ***! + \***************************************/ +/***/ ((module) => { + +var selectors = [ + 'iframe[src*="player.vimeo.com"]', + 'iframe[src*="youtube.com"]', + 'iframe[src*="youtube-nocookie.com"]', + 'iframe[src*="kickstarter.com"][src*="video.html"]', + "object" +]; + +var css = + ".fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}"; + +module.exports = function(parentSelector, opts) { + parentSelector = parentSelector || "body"; + opts = opts || {}; + + if (isObject(parentSelector)) { + opts = parentSelector; + parentSelector = "body"; + } + + opts.ignore = opts.ignore || ""; + opts.players = opts.players || ""; + + var containers = queryAll(parentSelector); + if (!hasLength(containers)) return; + + if (!document.getElementById("fit-vids-style")) { + var head = document.head || document.getElementsByTagName("head")[0]; + head.appendChild(styles()); + } + + var custom = toSelectorArray(opts.players); + var ignored = toSelectorArray(opts.ignore); + var ignoredSelector = ignored.length > 0 ? ignored.join() : null; + var selector = selectors.concat(custom).join(); + + if (!hasLength(selector)) { + return; + } + + containers.forEach(function(container) { + var videos = queryAll(container, selector); + + videos.forEach(function(video) { + if (ignoredSelector && video.matches(ignoredSelector)) { + return; + } + wrap(video); + }); + }); +} + +function queryAll(el, selector) { + if (typeof el === "string") { + selector = el; + el = document; + } + return Array.prototype.slice.call(el.querySelectorAll(selector)); +} + +function toSelectorArray(input) { + if (typeof input === "string") { + return input + .split(",") + .map(trim) + .filter(hasLength); + } else if (isArray(input)) { + return flatten(input.map(toSelectorArray).filter(hasLength)); + } + return input || []; +} + +function wrap(el) { + if (/fluid-width-video-wrapper/.test(el.parentNode.className)) { + return; + } + + var widthAttr = parseInt(el.getAttribute("width"), 10); + var heightAttr = parseInt(el.getAttribute("height"), 10); + + var width = !isNaN(widthAttr) ? widthAttr : el.clientWidth; + var height = !isNaN(heightAttr) ? heightAttr : el.clientHeight; + var aspect = height / width; + + el.removeAttribute("width"); + el.removeAttribute("height"); + + var wrapper = document.createElement("div"); + el.parentNode.insertBefore(wrapper, el); + wrapper.className = "fluid-width-video-wrapper"; + wrapper.style.paddingTop = aspect * 100 + "%"; + wrapper.appendChild(el); +} + +function styles() { + var div = document.createElement("div"); + div.innerHTML = '

x

"; + return div.childNodes[1]; +} + +function hasLength(input) { + return input.length > 0; +} + +function trim(str) { + return str.replace(/^\s+|\s+$/g, ""); +} + +function flatten(input) { + return [].concat.apply([], input); +} + +function isObject(input) { + return Object.prototype.toString.call(input) === "[object Object]"; +} + +function isArray(input) { + return Object.prototype.toString.call(input) === "[object Array]"; +} + + +/***/ }), + +/***/ "./node_modules/headroom.js/dist/headroom.js": +/*!***************************************************!*\ + !*** ./node_modules/headroom.js/dist/headroom.js ***! + \***************************************************/ +/***/ (function(module) { + +/*! + * headroom.js v0.12.0 - Give your page some headroom. Hide your header until you need it + * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js + * License: MIT + */ + +(function (global, factory) { + true ? module.exports = factory() : + 0; +}(this, function () { 'use strict'; + + function isBrowser() { + return typeof window !== "undefined"; + } + + /** + * Used to detect browser support for adding an event listener with options + * Credit: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener + */ + function passiveEventsSupported() { + var supported = false; + + try { + var options = { + // eslint-disable-next-line getter-return + get passive() { + supported = true; + } + }; + window.addEventListener("test", options, options); + window.removeEventListener("test", options, options); + } catch (err) { + supported = false; + } + + return supported; + } + + function isSupported() { + return !!( + isBrowser() && + function() {}.bind && + "classList" in document.documentElement && + Object.assign && + Object.keys && + requestAnimationFrame + ); + } + + function isDocument(obj) { + return obj.nodeType === 9; // Node.DOCUMENT_NODE === 9 + } + + function isWindow(obj) { + // `obj === window` or `obj instanceof Window` is not sufficient, + // as the obj may be the window of an iframe. + return obj && obj.document && isDocument(obj.document); + } + + function windowScroller(win) { + var doc = win.document; + var body = doc.body; + var html = doc.documentElement; + + return { + /** + * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/ + * @return {Number} the scroll height of the document in pixels + */ + scrollHeight: function() { + return Math.max( + body.scrollHeight, + html.scrollHeight, + body.offsetHeight, + html.offsetHeight, + body.clientHeight, + html.clientHeight + ); + }, + + /** + * @see http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript + * @return {Number} the height of the viewport in pixels + */ + height: function() { + return win.innerHeight || html.clientHeight || body.clientHeight; + }, + + /** + * Gets the Y scroll position + * @return {Number} pixels the page has scrolled along the Y-axis + */ + scrollY: function() { + if (win.pageYOffset !== undefined) { + return win.pageYOffset; + } + + return (html || body.parentNode || body).scrollTop; + } + }; + } + + function elementScroller(element) { + return { + /** + * @return {Number} the scroll height of the element in pixels + */ + scrollHeight: function() { + return Math.max( + element.scrollHeight, + element.offsetHeight, + element.clientHeight + ); + }, + + /** + * @return {Number} the height of the element in pixels + */ + height: function() { + return Math.max(element.offsetHeight, element.clientHeight); + }, + + /** + * Gets the Y scroll position + * @return {Number} pixels the element has scrolled along the Y-axis + */ + scrollY: function() { + return element.scrollTop; + } + }; + } + + function createScroller(element) { + return isWindow(element) ? windowScroller(element) : elementScroller(element); + } + + /** + * @param element EventTarget + */ + function trackScroll(element, options, callback) { + var isPassiveSupported = passiveEventsSupported(); + var rafId; + var scrolled = false; + var scroller = createScroller(element); + var lastScrollY = scroller.scrollY(); + var details = {}; + + function update() { + var scrollY = Math.round(scroller.scrollY()); + var height = scroller.height(); + var scrollHeight = scroller.scrollHeight(); + + // reuse object for less memory churn + details.scrollY = scrollY; + details.lastScrollY = lastScrollY; + details.direction = scrollY > lastScrollY ? "down" : "up"; + details.distance = Math.abs(scrollY - lastScrollY); + details.isOutOfBounds = scrollY < 0 || scrollY + height > scrollHeight; + details.top = scrollY <= options.offset[details.direction]; + details.bottom = scrollY + height >= scrollHeight; + details.toleranceExceeded = + details.distance > options.tolerance[details.direction]; + + callback(details); + + lastScrollY = scrollY; + scrolled = false; + } + + function handleScroll() { + if (!scrolled) { + scrolled = true; + rafId = requestAnimationFrame(update); + } + } + + var eventOptions = isPassiveSupported + ? { passive: true, capture: false } + : false; + + element.addEventListener("scroll", handleScroll, eventOptions); + update(); + + return { + destroy: function() { + cancelAnimationFrame(rafId); + element.removeEventListener("scroll", handleScroll, eventOptions); + } + }; + } + + function normalizeUpDown(t) { + return t === Object(t) ? t : { down: t, up: t }; + } + + /** + * UI enhancement for fixed headers. + * Hides header when scrolling down + * Shows header when scrolling up + * @constructor + * @param {DOMElement} elem the header element + * @param {Object} options options for the widget + */ + function Headroom(elem, options) { + options = options || {}; + Object.assign(this, Headroom.options, options); + this.classes = Object.assign({}, Headroom.options.classes, options.classes); + + this.elem = elem; + this.tolerance = normalizeUpDown(this.tolerance); + this.offset = normalizeUpDown(this.offset); + this.initialised = false; + this.frozen = false; + } + Headroom.prototype = { + constructor: Headroom, + + /** + * Start listening to scrolling + * @public + */ + init: function() { + if (Headroom.cutsTheMustard && !this.initialised) { + this.addClass("initial"); + this.initialised = true; + + // defer event registration to handle browser + // potentially restoring previous scroll position + setTimeout( + function(self) { + self.scrollTracker = trackScroll( + self.scroller, + { offset: self.offset, tolerance: self.tolerance }, + self.update.bind(self) + ); + }, + 100, + this + ); + } + + return this; + }, + + /** + * Destroy the widget, clearing up after itself + * @public + */ + destroy: function() { + this.initialised = false; + Object.keys(this.classes).forEach(this.removeClass, this); + this.scrollTracker.destroy(); + }, + + /** + * Unpin the element + * @public + */ + unpin: function() { + if (this.hasClass("pinned") || !this.hasClass("unpinned")) { + this.addClass("unpinned"); + this.removeClass("pinned"); + + if (this.onUnpin) { + this.onUnpin.call(this); + } + } + }, + + /** + * Pin the element + * @public + */ + pin: function() { + if (this.hasClass("unpinned")) { + this.addClass("pinned"); + this.removeClass("unpinned"); + + if (this.onPin) { + this.onPin.call(this); + } + } + }, + + /** + * Freezes the current state of the widget + * @public + */ + freeze: function() { + this.frozen = true; + this.addClass("frozen"); + }, + + /** + * Re-enables the default behaviour of the widget + * @public + */ + unfreeze: function() { + this.frozen = false; + this.removeClass("frozen"); + }, + + top: function() { + if (!this.hasClass("top")) { + this.addClass("top"); + this.removeClass("notTop"); + + if (this.onTop) { + this.onTop.call(this); + } + } + }, + + notTop: function() { + if (!this.hasClass("notTop")) { + this.addClass("notTop"); + this.removeClass("top"); + + if (this.onNotTop) { + this.onNotTop.call(this); + } + } + }, + + bottom: function() { + if (!this.hasClass("bottom")) { + this.addClass("bottom"); + this.removeClass("notBottom"); + + if (this.onBottom) { + this.onBottom.call(this); + } + } + }, + + notBottom: function() { + if (!this.hasClass("notBottom")) { + this.addClass("notBottom"); + this.removeClass("bottom"); + + if (this.onNotBottom) { + this.onNotBottom.call(this); + } + } + }, + + shouldUnpin: function(details) { + var scrollingDown = details.direction === "down"; + + return scrollingDown && !details.top && details.toleranceExceeded; + }, + + shouldPin: function(details) { + var scrollingUp = details.direction === "up"; + + return (scrollingUp && details.toleranceExceeded) || details.top; + }, + + addClass: function(className) { + this.elem.classList.add.apply( + this.elem.classList, + this.classes[className].split(" ") + ); + }, + + removeClass: function(className) { + this.elem.classList.remove.apply( + this.elem.classList, + this.classes[className].split(" ") + ); + }, + + hasClass: function(className) { + return this.classes[className].split(" ").every(function(cls) { + return this.classList.contains(cls); + }, this.elem); + }, + + update: function(details) { + if (details.isOutOfBounds) { + // Ignore bouncy scrolling in OSX + return; + } + + if (this.frozen === true) { + return; + } + + if (details.top) { + this.top(); + } else { + this.notTop(); + } + + if (details.bottom) { + this.bottom(); + } else { + this.notBottom(); + } + + if (this.shouldUnpin(details)) { + this.unpin(); + } else if (this.shouldPin(details)) { + this.pin(); + } + } + }; + + /** + * Default options + * @type {Object} + */ + Headroom.options = { + tolerance: { + up: 0, + down: 0 + }, + offset: 0, + scroller: isBrowser() ? window : null, + classes: { + frozen: "headroom--frozen", + pinned: "headroom--pinned", + unpinned: "headroom--unpinned", + top: "headroom--top", + notTop: "headroom--not-top", + bottom: "headroom--bottom", + notBottom: "headroom--not-bottom", + initial: "headroom" + } + }; + + Headroom.cutsTheMustard = isSupported(); + + return Headroom; + +})); + + +/***/ }), + +/***/ "./node_modules/ieee754/index.js": +/*!***************************************!*\ + !*** ./node_modules/ieee754/index.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, exports) => { + +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} + + +/***/ }), + +/***/ "./node_modules/jquery/dist/jquery.js": +/*!********************************************!*\ + !*** ./node_modules/jquery/dist/jquery.js ***! + \********************************************/ +/***/ (function(module, exports) { + +var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! * jQuery JavaScript Library v3.6.0 * https://jquery.com/ * @@ -11,64 +12372,27787 @@ * https://jquery.org/license * * Date: 2021-03-02T17:08Z - */!function(t,n){"use strict";"object"===r(e)&&"object"===r(e.exports)?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,(function(o,i){"use strict";var a=[],s=Object.getPrototypeOf,u=a.slice,l=a.flat?function(e){return a.flat.call(e)}:function(e){return a.concat.apply([],e)},c=a.push,f=a.indexOf,p={},d=p.toString,h=p.hasOwnProperty,m=h.toString,v=m.call(Object),y={},g=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},b=function(e){return null!=e&&e===e.window},w=o.document,x={type:!0,src:!0,nonce:!0,noModule:!0};function C(e,t,n){var r,o,i=(n=n||w).createElement("script");if(i.text=e,t)for(r in x)(o=t[r]||t.getAttribute&&t.getAttribute(r))&&i.setAttribute(r,o);n.head.appendChild(i).parentNode.removeChild(i)}function E(e){return null==e?e+"":"object"===r(e)||"function"==typeof e?p[d.call(e)]||"object":r(e)}var T=function e(t,n){return new e.fn.init(t,n)};function _(e){var t=!!e&&"length"in e&&e.length,n=E(e);return!g(e)&&!b(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}T.fn=T.prototype={jquery:"3.6.0",constructor:T,length:0,toArray:function(){return u.call(this)},get:function(e){return null==e?u.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=T.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return T.each(this,e)},map:function(e){return this.pushStack(T.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(u.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(T.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(T.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = /*! - * Sizzle CSS Selector Engine v2.3.6 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2021-02-16 + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "
" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + {{#if @custom.enable_native_search}} + + {{/if}} + + {{#if @custom.search_api_key}} + + {{/if}} + + {{!-- This variable disbale the fade animation when it's enabled --}} + {{#if @custom.disable_fade_animation}} + + {{/if}} + + {{!-- This script sets the correct theme mode (light or dark) --}} + {{!-- All the main content gets inserted here, index.hbs, post.hbs, etc --}} {{{body}}} {{!-- Search form --}} - {{> search}} + {{^if @custom.enable_native_search}} + {{> search}} + {{/if}} {{!-- The footer --}} {{> footer}} - {{!-- Notifications alerts --}} - {{> "notifications"}} - {{!-- Common scripts shared between pages --}} - - diff --git a/error-404.hbs b/error-404.hbs index 4560475fd..e3c7b796d 100644 --- a/error-404.hbs +++ b/error-404.hbs @@ -20,7 +20,7 @@ into the {body} of the default.hbs template --}} {{> header}}
-
+

404

{{t "Page not found"}}

diff --git a/index.hbs b/index.hbs index 924deb673..73c27da6d 100644 --- a/index.hbs +++ b/index.hbs @@ -26,88 +26,87 @@ into the {body} of the default.hbs template --}}

{{!-- Inject styles of the hero image to make it responsive --}} {{> hero background=@site.cover_image}} -
+

{{@site.title}}

{{#if @site.description}}

{{@site.description}}

{{/if}} - {{#if @labs.members}} - {{t "Subscribe"}} + {{#if @custom.use_custom_cta}} + {{@custom.custom_cta_text}} + {{else}} + {{#if @site.members_enabled}} + {{t "Subscribe"}} + {{/if}} {{/if}}
-
+
{{#get "posts" filter="featured:true" include="authors,tags" limit="5" as |featured|}} {{#if featured}} - + +
{{/if}} {{/get}} diff --git a/locales/en.json b/locales/en.json index 0372a573a..f7d3a6091 100644 --- a/locales/en.json +++ b/locales/en.json @@ -51,7 +51,7 @@ "Subscribed!": "Subscribed!", "Success! Your account is fully activated, you now have access to all content.": "Success! Your account is fully activated, you now have access to all content.", "Tags": "Tags", - "Toggle dark mode": "Toggle dark mode", + "Toggle dark mode": "Toggle light/dark mode", "Type to search": "Type to search", "Unfortunately the page you were looking for could not be found.": "Unfortunately the page you were looking for could not be found.", "Website": "Website", diff --git a/locales/es.json b/locales/es.json index 3ed5363e3..9b012c277 100644 --- a/locales/es.json +++ b/locales/es.json @@ -51,7 +51,7 @@ "Subscribed!": "Suscrito!", "Success! Your account is fully activated, you now have access to all content.": "Éxito! Su cuenta está totalmente activada, ahora tienes acceso a todo el contenido.", "Tags": "Etiquetas", - "Toggle dark mode": "Alternar modo oscuro", + "Toggle dark mode": "Alternar modo claro/oscuro", "Type to search": "Escribe para buscar", "Unfortunately the page you were looking for could not be found.": "Desafortunadamente, la página que estabas buscando no pudo ser encontrada.", "Website": "Sitio web", diff --git a/locales/fr.json b/locales/fr.json index eb2116fc4..e552c8044 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -7,6 +7,9 @@ "Among with no break line": "Avec ", "Apparently there are no posts at the moment, check again later.": "Apparemment il n'y a pas d'article pour le moment, vérifiez plus tard.", "Back to home": "Retour à l'accueil", + "Close": "Fermer", + "Close menu": "Fermer le menu", + "Close search": "Fermer la recherche", "Email cannot be blank.": "L'email ne peut pas être vide.", "Featured": "Mis en avant", "Get the latest posts delivered right to your inbox.": "Recevez les derniers articles directement dans votre boîte mail.", @@ -14,20 +17,33 @@ "Great! Next, complete checkout for full access.": "Super ! Effectuez le paiement pour obtenir l'accès complet.", "Great! You've successfully subscribed.": "Super ! Vous vous êtes inscrit avec succès.", "JavaScript license information": "Informations sur la licence JavaScript", + "Main menu": "Menu principal", + "More": "En savoir plus", + "Newer posts": "Articles plus récents", + "Next": "Suivant", "No posts": "Aucun article", "No posts found": "Aucun article trouvé", "No recent articles found :(": "Aucun article récent trouvé :(", "No results for your search, try something different.": "Pas de résultat pour votre recherche, essayez autre chose.", "No tags found :(": "Aucun mot clé trouvé :(", "Now check your inbox and click the link to confirm your subscription.": "Regardez votre boîte mail et cliquez sur le lien pour confirmer votre abonnement.", + "Older posts": "Articles plus anciens", "Oops! There was an error sending the email, please try later.": "Oups ! Une erreur s'est produite lors de l'envoi de l'email, veuillez réessayer plus tard.", + "Open menu": "Ouvrir le menu", + "Open search": "Ouvrir la recherche", + "Open submenu": "Ouvrir le sous-menu", "Page": "Page", "Page not found": "Page non trouvée", + "Pagination": "Pagination", "Please enter a valid email address": "Veuillez entrer une adresse email valide", "Posted by": "Publié par", + "Previous": "Précédent", "Published with": "Publié avec", "Recent articles": "Articles récents", "Recommended for you": "Recommandé pour vous", + "Scroll to top": "Défiler vers le haut", + "Search": "Recherche", + "Secondary menu in footer": "Menu secondaire en bas de page", "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox.": "Restez à jour ! Recevez tous les derniers articles directement dans votre boîte mail.", "Subscribe": "S'abonner", "Subscribe to our newsletter": "S'abonner à notre newsletter", @@ -38,6 +54,7 @@ "Toggle dark mode": "Basculer en mode sombre", "Type to search": "Écrivez pour rechercher", "Unfortunately the page you were looking for could not be found.": "Malheureusement la page que vous cherchez n'a pas pu être trouvée.", + "Website": "Site web", "Welcome back! You've successfully signed in.": "Bon retour parmi nous ! Vous vous êtes connecté avec succès.", "You've successfully subscribed to": "Vous vous êtes inscrit avec succès à", "Your email address": "Votre adresse email", diff --git a/locales/hr.json b/locales/hr.json new file mode 100644 index 000000000..dfb62bf2f --- /dev/null +++ b/locales/hr.json @@ -0,0 +1,64 @@ +{ + "% min read": "% min čitanja", + "% posts": "% postova", + "1 min read": "1 min čitanja", + "1 post": "1 post", + "Among with": "
Zajedno sa ", + "Among with no break line": "Zajedno sa ", + "Apparently there are no posts at the moment, check again later.": "Trenutno nema postova, provjeri kasnije.", + "Back to home": "Natrag na početnu stranicu", + "Close": "Zatvori", + "Close menu": "Zatvori izbornik", + "Close search": "Zatvori tražilicu", + "Email cannot be blank.": "Email ne momže biti prazan.", + "Featured": "Istaknuto", + "Get the latest posts delivered right to your inbox.": "Dobivaj najnovije postove u svoj inbox.", + "Go to the home page": "Idi na početnu stranicu", + "Great! Next, complete checkout for full access.": "Sjajno! Sljedeće, dovrši checkout za puni pristup.", + "Great! You've successfully subscribed.": "Sjajno! Uspješno ste pretplaćeni.", + "JavaScript license information": "Info o JavaScript licenci", + "Main menu": "Glavni izbornik", + "More": "Više", + "Newer posts": "Noviji postovi", + "Next": "Sljedeći", + "No posts": "Nema postova", + "No posts found": "Postovi nisu nađeni", + "No recent articles found :(": "Noviji članci nisu nađeni :(", + "No results for your search, try something different.": "Nema rezultata za tvoju pretragu, pokušaj nešto drugačije.", + "No tags found :(": "Tagovi nisu nađeni :(", + "Now check your inbox and click the link to confirm your subscription.": "Sad provjeri svoj inbox i klikni na link kako bi potvrdio svoju pretplatu.", + "Older posts": "Stariji postovi", + "Oops! There was an error sending the email, please try later.": "Ups! Došlo je do greške prilikom slanja emaila, molimo pokušajte kasnije.", + "Open menu": "Otvori izbornik", + "Open search": "Otvori tražilicu", + "Open submenu": "Otvori podizbornik", + "Page": "Stranica", + "Page not found": "Stranica nije nađena", + "Pagination": "Paginacija", + "Please enter a valid email address": "Molimo unesi valjanu email adresu", + "Posted by": "Napisao", + "Previous": "Prošli", + "Published with": "Objavljeno sa", + "Recent articles": "Noviji članci", + "Recommended for you": "Preporučeno za tebe", + "Scroll to top": "Natrag na početak", + "Search": "Traži", + "Secondary menu in footer": "Sekundarni izbornik u podnožju", + "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox.": "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox.", + "Subscribe": "Pretplati se", + "Subscribe to our newsletter": "Pretplati se na naš bilten", + "Subscribe to {blogtitle}": "Pretplati se na {blogtitle}", + "Subscribed!": "Pretplaćen(a) si!", + "Success! Your account is fully activated, you now have access to all content.": "Čestitam! Tvoj korisnički račun je u potpunosti aktiviran, sad imaš pristup svem sadržaju.", + "Tags": "Tagovi", + "Toggle dark mode": "Izaberi svjetli/tamni mod", + "Type to search": "Utipkaj da pretražiš", + "Unfortunately the page you were looking for could not be found.": "Na žalost, stranica koju tražiš ne može biti nađena.", + "Website": "Web sajt", + "Welcome back! You've successfully signed in.": "Dobrodošli natrag! Uspješno ste prijavljeni.", + "You've successfully subscribed to": "Uspješno si pretplaćen(a) na", + "Your email address": "Tvoja email adresa", + "of": "od", + "with the email address": "s email adresom", + "with this tag": "s ovim tagom" +} diff --git a/locales/ko.json b/locales/ko.json index be966d4f8..fd7b3afd0 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -1,11 +1,11 @@ { - "% min read": "% 분 짜리 읽을 거리", + "% min read": "% 분 길이", "% posts": "% 개 게시물", - "1 min read": "1 분 읽을 거리", + "1 min read": "1 분 길이", "1 post": "1 개 게시물", "Among with": "
함께 작성함", "Among with no break line": "함께 작성함 ", - "Apparently there are no posts at the moment, check again later.": "현재 게시물이 아무것도 없습니다. 나중에 다시 확인해보세요.", + "Apparently there are no posts at the moment, check again later.": "현재 게시물이 아무것도 없습니다. 나중에 다시 확인해주세요.", "Back to home": "처음으로 돌아가기", "Close": "닫기", "Close menu": "메뉴 닫기", @@ -14,9 +14,9 @@ "Featured": "주목할만한 게시물", "Get the latest posts delivered right to your inbox.": "새 게시물을 이메일로 바로 받아보세요.", "Go to the home page": "처음으로 돌아가기", - "Great! Next, complete checkout for full access.": "좋아요! 이제 결제를 끝내고 모든 컨텐츠를 활성화하세요.", + "Great! Next, complete checkout for full access.": "좋아요! 이제 결제를 끝내고 모든 컨텐츠를 활성화 해주세요.", "Great! You've successfully subscribed.": "좋아요! 성공적으로 구독하셨어요.", - "JavaScript license information": "JavaScript license information", + "JavaScript license information": "자바스크립트 라이센스 정보", "Main menu": "메인 메뉴", "More": "더보기", "Newer posts": "새로운 게시물", @@ -24,7 +24,7 @@ "No posts": "게시물 없음", "No posts found": "아무 게시물도 안 보여요", "No recent articles found :(": "최신 게시물을 찾을 수 없어요 :(", - "No results for your search, try something different.": "이 조건에는 아무것도 없습니다. 다른 조건을 시도해보세요.", + "No results for your search, try something different.": "이 조건에는 아무것도 없습니다. 다른 조건을 시도 해주세요.", "No tags found :(": "아무런 태그도 찾을 수 없어요 :(", "Now check your inbox and click the link to confirm your subscription.": "이제 받은 이메일을 확인하여 구독 인증 링크를 눌러주세요.", "Older posts": "오래된 게시물", @@ -34,7 +34,7 @@ "Open submenu": "보조 메뉴 열기", "Page": "페이지", "Page not found": "아무 페이지도 안보여요", - "Pagination": "Pagination", + "Pagination": "페이지네이션", "Please enter a valid email address": "유효한 이메일 주소를 입력해주세요", "Posted by": "다음 편집자가 작성함", "Previous": "이전으로", @@ -44,7 +44,7 @@ "Scroll to top": "제일 위로", "Search": "검색", "Secondary menu in footer": "하단 보조 메뉴", - "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox.": "계속 최신 상태를 유지하세요! 모든 최신 & 좋은 게시물들을 이메일로 즉시 받으세요.", + "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox.": "계속 최신 상태를 유지해주세요! 모든 최신 & 좋은 게시물들을 이메일로 즉시 받으세요.", "Subscribe": "구독하기", "Subscribe to our newsletter": "뉴스레터 구독하기", "Subscribe to {blogtitle}": "{blogtitle} 을/를 구독하기", diff --git a/locales/nl.json b/locales/nl.json index 331fac91d..843438d1a 100644 --- a/locales/nl.json +++ b/locales/nl.json @@ -2,21 +2,21 @@ "% min read": "% min leestijd", "% posts": "% posts", "1 min read": "1 min leestijd", - "1 post": "One post", + "1 post": "Een post", "Among with": "
Samen met ", "Among with no break line": "Samen met ", "Apparently there are no posts at the moment, check again later.": "Er lijken op dit moment geen berichten te zijn, kom later terug.", "Back to home": "Terug naar de homepagina", "Email cannot be blank.": "Email mag niet leeg zijn.", "Featured": "Aanbevolen", - "Get the latest posts delivered right to your inbox.": "Krijg de laatste berichten rechtstreeks in je inbox.", + "Get the latest posts delivered right to your inbox.": "Krijg de laatste posts rechtstreeks in je inbox.", "Go to the home page": "Ga naar de homepagina", "Great! Next, complete checkout for full access.": "Top! Nu nog de betaling afronden voor volledige toegang.", "Great! You've successfully subscribed.": "Top! Je hebt je succesvol ingeschreven.", "JavaScript license information": "JavaScript license information", "More": "Meer", - "No posts": "Geen berichten", - "No posts found": "Geen berichten gevonden", + "No posts": "Geen posts", + "No posts found": "Geen posts gevonden", "No recent articles found :(": "Geen recente artikelen gevonden :(", "No results for your search, try something different.": "Geen resultaat voor je zoekopdracht, probeer het eens op een andere manier.", "No tags found :(": "Geen tags gevonden :(", @@ -41,8 +41,8 @@ "Unfortunately the page you were looking for could not be found.": "Helaas kon de pagina die je zocht niet gevonden worden.", "Welcome back! You've successfully signed in.": "Welkom terug! Je bent succesvol ingelogd.", "You've successfully subscribed to": "Je hebt je ingeschreven voor", - "Your email address": "Uw e-mailadres", - "of": "of", + "Your email address": "Je e-mailadres", + "of": "van", "with the email address": "met het e-mailadres", - "with this tag": "met de tag" + "with this tag": "met deze tag" } diff --git a/locales/pt-br.json b/locales/pt-BR.json similarity index 100% rename from locales/pt-br.json rename to locales/pt-BR.json diff --git a/locales/ru.json b/locales/ru.json index ea85897d8..c6066aa56 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -1,39 +1,64 @@ { - "% min read": "% минут на чтение", - "% posts": "% статьи", + "% min read": "% мин. на чтение", + "% posts": "% статьи(-ей)", "1 min read": "1 минута на чтение", "1 post": "1 статья", "Among with": "
В том числе ", "Among with no break line": "В том числе ", "Apparently there are no posts at the moment, check again later.": "Пока что нет статей, загляните позже.", "Back to home": "На главную", - "Email cannot be blank.": "Email-адрес не может быть пустым.", + "Close": "Закрыть", + "Close menu": "Закрыть меню", + "Close search": "Закрыть поиск", + "Email cannot be blank.": "Имейл-адрес не может быть пустым.", "Featured": "ТОП", "Get the latest posts delivered right to your inbox.": "Получайте последние статьи прямо на почту.", "Go to the home page": "На главную страницу", + "Great! Next, complete checkout for full access.": "Отлично! Теперь завершите процесс оформления заказа, чтобы получить полный доступ.", + "Great! You've successfully subscribed.": "Здорово! Вы успешно подписались.", "JavaScript license information": "Информация о лицензии JavaScript", + "Main menu": "Главное меню", + "More": "Ещё", + "Newer posts": "Новые статьи", + "Next": "След.", "No posts": "Нет статей", "No posts found": "Статьи не найдены", "No recent articles found :(": "Последние статьи не найдены :(", "No results for your search, try something different.": "По вашему запросу ничего не найдено, попробуйте что-нибудь другое.", "No tags found :(": "Теги не найдены :(", + "Now check your inbox and click the link to confirm your subscription.": "Теперь проверьте свой почтовый ящик и нажмите на ссылку для подтверждения подписки.", + "Older posts": "Ранние статьи", + "Oops! There was an error sending the email, please try later.": "Упс! При отправке письма произошла ошибка. Пожалуйста, попробуйте позже.", + "Open menu": "Открыть меню", + "Open search": "Открыть поиск", + "Open submenu": "Открыть подменю", "Page": "Страница", "Page not found": "Страница не найдена", + "Pagination": "Нумерация страниц", + "Please enter a valid email address": "Пожалуйста, введите действительный адрес электронной почты", "Posted by": "Автор", + "Previous": "Пред.", "Published with": "Опубликовано с помощью", "Recent articles": "Последние статьи", "Recommended for you": "Рекомендуем", + "Scroll to top": "Вверх", + "Search": "Поиск", + "Secondary menu in footer": "Вторичное меню в футере", "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox.": "Будьте в курсе! Получайте последние статьи прямо на почту.", "Subscribe": "Подписаться", "Subscribe to our newsletter": "Подпишитесь на нашу рассылку", "Subscribe to {blogtitle}": "Подписаться на {blogtitle}", "Subscribed!": "Вы подписаны!", + "Success! Your account is fully activated, you now have access to all content.": "Успех! Ваш аккаунт полностью активирован, теперь вы имеете доступ ко всему содержимому.", "Tags": "Теги", + "Toggle dark mode": "Переключить тёмный режим", "Type to search": "Начните печатать для поиска", - "Unfortunately the page you were looking for could not be found.": "К сожалению, страница, которую вы ищете - отсутствует.", + "Unfortunately the page you were looking for could not be found.": "К сожалению, страница, которую вы ищете — отсутствует.", + "Website": "Веб-сайт", + "Welcome back! You've successfully signed in.": "С возвращением! Вы успешно вошли в систему.", "You've successfully subscribed to": "Вы подписались на", - "Your email address": "Ваш email-адрес", + "Your email address": "Ваш имейл-адрес", "of": "из", - "with the email address": "с email-адресом", + "with the email address": "с имейл-адресом", "with this tag": "с таким же тегом" } diff --git a/locales/sk.json b/locales/sk.json new file mode 100644 index 000000000..41fc2638c --- /dev/null +++ b/locales/sk.json @@ -0,0 +1,64 @@ +{ + "% min read": "čítanie na % min", + "% posts": "% článkov", + "1 min read": "čítanie na 1 min", + "1 post": "1 článok", + "Among with": "
Spolu s ", + "Among with no break line": "Spolu s ", + "Apparently there are no posts at the moment, check again later.": "Zdá sa, že tu momentálne nie sú žiadne články, skúste to neskôr.", + "Back to home": "Návrat domov", + "Close": "Zavrieť", + "Close menu": "Zavrieť menu", + "Close search": "Zavrieť vyhľadávanie", + "Email cannot be blank.": "E-mail nemôže byť prázdny.", + "Featured": "Vybrané", + "Get the latest posts delivered right to your inbox.": "Najnovšie články priamo do Vašej schránky.", + "Go to the home page": "Domovská stránka", + "Great! Next, complete checkout for full access.": "Výborne! Dokončite platbu pre plný prístup.", + "Great! You've successfully subscribed.": "Výborne! Stali ste sa odberateľmi.", + "JavaScript license information": "Informácie o JavaScript licencií", + "Main menu": "Hlavné menu", + "More": "Viac", + "Newer posts": "Novšie články", + "Next": "Ďalej", + "No posts": "Žiadne články", + "No posts found": "Nenájdené žiadne články", + "No recent articles found :(": "Nenájdené žiadne aktuálne články :(", + "No results for your search, try something different.": "Pre zadaný výraz nebolo nič nájdené, skúste vyhľadať niečo iné.", + "No tags found :(": "Značky nenájdené :(", + "Now check your inbox and click the link to confirm your subscription.": "Skontrolujte Vašu schránku a kliknite na odkaz pre potvrdenie odberu.", + "Older posts": "Staršie články", + "Oops! There was an error sending the email, please try later.": "Ups! Pri odosielaní e-mailu sa vyskytla chyba, skúste to neskôr prosím.", + "Open menu": "Otvoriť menu", + "Open search": "Otvoriť vyhľadávanie", + "Open submenu": "Otvoriť podmenu", + "Page": "Stránka", + "Page not found": "Stránka nenájdená", + "Pagination": "Stránkovanie", + "Please enter a valid email address": "Prosím zadajte platnú e-mailovú adresu", + "Posted by": "Zverejnil/a", + "Previous": "Predchádzajúce", + "Published with": "Publikované s", + "Recent articles": "Najnovšie články", + "Recommended for you": "Doporučené pre Vás", + "Scroll to top": "Posunúť hore", + "Search": "Vyhľadávanie", + "Secondary menu in footer": "Sekundárne menu v zápätí", + "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox.": "Zostaňte v obraze! Všetky nové články priamo do Vašej schránky.", + "Subscribe": "Odberať", + "Subscribe to our newsletter": "Odberať náš newsletter", + "Subscribe to {blogtitle}": "Odberať {blogtitle}", + "Subscribed!": "Odberané!", + "Success! Your account is fully activated, you now have access to all content.": "Úspech! Váš účet je plne aktivovaný a máte prístup k celému obsahu!", + "Tags": "Štítky", + "Toggle dark mode": "Zapnúť tmavý režim", + "Type to search": "Vyhľadávaný výraz", + "Unfortunately the page you were looking for could not be found.": "Stránka, ktorú ste hľadali, neexistuje.", + "Website": "Webstránka", + "Welcome back! You've successfully signed in.": "Vitajte naspäť! Úspešne ste se prihlásili.", + "You've successfully subscribed to": "Začali ste úspešne odberať", + "Your email address": "Vaša e-mailová adresa", + "of": "z", + "with the email address": "s e-mailovou adresou", + "with this tag": "s týmto štítkom" +} diff --git a/locales/sv.json b/locales/sv.json new file mode 100644 index 000000000..dcd735ed8 --- /dev/null +++ b/locales/sv.json @@ -0,0 +1,64 @@ +{ + "% min read": "% minuters läsning", + "% posts": "% artiklar", + "1 min read": "1 minuts läsning", + "1 post": "1 artikel", + "Among with": "
Tillsammans med ", + "Among with no break line": "Tillsammans med ", + "Apparently there are no posts at the moment, check again later.": "Tydligen finns det inga artiklar för närvarande, vänligen titta in igen senare...", + "Back to home": "Tillbaka till förstasidan", + "Close": "Stäng", + "Close menu": "Stäng menyn", + "Close search": "Stäng sökningen", + "Email cannot be blank.": "E-postadressen kan inte vara blank.", + "Featured": "Uppmärksammad", + "Get the latest posts delivered right to your inbox.": "Få de senaste artiklarna direkt i din inbox.", + "Go to the home page": "Gå till förstasidan", + "Great! Next, complete checkout for full access.": "Super! I nästa steg, slutför registreringen för full åtkomst.", + "Great! You've successfully subscribed.": "Super! Din prenumeration är nu aktiv.", + "JavaScript license information": "JavaScript licensinformation", + "Main menu": "Huvudmeny", + "More": "Fler", + "Newer posts": "Nyare artiklar", + "Next": "Nästa", + "No posts": "Inga artiklar", + "No posts found": "Inga artiklar hittades", + "No recent articles found :(": "Inga nya artiklar hittades :(", + "No results for your search, try something different.": "Inga resultat hittades för din sökning, försök söka på något annat.", + "No tags found :(": "Inga taggar hittades :(", + "Now check your inbox and click the link to confirm your subscription.": "Vänligen kolla din inbox och klicka på länken för att bekräfta din prenumeration.", + "Older posts": "Äldre artiklar", + "Oops! There was an error sending the email, please try later.": "Oops! Det verkar ha blivit något fel med att skicka mailet, vänligen försök igen senare.", + "Open menu": "Öppna menyn", + "Open search": "Öppna sökrutan", + "Open submenu": "Öppna undermenyn", + "Page": "Sida", + "Page not found": "Sidan hittades ej", + "Pagination": "Paginering", + "Please enter a valid email address": "Vänligen mata in en korrekt e-postadress", + "Posted by": "Författad av", + "Previous": "Tidigare", + "Published with": "Publicerad med", + "Recent articles": "Nya artiklar", + "Recommended for you": "Rekommenderat för dig", + "Scroll to top": "Scrolla till toppen", + "Search": "Sök", + "Secondary menu in footer": "Undermenyn i footern", + "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox.": "Håll dig uppdaterad! Få alla de senaste och bästa artiklarna direkt i din inbox.", + "Subscribe": "Prenumerera", + "Subscribe to our newsletter": "Prenumerera på vårt nyhetsbrev", + "Subscribe to {blogtitle}": "Prenumerera på {blogtitle}", + "Subscribed!": "Prenumerationen aktiv!", + "Success! Your account is fully activated, you now have access to all content.": "Det lyckades! Ditt konto är aktiverat, du har nu tillgång till allt innehåll.", + "Tags": "Taggar", + "Toggle dark mode": "Slå på dark mode", + "Type to search": "Börja skriva för att söka", + "Unfortunately the page you were looking for could not be found.": "Tyvärr så kunde vi inte hitta sidan du letar efter.", + "Website": "Hemsida", + "Welcome back! You've successfully signed in.": "Välkommen tillbaka! Din inloggning lyckades.", + "You've successfully subscribed to": "Du prenumererar nu på", + "Your email address": "Din e-postadress", + "of": "av", + "with the email address": "med följande e-postadress", + "with this tag": "med denna tagg" +} diff --git a/locales/th.json b/locales/th.json new file mode 100644 index 000000000..ccbbadb21 --- /dev/null +++ b/locales/th.json @@ -0,0 +1,64 @@ +{ + "% min read": "ใช้เวลาอ่าน % นาที", + "% posts": "% โพสต์", + "1 min read": "ใช้เวลาอ่าน 1 นาที", + "1 post": "1 โพสต์", + "Among with": "
ร่วมด้วย ", + "Among with no break line": "ร่วมด้วย ", + "Apparently there are no posts at the moment, check again later.": "ยังไม่พบโพสต์ใดๆในขณะนี้ โปรดตรวจสอบอีกครั้งในหลายหลัง", + "Back to home": "กลับหน้าแรก", + "Close": "ปิด", + "Close menu": "ปิดเมนู", + "Close search": "ปิดการค้นหา", + "Email cannot be blank.": "อีเมล์ไม่ควรถูกปล่อยว่าง", + "Featured": "เรื่องเด่น", + "Get the latest posts delivered right to your inbox.": "ส่งเรื่องใหม่ไปยังกล่องอีเมล์ของคุณ", + "Go to the home page": "ไปยังหน้าแรก", + "Great! Next, complete checkout for full access.": "เยี่ยม! ขั้นต่อไป, ทำส่วนที่เหลือให้เสร็จเพื่อเข้าถึงระบบทั้งหมด", + "Great! You've successfully subscribed.": "เยี่ยม! คุณตอบรับข่าวสารเรียบร้อย", + "JavaScript license information": "ข้อมูลลิขสิทธิ์ภาษา JavaScript", + "Main menu": "เมนูหลัก", + "More": "เพิ่มเติม", + "Newer posts": "โพสต์ที่ใหม่กว่า", + "Next": "ต่อไป", + "No posts": "ไม่มีโพสต์", + "No posts found": "ไม่พบโพสต์", + "No recent articles found :(": "ไม่พบบทความใหม่ :(", + "No results for your search, try something different.": "ไม่พบผลการค้นหา โปรดลองค้นหาด้วยคำอื่น", + "No tags found :(": "ไม่พบแท็ก :(", + "Now check your inbox and click the link to confirm your subscription.": "โปรดตรวจสอบกล่องขาเข้าในอีเมล์ของคุณ เพื่อยืนยันการรับข่าวสาร", + "Older posts": "โพสต์ที่เก่ากว่า", + "Oops! There was an error sending the email, please try later.": "อุ๊ย! มีบางอย่างผิดพลาดในการส่งอีเมล์ โปรดลองใหม่อีกครั้งในภายหลัง", + "Open menu": "เปิดเมนู", + "Open search": "เปิดหน้าค้นหา", + "Open submenu": "เปิดเมนูย่อย", + "Page": "หน้า", + "Page not found": "ไม่พบหน้าเพจ", + "Pagination": "ลำดับเพจ", + "Please enter a valid email address": "โปรดใส่อีเมล์ที่ใช้งานได้จริง", + "Posted by": "โพสต์โดย", + "Previous": "ก่อนหน้า", + "Published with": "นำเสนอโดย", + "Recent articles": "บทความล่าสุด", + "Recommended for you": "ขอแนะนำ", + "Scroll to top": "เลื่อนไปข้างบน", + "Search": "ค้นหา", + "Secondary menu in footer": "เมนูสำรองในส่วน footer", + "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox.": "ไม่พลาดโพสต์ใหม่ ให้เราส่งบทความใหม่ๆไปยังอินบ็อกซ์ของคุณโดยตรงสิ", + "Subscribe": "สมัครรับข้อมูล", + "Subscribe to our newsletter": "สมัครรับจดหมายข่าวจากเรา", + "Subscribe to {blogtitle}": "สมัครรับข้อมูลจาก {blogtitle}", + "Subscribed!": "เสร็จเรียบร้อย!", + "Success! Your account is fully activated, you now have access to all content.": "สำเร็จ! บัญชีของคุณถูกเปิดใช้งานแล้ว ตอนนี้คุณสามารถเข้าถึงเนื้อหาทั้งหมดได้แล้ว", + "Tags": "แท็ก", + "Toggle dark mode": "สลับ light/dark mode", + "Type to search": "พิมพ์สิ่งที่ต้องการค้นหา", + "Unfortunately the page you were looking for could not be found.": "เสียใจด้วย ดูเหมือนว่าจะไม่มีเพจที่คุณมองหา", + "Website": "เว็บไซต์", + "Welcome back! You've successfully signed in.": "ขอต้อนรับกลับ! ลงชื่อใช้งานเรียบร้อยแล้ว", + "You've successfully subscribed to": "คุณสมัครรับข้อมูลสำเร็จแล้ว", + "Your email address": "อีเมล์ของคุณ", + "of": "จาก", + "with the email address": "ด้วยใช้อีเมล์", + "with this tag": "ด้วยแท็กนี้" +} diff --git a/locales/tr.json b/locales/tr.json index 67351eaed..0e6dba3a5 100644 --- a/locales/tr.json +++ b/locales/tr.json @@ -7,31 +7,55 @@ "Among with no break line": "İle birlikte: ", "Apparently there are no posts at the moment, check again later.": "Anlaşılan şu anda hiç yazı yok, daha sonra tekrar kontrol et.", "Back to home": "Anasayfaya dön", + "Close": "Kapat", + "Close menu": "Menüyü kapat", + "Close search": "Aramayı kapat", "Email cannot be blank.": "E-posta boş olamaz.", "Featured": "Öne çıkan", "Get the latest posts delivered right to your inbox.": "Son yazıları e-posta olarak al.", "Go to the home page": "Anasayfaya git", + "Great! Next, complete checkout for full access.": "Harika! Ardından, tam erişim için ödeme işlemini tamamlayın.", + "Great! You've successfully subscribed.": "Harika! Başarıyla abone oldunuz.", "JavaScript license information": "JavaScript lisans bilgisi", + "Main menu": "Ana menü", + "More": "Daha", + "Newer posts": "Yeni paylaşımlar", + "Next": "Sonraki", "No posts": "Yazı yok", "No posts found": "Yazı bulunamadı", "No recent articles found :(": "Yeni yazı bulunamadı :(", "No results for your search, try something different.": "Aramanla eşleşen sonuç bulunamadı, farklı şeyler dene.", "No tags found :(": "Etiket bulunamadı :(", + "Now check your inbox and click the link to confirm your subscription.": "Şimdi gelen kutunuzu kontrol edin ve aboneliğinizi onaylamak için bağlantıya tıklayın.", + "Older posts": "Eski İçerikler", + "Oops! There was an error sending the email, please try later.": "Hata! E-posta gönderilirken bir hata oluştu, lütfen daha sonra deneyin.", + "Open menu": "Menüyü aç", + "Open search": "Aramayı aç", + "Open submenu": "Alt menüyü aç", "Page": "Sayfa", "Page not found": "Sayfa bulunamadı", + "Pagination": "Sayfalandırma", + "Please enter a valid email address": "Lütfen geçerli bir e-posta adresi girin", "Posted by": "Yazan", + "Previous": "Öncesi", "Published with": "Yazılım:", "Recent articles": "Son yazılar", "Recommended for you": "Önerilen", + "Scroll to top": "Yukarı kaydır", + "Search": "Arama", + "Secondary menu in footer": "Altbilgideki ikincil menü", "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox.": "Güncel kal! Tüm yeni & harika yazıları e-posta olarak al.", "Subscribe": "Abone ol", "Subscribe to our newsletter": "Bültenimize abone ol", "Subscribe to {blogtitle}": "Abone ol: {blogtitle}", "Subscribed!": "Abone olundu!", + "Success! Your account is fully activated, you now have access to all content.": "Başarılı! Hesabınız tamamen etkinleştirildi, artık tüm içeriğe erişebilirsiniz.", "Tags": "Etiketler", - "Toggle dark mode": "Karanlık mod", + "Toggle dark mode": "Açık/koyu modu değiştir", "Type to search": "Aramak için yaz", "Unfortunately the page you were looking for could not be found.": "Ne yazık ki aradığın sayfa bulunamadı.", + "Website": "Website", + "Welcome back! You've successfully signed in.": "Tekrar hoşgeldiniz! Başarıyla oturum açtınız.", "You've successfully subscribed to": "Başarıyla abone oldun:", "Your email address": "E-posta adresin", "of": "/", diff --git a/locales/vi.json b/locales/vi.json index 395be41dc..70e165bfe 100644 --- a/locales/vi.json +++ b/locales/vi.json @@ -5,59 +5,59 @@ "1 post": "1 bài viết", "Among with": "
Cùng với ", "Among with no break line": "Cùng với ", - "Apparently there are no posts at the moment, check again later.": "Có vẻ như hiện không có bài viết nào cả, bạn xem lại sau nha.", + "Apparently there are no posts at the moment, check again later.": "Hiện tại chưa có bài viết nào, hãy quay lại sau nha.", "Back to home": "Quay về trang chủ", "Close": "Đóng", "Close menu": "Đóng menu", "Close search": "Đóng tìm kiếm", "Email cannot be blank.": "Email không được để trống", "Featured": "Nổi bật", - "Get the latest posts delivered right to your inbox.": "Nhận bài viết mới nhất gửi vào ngay inbox của bạn.", + "Get the latest posts delivered right to your inbox.": "Nhận bài viết mới nhất được gửi tới email của bạn.", "Go to the home page": "Đi đến trang chủ", - "Great! Next, complete checkout for full access.": "Tuyệt vời! Tiếp theo, hãy hoàn tất checkout để có thể truy cập.", - "Great! You've successfully subscribed.": "Tuyệt vời! Bạn vừa đăng ký thành công.", + "Great! Next, complete checkout for full access.": "Tuyệt! Tiếp theo, hãy hoàn tất thanh toán để có thể truy cập.", + "Great! You've successfully subscribed.": "Tuyệt! Bạn vừa đăng ký thành công.", "JavaScript license information": "Thông tin giấy phép JavaScript", "Main menu": "Menu chính", "More": "Thêm", - "Newer posts": "Bài viết mới", + "Newer posts": "Bài mới", "Next": "Tiếp", "No posts": "Không có bài viết", "No posts found": "Không tìm thấy bài viết", - "No recent articles found :(": "Không có bài viết mới nhất nào :(", - "No results for your search, try something different.": "Không tìm thấy kết quả, bạn hãy thử từ khóa khác nhé", - "No tags found :(": "Không có thẻ tag nào :(", - "Now check your inbox and click the link to confirm your subscription.": "Bây giờ bạn hãy kiểm tra inbox và bấm vào đường link để xác nhận đăng ký.", - "Older posts": "Bài viết cũ", - "Oops! There was an error sending the email, please try later.": "Ối! Đã có lỗi xảy ra khi gửi email, vui lòng thử lại lúc khác.", + "No recent articles found :(": "Chưa có bài viết mới :(", + "No results for your search, try something different.": "Không tìm thấy gì, hãy thử từ khóa khác.", + "No tags found :(": "Không có chuyên mục nào :(", + "Now check your inbox and click the link to confirm your subscription.": "Bây giờ bạn hãy kiểm tra hộp thư đến và bấm vào đường link để xác nhận đăng ký.", + "Older posts": "Bài cũ", + "Oops! There was an error sending the email, please try later.": "Ui! Đã có lỗi xảy ra khi gửi email, hãy thử lại sau.", "Open menu": "Mở menu", "Open search": "Mở tìm kiếm", "Open submenu": "Mở menu con", "Page": "Trang", - "Page not found": "Trang không tìm thấy", + "Page not found": "Không tìm thấy trang", "Pagination": "Phân trang", "Please enter a valid email address": "Vui lòng nhập địa chỉ email hợp lệ", "Posted by": "Viết bởi", "Previous": "Trước", - "Published with": "Xuất bản với", + "Published with": "Xuất bản nhờ", "Recent articles": "Bài viết mới nhất", "Recommended for you": "Dành riêng cho bạn", "Scroll to top": "Cuộn lên trên cùng", "Search": "Tìm kiếm", - "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox.": "Cập nhật tin mới nhất! Nhận bài viết mới & hay nhất gửi ngay vào inbox của bạn.", + "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox.": "Luôn cập nhật! Nhận bài viết mới & hay nhất gửi ngay vào hộp thư đến của bạn.", "Subscribe": "Đăng ký", - "Subscribe to our newsletter": "Đăng ký nhận bản tin của chúng tôi", - "Subscribe to {blogtitle}": "Đăng ký vào {blogtitle}", + "Subscribe to our newsletter": "Đăng ký nhận bài mới qua email", + "Subscribe to {blogtitle}": "Đăng ký {blogtitle}", "Subscribed!": "Đã đăng ký!", "Success! Your account is fully activated, you now have access to all content.": "Thành công! Tài khoản của bạn đã được kích hoạt, bây giờ bạn có thể truy cập tất cả nội dung.", - "Tags": "Tags", - "Toggle dark mode": "Bật tắt chế độ ban đêm", + "Tags": "Chuyên mục", + "Toggle dark mode": "Bật tắt chế độ tối", "Type to search": "Nhập để tìm kiếm", - "Unfortunately the page you were looking for could not be found.": "Thật tiếc, trang bạn đang tìm không tồn tại.", + "Unfortunately the page you were looking for could not be found.": "Rất tiếc, trang bạn đang tìm không tồn tại.", "Website": "Website", "Welcome back! You've successfully signed in.": "Chúc mừng! Bạn đã đăng nhập thành công.", - "You've successfully subscribed to": "Bạn đã đăng ký thành công vào", + "You've successfully subscribed to": "Bạn đã đăng ký thành công", "Your email address": "Email của bạn", - "of": "của", + "of": "trong", "with the email address": "với địa chỉ email", - "with this tag": "với thẻ tag này" + "with this tag": "với chuyên mục này" } diff --git a/package.json b/package.json index fe6a81375..450733542 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,12 @@ }, "config": { "posts_per_page": 10, + "card_assets": { + "exclude": [ + "bookmark", + "gallery" + ] + }, "image_sizes": { "xxs": { "width": 30 @@ -27,11 +33,40 @@ } }, "custom": { + "dark_mode_logo": { + "type": "image" + }, + "enable_native_search": { + "type": "boolean", + "default": false + }, + "search_api_key": { + "type": "text" + }, + "disable_fade_animation": { + "type": "boolean", + "default": false + }, + "use_custom_cta": { + "type": "boolean", + "default": false, + "group": "homepage" + }, + "custom_cta_text": { + "type": "text", + "default": "Subscribe", + "group": "homepage" + }, + "custom_cta_url": { + "type": "text", + "default": "/newsletter", + "group": "homepage" + }, "discord_page": { "type": "text", "default": "" }, - "reddit_page":{ + "reddit_page": { "type": "text", "default": "" }, @@ -68,8 +103,7 @@ "demo": "https://liebling.eduardogomez.io", "description": "Beautiful and clean theme that is easy and comfortable to use.", "engines": { - "ghost": ">=4.0.0", - "ghost-api": "v4" + "ghost": ">=5.0.0" }, "gpm": { "type": "theme", @@ -92,5 +126,5 @@ "desktop": "assets/screenshot-desktop.jpg", "mobile": "assets/screenshot-mobile.jpg" }, - "version": "1.0.3" -} + "version": "2.1.7" +} \ No newline at end of file diff --git a/page-authors.hbs b/page-authors.hbs index b9e40d9fd..169b4a6fc 100644 --- a/page-authors.hbs +++ b/page-authors.hbs @@ -26,7 +26,7 @@ into the {body} of the default.hbs template --}}
{{!-- Inject styles of the hero image to make it responsive --}} {{> hero background=feature_image}} -
+

{{title}}

{{#if custom_excerpt}}

{{custom_excerpt}}

@@ -34,7 +34,7 @@ into the {body} of the default.hbs template --}}
-
+
{{#get 'authors' limit='all' include='count.posts' order='count.posts desc'}}
{{#foreach authors}} diff --git a/page-newsletter.hbs b/page-newsletter.hbs index eaf53c41a..43619f85b 100644 --- a/page-newsletter.hbs +++ b/page-newsletter.hbs @@ -17,7 +17,7 @@ into the {body} of the default.hbs template --}} {{!< default}}
-
+
-
+

diff --git a/page-tags.hbs b/page-tags.hbs index c616ca7e1..17292d52e 100644 --- a/page-tags.hbs +++ b/page-tags.hbs @@ -26,7 +26,7 @@ into the {body} of the default.hbs template --}} {{#post}} {{!-- Inject styles of the hero image to make it responsive --}} {{> hero background=feature_image}} -
+

{{title}}

{{#if custom_excerpt}}

{{custom_excerpt}}

@@ -35,7 +35,7 @@ into the {body} of the default.hbs template --}}

{{/post}}
-
+
{{#get 'tags' limit='all' include='count.posts'}} {{#foreach tags}} diff --git a/page.hbs b/page.hbs index 4631746c7..c07c6fbc6 100644 --- a/page.hbs +++ b/page.hbs @@ -27,7 +27,7 @@ into the {body} of the default.hbs template --}} {{#post}} {{!-- Inject styles of the hero image to make it responsive --}} {{> hero background=feature_image}} -
+

{{title}}

{{#if custom_excerpt}}

{{custom_excerpt}}

@@ -36,7 +36,7 @@ into the {body} of the default.hbs template --}}
-
+
{{content}} diff --git a/partials/footer.hbs b/partials/footer.hbs index ae2631c3b..3accb2577 100644 --- a/partials/footer.hbs +++ b/partials/footer.hbs @@ -1,9 +1,9 @@ -{{!-- +{{! This footer template is shared across all the pages. ---}} -
-
\ No newline at end of file diff --git a/partials/header.hbs b/partials/header.hbs index 1a817ef76..58c602beb 100644 --- a/partials/header.hbs +++ b/partials/header.hbs @@ -2,13 +2,28 @@ This header template is shared across all the pages. --}} -
diff --git a/src/docker-compose.yml b/src/docker-compose.yml index 1e689f57f..b2c1a7ea4 100644 --- a/src/docker-compose.yml +++ b/src/docker-compose.yml @@ -1,13 +1,15 @@ -version: '3' +version: "3" services: ghost: - image: ghost:4.3.3 + image: ghost:5.93.0 container_name: ghost volumes: - ./..:/var/lib/ghost/content/themes/liebling:Z - ./ghost.db:/var/lib/ghost/content/data/ghost.db:Z environment: - - NODE_ENV=development + NODE_ENV: development + database__client: sqlite3 + database__connection__filename: content/data/ghost.db ports: - 2368:2368 diff --git a/src/js/app.js b/src/js/app.js index 80399e905..ef26932a5 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -1,386 +1,343 @@ -import $ from 'jquery' -import Headroom from 'headroom.js' -import Glide, { Swipe, Breakpoints } from '@glidejs/glide/dist/glide.modular.esm' -import tippy from 'tippy.js' -import 'tippy.js/dist/tippy.css' -import shave from 'shave' -import AOS from 'aos' +import $ from 'jquery'; +import Headroom from 'headroom.js'; +import tippy from 'tippy.js'; +import 'tippy.js/dist/tippy.css'; +import shave from 'shave'; +import GhostContentAPI from '@tryghost/content-api'; import * as Typesense from 'typesense/dist/typesense.min' -import { isRTL, formatDate, isDarkMode, isMobile, getParameterByName } from './helpers' +import Swiper, { FreeMode, A11y } from 'swiper'; +import 'swiper/css'; +import { isRTL, formatDate, isMobile } from './helpers'; $(() => { - if (isRTL()) { - $('html') - .attr('dir', 'rtl') - .addClass('rtl') + if (isRTL()) { + $('html') + .attr('dir', 'rtl') + .addClass('rtl'); + } + + const $body = $('body'); + const $header = $('.js-header'); + const $announcementBar = $('#announcement-bar-root'); + const $openMenu = $('.js-open-menu'); + const $closeMenu = $('.js-close-menu'); + const $menu = $('.js-menu'); + const $toggleSubmenu = $('.js-toggle-submenu'); + const $submenuOption = $('.js-submenu-option')[0]; + const $submenu = $('.js-submenu'); + const $recentSlider = $('.js-recent-slider'); + const $openSecondaryMenu = $('.js-open-secondary-menu'); + const $openSearch = $('.js-open-search'); + const $closeSearch = $('.js-close-search'); + const $search = $('.js-search'); + const $inputSearch = $('.js-input-search'); + const $searchResults = $('.js-search-results'); + const $searchNoResults = $('.js-no-results'); + const $toggleDarkMode = $('.js-toggle-darkmode'); + const $mainNav = $('.js-main-nav'); + const $mainNavLeft = $('.js-main-nav-left'); + const $newsletterElements = $('.js-newsletter'); + const $nativeComments = $('.js-native-comments > div > iframe')[0]; + const currentSavedTheme = localStorage.getItem('theme'); + + let postsCollection = null + let submenuIsOpen = false; + let secondaryMenuTippy = null; + + const showSubmenu = () => { + $header.addClass('submenu-is-active'); + $toggleSubmenu.addClass('active'); + $submenu.removeClass('closed').addClass('opened'); + }; + + const hideSubmenu = () => { + $header.removeClass('submenu-is-active'); + $toggleSubmenu.removeClass('active'); + $submenu.removeClass('opened').addClass('closed'); + }; + + const toggleScrollVertical = () => { + $body.toggleClass('no-scroll-y'); + }; + + const tryToRemoveNewsletter = () => { + if (typeof disableNewsletter !== 'undefined' && disableNewsletter) { + $newsletterElements.remove(); } + }; - const $body = $('body') - const $header = $('.js-header') - const $openMenu = $('.js-open-menu') - const $closeMenu = $('.js-close-menu') - const $menu = $('.js-menu') - const $toggleSubmenu = $('.js-toggle-submenu') - const $submenuOption = $('.js-submenu-option')[0] - const $submenu = $('.js-submenu') - const $recentSlider = $('.js-recent-slider') - const $openSecondaryMenu = $('.js-open-secondary-menu') - const $openSearch = $('.js-open-search') - const $closeSearch = $('.js-close-search') - const $search = $('.js-search') - const $inputSearch = $('.js-input-search') - const $searchResults = $('.js-search-results') - const $searchNoResults = $('.js-no-results') - const $toggleDarkMode = $('.js-toggle-darkmode') - const $closeNotification = $('.js-notification-close') - const $mainNav = $('.js-main-nav') - const $mainNavLeft = $('.js-main-nav-left') - const $newsletterElements = $('.js-newsletter') - const currentSavedTheme = localStorage.getItem('theme') - - let postsCollection = null - let submenuIsOpen = false - let secondaryMenuTippy = null - - const showSubmenu = () => { - $header.addClass('submenu-is-active') - $toggleSubmenu.addClass('active') - $submenu.removeClass('closed').addClass('opened') + const trySearchFeature = () => { + if (typeof typesenseApiKey !== 'undefined') { + initTypesense() } - - const hideSubmenu = () => { - $header.removeClass('submenu-is-active') - $toggleSubmenu.removeClass('active') - $submenu.removeClass('opened').addClass('closed') - } - - const toggleScrollVertical = () => { - $body.toggleClass('no-scroll-y') - } - - const tryToRemoveNewsletter = () => { - if (typeof disableNewsletter !== 'undefined' && disableNewsletter) { - $newsletterElements.remove() - } - } - - const trySearchFeature = () => { - if (typeof typesenseApiKey !== 'undefined') { - initTypesense() - } - } - - // NOTE: This is not from the liebling theme - - const initTypesense = () => { - const searchClient = new Typesense.SearchClient({ - nodes: [ - { - host: 'blog-search.iota.org', - port: '443', - protocol: 'https' - } - ], - apiKey: typesenseApiKey, - connectionTimeoutSeconds: 5, - cacheSearchResultsForSeconds: 120 - }) - postsCollection = searchClient.collections('shimmer-posts') - } - - const typesenseSearch = async (query) => { - const params = { - query_by: 'title, tags, author, text', - query_by_weights: '3, 3, 1, 2', - highlight_fields: 'text', - highlight_affix_num_tokens: 4, - per_page: 100, - typo_tokens_threshold: 10, - exclude_fields: 'text', - num_typos: 2 - } - - return await postsCollection.documents().search({ q: query, ...params }) - } - - const showNotification = (typeNotification) => { - const $notification = $(`.js-alert[data-notification="${typeNotification}"]`) - $notification.addClass('opened') - setTimeout(() => { - closeNotification($notification) - }, 5000) - } - - const closeNotification = ($notification) => { - $notification.removeClass('opened') - const url = window.location.toString() - - if (url.indexOf('?') > 0) { - const cleanUrl = url.substring(0, url.indexOf('?')) - window.history.replaceState({}, document.title, cleanUrl) - } + }; + + // NOTE: This is not from the liebling theme + + const initTypesense = () => { + const searchClient = new Typesense.SearchClient({ + nodes: [{ + host: 'blog-search.iota.org', + port: '443', + protocol: 'https', + }], + apiKey: typesenseApiKey, + connectionTimeoutSeconds: 5, + cacheSearchResultsForSeconds: 120, + }); + postsCollection = searchClient.collections('posts'); + } + + const typesenseSearch = async (query) => { + const params = { + query_by: "title, tags, author, text", + query_by_weights: "3, 3, 1, 2", + highlight_fields: "text", + highlight_affix_num_tokens: 4, + per_page: 100, + typo_tokens_threshold: 10, + exclude_fields: "text", + num_typos: 2, + }; + + return await postsCollection.documents().search({ q: query, ...params }); + } + + const toggleDesktopTopbarOverflow = disableOverflow => { + if (!isMobile()) { + if (disableOverflow) { + $mainNav.addClass('toggle-overflow'); + $mainNavLeft.addClass('toggle-overflow'); + } else { + $mainNav.removeClass('toggle-overflow'); + $mainNavLeft.removeClass('toggle-overflow'); + } } + }; - const checkForActionParameter = () => { - const action = getParameterByName('action') - const stripe = getParameterByName('stripe') - - if (action === 'subscribe') { - showNotification('subscribe') - } - - if (action === 'signup') { - window.location = `${ghostHost}/signup/?action=checkout` - } + $openMenu.on('click', () => { + $header.addClass('mobile-menu-opened'); + $menu.addClass('opened'); + toggleScrollVertical(); + }); - if (action === 'checkout') { - showNotification('signup') - } + $closeMenu.on('click', () => { + $header.removeClass('mobile-menu-opened'); + $menu.removeClass('opened'); + toggleScrollVertical(); + }); - if (action === 'signin') { - showNotification('signin') - } + $toggleSubmenu.on('click', () => { + submenuIsOpen = !submenuIsOpen; - if (stripe === 'success') { - showNotification('checkout') - } + if (submenuIsOpen) { + showSubmenu(); + } else { + hideSubmenu(); } - - const toggleDesktopTopbarOverflow = (disableOverflow) => { - if (!isMobile()) { - if (disableOverflow) { - $mainNav.addClass('toggle-overflow') - $mainNavLeft.addClass('toggle-overflow') + }); + + const openExternalLinksInDifferentTab = () => { + let links = $('a'); + $.each(links, function (index, value) { + if (!value.href.includes(window.location.hostname)) { + if ($(value).parents('#cookieblock', '#cookieblock__banner__wrapper', '#cookieblock__banner').length > 0) { + value.target = '_self'; } else { - $mainNav.removeClass('toggle-overflow') - $mainNavLeft.removeClass('toggle-overflow') - } - } - } - - const openExternalLinksInDifferentTab = () => { - let links = $('a'); - $.each(links, function (index, value) { - if (!value.href.includes(window.location.hostname)) { - if ($(value).parents('#cookieblock', '#cookieblock__banner__wrapper', '#cookieblock__banner').length > 0) { - value.target = '_self'; - } else { - value.target = '_blank'; - } + value.target = '_blank'; } - }); - } - - $openMenu.on('click', () => { - $header.addClass('mobile-menu-opened') - $menu.addClass('opened') - toggleScrollVertical() - }) - - $closeMenu.on('click', () => { - $header.removeClass('mobile-menu-opened') - $menu.removeClass('opened') - toggleScrollVertical() - }) - - $toggleSubmenu.on('click', () => { - submenuIsOpen = !submenuIsOpen - - if (submenuIsOpen) { - showSubmenu() - } else { - hideSubmenu() } - }) - - $openSearch.on('click', () => { - $search.addClass('opened') - setTimeout(() => { - $inputSearch.trigger('focus') - }, 400) - toggleScrollVertical() - }) - - $closeSearch.on('click', () => { - $inputSearch.trigger('blur') - $search.removeClass('opened') - toggleScrollVertical() - }) - - $inputSearch.on('keyup', async () => { - if ($inputSearch.val().length > 0 && postsCollection) { - const results = (await typesenseSearch($inputSearch.val())).hits - - let htmlString = '' - - if (results.length > 0) { - for (let i = 0, len = results.length; i < len; i++) { - const date = results[i].document.date * 1000 - htmlString += ` + }); + } + + $openSearch.on('click', () => { + $search.addClass('opened'); + setTimeout(() => { + $inputSearch.trigger('focus'); + }, 400); + toggleScrollVertical(); + }); + + $closeSearch.on('click', () => { + $inputSearch.trigger('blur'); + $search.removeClass('opened'); + toggleScrollVertical(); + }); + + $inputSearch.on('keyup', async () => { + if ($inputSearch.val().length > 0 && postsCollection) { + const results = (await typesenseSearch($inputSearch.val())).hits + + let htmlString = '' + + if (results.length > 0) { + for (let i = 0, len = results.length; i < len; i++) { + const date = results[i].document.date * 1000 + htmlString += ` ` - } - - $searchNoResults.hide() - $searchResults.html(htmlString) - $searchResults.show() - } else { - $searchResults.html('') - $searchResults.hide() - $searchNoResults.show() - } - } else { - $searchResults.html('') - $searchResults.hide() - $searchNoResults.hide() - } - }) - - $toggleDarkMode.on('change', () => { - if ($toggleDarkMode.is(':checked')) { - $('html').attr('data-theme', 'dark') - localStorage.setItem('theme', 'dark') - } else { - $('html').attr('data-theme', 'light') - localStorage.setItem('theme', 'light') - } - }) - - $toggleDarkMode.on('mouseenter', () => { - toggleDesktopTopbarOverflow(true) - }) - - $toggleDarkMode.on('mouseleave', () => { - toggleDesktopTopbarOverflow(true) - }) - - $closeNotification.on('click', function () { - closeNotification($(this).parent()) - }) - - $(window).on('click', (e) => { - if (submenuIsOpen) { - if ($submenuOption && !$submenuOption.contains(e.target)) { - submenuIsOpen = false - hideSubmenu() - } - } - }) - - $(document).on('keyup', (e) => { - if (e.key === 'Escape' && $search.hasClass('opened')) { - $closeSearch.click() } - }) - if (currentSavedTheme) { - $('html').attr('data-theme', currentSavedTheme) - - if (currentSavedTheme === 'dark') { - $toggleDarkMode.attr('checked', true) - } + $searchNoResults.hide(); + $searchResults.html(htmlString); + $searchResults.show(); + } else { + $searchResults.html(''); + $searchResults.hide(); + $searchNoResults.show(); + } } else { - if (isDarkMode()) { - $toggleDarkMode.attr('checked', true) - } + $searchResults.html(''); + $searchResults.hide(); + $searchNoResults.hide(); } + }); - if ($header.length > 0) { - const headroom = new Headroom($header[0], { - tolerance: { - down: 10, - up: 20 - }, - offset: 15, - onUnpin: () => { - if (!isMobile() && secondaryMenuTippy) { - const desktopSecondaryMenuTippy = secondaryMenuTippy[0] - - if (desktopSecondaryMenuTippy && desktopSecondaryMenuTippy.state.isVisible) { - desktopSecondaryMenuTippy.hide() - } - } - } - }) - headroom.init() + $toggleDarkMode.on('change', () => { + if ($toggleDarkMode.is(':checked')) { + $('html').attr('data-theme', 'dark'); + localStorage.setItem('theme', 'dark'); + } else { + $('html').attr('data-theme', 'light'); + localStorage.setItem('theme', 'light'); } - if ($recentSlider.length > 0) { - const recentSlider = new Glide('.js-recent-slider', { - type: 'slider', - rewind: false, - perView: 4, - swipeThreshold: false, - dragThreshold: false, - gap: 0, - direction: isRTL() ? 'rtl' : 'ltr', - breakpoints: { - 1024: { - perView: 3, - swipeThreshold: 80, - dragThreshold: 120 - }, - 768: { - perView: 2, - swipeThreshold: 80, - dragThreshold: 120, - peek: { before: 0, after: 115 } - }, - 568: { - perView: 1, - swipeThreshold: 80, - dragThreshold: 120, - peek: { before: 0, after: 115 } - } - } - }) - - recentSlider.on('mount.after', () => { - shave('.js-recent-article-title', 50) - }) - - recentSlider.mount({ Swipe, Breakpoints }) + if ($nativeComments) { + $nativeComments.contentDocument.location.reload(true); } - - if (typeof disableFadeAnimation === 'undefined' || !disableFadeAnimation) { - AOS.init({ - once: true, - startEvent: 'DOMContentLoaded' - }) - } else { - $('[data-aos]').addClass('no-aos-animation') + }); + + $toggleDarkMode.on('mouseenter', () => { + toggleDesktopTopbarOverflow(true); + }); + + $toggleDarkMode.on('mouseleave', () => { + toggleDesktopTopbarOverflow(false); + }); + + $(window).on('click', e => { + if (submenuIsOpen) { + if ($submenuOption && !$submenuOption.contains(e.target)) { + submenuIsOpen = false; + hideSubmenu(); + } } + }); - if ($openSecondaryMenu.length > 0) { - const template = document.getElementById('secondary-navigation-template') - - secondaryMenuTippy = tippy('.js-open-secondary-menu', { - appendTo: document.body, - content: template.innerHTML, - allowHTML: true, - arrow: true, - trigger: 'click', - interactive: true, - onShow() { - toggleDesktopTopbarOverflow(true) - }, - onHidden() { - toggleDesktopTopbarOverflow(false) - } - }) + $(document).on('keyup', e => { + if (e.key === 'Escape' && $search.hasClass('opened')) { + $closeSearch.trigger('click'); } + }); - tippy('.js-tooltip') - - shave('.js-article-card-title', 100) - shave('.js-article-card-title-no-image', 250) - - checkForActionParameter() - tryToRemoveNewsletter() - trySearchFeature() - openExternalLinksInDifferentTab() -}) + if (currentSavedTheme) { + if (currentSavedTheme === 'dark') { + $toggleDarkMode.each(function() { + $(this).attr('checked', true); + }); + } + } + + if ($header.length > 0) { + const headroom = new Headroom($header[0], { + tolerance: { + down: 10, + up: 20 + }, + offset: 15, + onUnpin: () => { + if (!isMobile() && secondaryMenuTippy) { + const desktopSecondaryMenuTippy = secondaryMenuTippy[0]; + + if ( + desktopSecondaryMenuTippy && + desktopSecondaryMenuTippy.state.isVisible + ) { + desktopSecondaryMenuTippy.hide(); + } + } + } + }); + headroom.init(); + } + + if ($announcementBar.length > 0) { + $header.addClass('with-announcement-bar'); + + setTimeout(() => { + $header.removeAttr('data-animate'); + }, 500); + + const barMutationObserver = new MutationObserver((e) => { + if (e[0].addedNodes.length) { + $announcementBar.detach().prependTo($header); + const barHeight = $announcementBar.height(); + document.documentElement.style.setProperty('--announcement-bar-height', `${barHeight}px`); + } + + if (e[0].removedNodes.length) { + document.documentElement.style.setProperty('--announcement-bar-height', '0px'); + } + }); + + const barResizeObserver = new ResizeObserver((entries) => { + entries.forEach((entry) => { + const barHeight = entry.contentRect.height; + document.documentElement.style.setProperty('--announcement-bar-height', `${barHeight}px`); + }) + }); + + barMutationObserver.observe($announcementBar[0], { childList: true }); + barResizeObserver.observe($announcementBar[0]); + } else { + setTimeout(() => { + $header.removeAttr('data-animate'); + }, 500); + } + + if ($recentSlider.length > 0) { + const recentSwiper = new Swiper('.js-recent-slider', { + modules: [FreeMode, A11y], + freeMode: true, + slidesPerView: 'auto', + a11y: true, + on: { + init: function() { + shave('.js-recent-article-title', 50); + } + } + }); + } + + if ($openSecondaryMenu.length > 0) { + const template = document.getElementById('secondary-navigation-template'); + + secondaryMenuTippy = tippy('.js-open-secondary-menu', { + appendTo: document.body, + content: template.innerHTML, + allowHTML: true, + arrow: true, + trigger: 'click', + interactive: true, + onShow() { + toggleDesktopTopbarOverflow(true); + }, + onHidden() { + toggleDesktopTopbarOverflow(false); + } + }); + } + + tippy('.js-tooltip', { allowHTML: true }); + + shave('.js-article-card-title', 100); + shave('.js-article-card-title-no-image', 250); + + tryToRemoveNewsletter(); + trySearchFeature(); + openExternalLinksInDifferentTab(); +}); \ No newline at end of file diff --git a/src/js/helpers.js b/src/js/helpers.js index d1b12124d..7f6458f26 100644 --- a/src/js/helpers.js +++ b/src/js/helpers.js @@ -1,95 +1,82 @@ export const isRTL = () => { - const $html = document.querySelector('html') - return ['ar', 'he', 'fa'].includes($html.getAttribute('lang')) -} + const $html = document.querySelector('html'); + return ['ar', 'he', 'fa'].includes($html.getAttribute('lang')); +}; export const isMobile = (width = '768px') => { - return window.matchMedia(`(max-width: ${width})`).matches -} + return window.matchMedia(`(max-width: ${width})`).matches; +}; -export const isDarkMode = () => { - const darkModeMatcher = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)') +export const formatDate = date => { + if (date) { + return new Date(date).toLocaleDateString(document.documentElement.lang, { + year: 'numeric', + month: 'long', + day: 'numeric' + }); + } - return darkModeMatcher && darkModeMatcher.matches -} - -export const formatDate = (date) => { - if (date) { - return new Date(date).toLocaleDateString(document.documentElement.lang, { - year: 'numeric', - month: 'long', - day: 'numeric' - }) - } - - return '' -} + return ''; +}; export const getParameterByName = (name, url) => { - if (!url) url = window.location.href + if (!url) url = window.location.href; - name = name.replace(/[\[\]]/g, '\\$&') + name = name.replace(/[\[\]]/g, '\\$&'); - const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`) - const results = regex.exec(url) + const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`); + const results = regex.exec(url); - if (!results) return null + if (!results) return null; - if (!results[2]) return '' + if (!results[2]) return ''; - return decodeURIComponent(results[2].replace(/\+/g, ' ')) -} + return decodeURIComponent(results[2].replace(/\+/g, ' ')); +}; export const adjustImageGallery = () => { - const images = document.querySelectorAll('.kg-gallery-image img') - - for (var i = 0, len = images.length; i < len; i++) { - const container = images[i].closest('.kg-gallery-image') - const width = images[i].attributes.width.value - const height = images[i].attributes.height.value - const ratio = width / height - container.style.flex = `${ratio} 1 0%` - } -} - -export const managePostImages = ($) => { - $('.js-post-content') - .find('img') - .each(function() { - // TODO: improve sizings for mobile as now is taking images at w1000 - $(this).attr('sizes', '(max-width: 720px) 720px') - if ( - !$(this) - .closest('figure') - .hasClass('kg-bookmark-card') && - !$(this) - .parent() - .is('a') - ) { - $(this).addClass('js-zoomable') - } - - const $figcaption = $(this) - .parent() - .find('figcaption') - - if ($figcaption) { - $(this).attr('alt', $figcaption.text()) - } else { - $(this).attr('alt', '') - } - }) -} + const images = document.querySelectorAll('.kg-gallery-image img'); + + for (var i = 0, len = images.length; i < len; i++) { + const container = images[i].closest('.kg-gallery-image'); + const width = images[i].attributes.width.value; + const height = images[i].attributes.height.value; + const ratio = width / height; + container.style.flex = `${ratio} 1 0%`; + } +}; + +export const managePostImages = $ => { + $('.js-post-content') + .find('img') + .each(function() { + if ( + !$(this) + .closest('figure') + .hasClass('kg-bookmark-card') && + !$(this) + .closest('figure') + .hasClass('kg-nft-card') && + !$(this) + .parent() + .is('a') && + !$(this).hasClass('kg-product-card-image') && + !$(this).hasClass('kg-audio-thumbnail') + ) { + $(this).addClass('js-zoomable'); + } + }); +}; export const makeImagesZoomable = ($, mediumZoom) => { - const zoom = mediumZoom('.js-zoomable') - - zoom.on('opened', () => { - setTimeout(() => { - const $mediumZoomImages = $('.medium-zoom-image--opened') - if ($mediumZoomImages.length > 1) { - $mediumZoomImages.last().hide() - } - }, 10) - }) -} + const zoom = mediumZoom('.js-zoomable'); + + zoom.on('opened', () => { + setTimeout(() => { + const $mediumZoomImages = $('.medium-zoom-image--opened'); + if ($mediumZoomImages.length > 1) { + $mediumZoomImages.last().hide(); + } + }, 10); + }); +}; diff --git a/src/js/home.js b/src/js/home.js index b5e39b5a6..d80365cba 100644 --- a/src/js/home.js +++ b/src/js/home.js @@ -1,94 +1,31 @@ -import $ from 'jquery' -import shave from 'shave' -import Glide, { - Controls, - Swipe, - Breakpoints -} from '@glidejs/glide/dist/glide.modular.esm' -import { isRTL } from './helpers' +import $ from 'jquery'; +import shave from 'shave'; +import Swiper, { Navigation, A11y } from 'swiper'; +import 'swiper/css'; $(() => { - const $featuredSlider = $('.js-featured-slider') + const $featuredSlider = $('.js-featured-slider'); if ($featuredSlider.length > 0) { - const numSlides = $featuredSlider.find('.js-featured-slide').length - const featuredSlider = new Glide('.js-featured-slider', { - type: 'slider', - rewind: false, - gap: 0, - swipeThreshold: false, - dragThreshold: false, - direction: isRTL() ? 'rtl' : 'ltr', - breakpoints: { - 768: { - swipeThreshold: numSlides === 1 ? false : 80, - dragThreshold: numSlides === 1 ? false : 120 + const numSlides = $featuredSlider.find('.swiper-slide').length; + const featuredSwiper = new Swiper('.js-featured-slider', { + modules: [Navigation, A11y], + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev' + }, + a11y: true, + on: { + init: function() { + shave('.js-featured-article-title', 200); } } - }) - - const ArrowDisabler = (Glide, Components) => { - const controlClasses = { - 'controls': 'js-featured-slider-controls', - 'backArrow': 'js-featured-slider-previous', - 'nextArrow': 'js-featured-slider-next', - } - - return { - mount() { - if (Glide.settings.rewind || numSlides === 1) { - return - } - - Glide.on(['mount.after', 'run'], () => { - for (let controlItem of Components.Controls.items) { - if (!controlItem.className.includes(controlClasses.controls)) { - continue - } - - const left = controlItem.querySelector(`.${controlClasses.backArrow}`) - - if (left) { - if (Glide.index === 0) { - left.setAttribute('disabled', '') - } else { - left.removeAttribute('disabled') - } - } - - const right = controlItem.querySelector(`.${controlClasses.nextArrow}`) - - if (right) { - const lastSlideIndex = Glide.settings.bound - ? Glide.index + (Glide.settings.perView - 1) - : Glide.index - - if (lastSlideIndex === Components.Sizes.length - 1) { - right.setAttribute('disabled', '') - } else { - right.removeAttribute('disabled') - } - } - } - }) - } - } - } + }); if (numSlides === 1) { - $featuredSlider.find('.js-featured-slider-controls').remove() + $featuredSlider.find('.js-featured-slider-button').remove(); } - - featuredSlider.on('mount.after', () => { - shave('.js-featured-article-title', 200) - }) - - featuredSlider.mount({ Controls, Swipe, Breakpoints, ArrowDisabler }) - - setTimeout(() => { - window.dispatchEvent(new Event('resize')) - }, 350) } - shave('.js-featured-article-title', 200) -}) + shave('.js-featured-article-title', 200); +}); diff --git a/src/js/post.js b/src/js/post.js index ec90f576b..37a898e47 100644 --- a/src/js/post.js +++ b/src/js/post.js @@ -1,127 +1,124 @@ -import $ from 'jquery' -import mediumZoom from 'medium-zoom' -import fitvids from 'fitvids' -import shave from 'shave' -import Glide, { - Controls, - Swipe, - Breakpoints -} from '@glidejs/glide/dist/glide.modular.esm' +import $ from 'jquery'; +import mediumZoom from 'medium-zoom'; +import fitvids from 'fitvids'; +import shave from 'shave'; +import Swiper, { Navigation, A11y } from 'swiper'; +import 'swiper/css'; import { - isRTL, isMobile, adjustImageGallery, managePostImages, makeImagesZoomable -} from './helpers' +} from './helpers'; -let $aosWrapper = null -let $progressCircle = null -let lastScrollingY = window.pageYOffset -let lastWindowHeight = 0 -let lastDocumentHeight = 0 -let circumference = 0 -let isTicking = false +let $animationWrapper = null; +let $progressCircle = null; +let lastScrollingY = window.pageYOffset; +let lastWindowHeight = 0; +let lastDocumentHeight = 0; +let circumference = 0; +let isTicking = false; const onScrolling = () => { - lastScrollingY = window.pageYOffset - requestTicking() -} + lastScrollingY = window.pageYOffset; + requestTicking(); +}; const adjustShare = (timeout) => { if (!isMobile('1023px')) { - $('body').removeClass('share-menu-displayed') + $('body').removeClass('share-menu-displayed'); } else { - $('body').addClass('share-menu-displayed') + $('body').addClass('share-menu-displayed'); setTimeout(() => { - $aosWrapper.removeAttr('data-aos') - }, timeout) + $animationWrapper.removeAttr('data-animate'); + }, timeout); } -} +}; const onResizing = () => { - setHeights() - adjustShare(100) + setHeights(); + adjustShare(100); setTimeout(() => { - setCircleStyles() - requestTicking() - }, 200) -} + setCircleStyles(); + requestTicking(); + }, 200); +}; const requestTicking = () => { if (!isTicking) { - requestAnimationFrame(updating) + requestAnimationFrame(updating); } - isTicking = true -} + isTicking = true; +}; const updating = () => { - const progressMax = lastDocumentHeight - lastWindowHeight - const percent = Math.ceil((lastScrollingY / progressMax) * 100) + const progressMax = lastDocumentHeight - lastWindowHeight; + const percent = Math.ceil((lastScrollingY / progressMax) * 100); if (percent <= 100) { - setProgress(percent) + setProgress(percent); } - isTicking = false -} + isTicking = false; +}; const setHeights = () => { - lastWindowHeight = window.innerHeight - lastDocumentHeight = $(document).height() -} + lastWindowHeight = window.innerHeight; + lastDocumentHeight = $(document).height(); +}; const setCircleStyles = () => { const svgWidth = $progressCircle.parent().width(); - const radiusCircle = svgWidth / 2 - const borderWidth = isMobile() ? 2 : 3 + const radiusCircle = svgWidth / 2; + const borderWidth = isMobile() ? 2 : 3; - $progressCircle.parent().attr('viewBox', `0 0 ${svgWidth} ${svgWidth}`) - $progressCircle.attr('stroke-width', borderWidth) - $progressCircle.attr('r', radiusCircle - (borderWidth - 1)) - $progressCircle.attr('cx', radiusCircle) - $progressCircle.attr('cy', radiusCircle) + $progressCircle.parent().attr('viewBox', `0 0 ${svgWidth} ${svgWidth}`); + $progressCircle.attr('stroke-width', borderWidth); + $progressCircle.attr('r', radiusCircle - (borderWidth - 1)); + $progressCircle.attr('cx', radiusCircle); + $progressCircle.attr('cy', radiusCircle); - circumference = radiusCircle * 2 * Math.PI + circumference = radiusCircle * 2 * Math.PI; - $progressCircle[0].style.strokeDasharray = `${circumference} ${circumference}` - $progressCircle[0].style.strokeDashoffset = circumference -} + $progressCircle[0].style.strokeDasharray = `${circumference} ${circumference}`; + $progressCircle[0].style.strokeDashoffset = circumference; +}; -const setProgress = (percent) => { +const setProgress = percent => { if (percent <= 100) { - const offset = circumference - percent / 100 * circumference - $progressCircle[0].style.strokeDashoffset = offset + const offset = circumference - (percent / 100) * circumference; + $progressCircle[0].style.strokeDashoffset = offset; } -} +}; const prepareProgressCircle = () => { - $progressCircle = $('.js-progress') + $progressCircle = $('.js-progress'); - setHeights() - setCircleStyles() - updating() + setHeights(); + setCircleStyles(); + updating(); setTimeout(() => { - $progressCircle.parent().css('opacity', 1) - }, 300) -} + $progressCircle.parent().css('opacity', 1); + }, 300); +}; const hideHardCodedFollowUs = () => { $("p").filter(function () { - return $(this).text().includes("Follow us on our official channels"); + const text = $(this).text(); + return text.includes("Follow us on our official channels") || text.includes("Follow the IOTA Foundation on our official channels"); }).hide().next('p').hide(); } $(() => { hideHardCodedFollowUs(); - + // --> post deprecation - if ($('.disclamer-deprecated-post').length > 0) { - addNoIndexMetaTag() + if ($('.disclamer-deprecated-post').length > 0) { + addNoIndexMetaTag() } else { const postPublishedDate = new Date($('.js-date-published')[0].innerText).getTime() const today = new Date().getTime() @@ -140,87 +137,67 @@ $(() => { document.getElementsByTagName('head')[0].prepend(metaElement) } // <-- end of post deprecation - - $aosWrapper = $('.js-aos-wrapper') - const $scrollButton = $('.js-scrolltop') - const $recommendedSlider = $('.js-recommended-slider') - fitvids('.js-post-content') + $animationWrapper = $('.js-animation-wrapper'); + const $scrollButton = $('.js-scrolltop'); + const $recommendedSlider = $('.js-recommended-slider'); - adjustImageGallery() - adjustShare(1000) + fitvids('.js-post-content'); + + adjustImageGallery(); + adjustShare(1000); if ($recommendedSlider.length > 0) { - const recommendedSlider = new Glide('.js-recommended-slider', { - type: 'slider', - rewind: false, - perView: 3, - swipeThreshold: false, - dragThreshold: false, - gap: 0, - direction: isRTL() ? 'rtl' : 'ltr', + const recommendedSwiper = new Swiper('.js-recommended-slider', { + modules: [Navigation, A11y], + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev' + }, + slidesPerView: 1, + allowTouchMove: true, + loop: true, + a11y: true, breakpoints: { - 1023: { - type: 'carousel', - perView: 2, - swipeThreshold: 80, - dragThreshold: 120 - }, 720: { - type: 'carousel', - perView: 2, - swipeThreshold: 80, - dragThreshold: 120 + slidesPerView: 2, + allowTouchMove: true, + loop: true }, - 568: { - type: 'carousel', - perView: 1, - swipeThreshold: 80, - dragThreshold: 120 + 1024: { + slidesPerView: 3, + allowTouchMove: false, + loop: false } - } - }) - - const Length = (Glide, Components, Events) => { - return { - mount() { - Events.emit('length.change', Components.Sizes.length) + }, + on: { + init: function() { + shave('.js-article-card-title', 100); + shave('.js-article-card-title-no-image', 250); } } - } - - recommendedSlider.on('mount.after', () => { - shave('.js-article-card-title', 100) - shave('.js-article-card-title-no-image', 250) - }) - - recommendedSlider.on('length.change', (length) => { - if (length === 1) { - recommendedSlider.update({ type: 'slider' }) - $recommendedSlider.find('.js-controls').remove() - } - }) - - recommendedSlider.mount({ Controls, Swipe, Breakpoints, Length }) + }); } - shave('.js-article-card-title', 100) - shave('.js-article-card-title-no-image', 250) + shave('.js-article-card-title', 100); + shave('.js-article-card-title-no-image', 250); $scrollButton.on('click', () => { - $('html, body').animate({ - scrollTop: 0 - }, 500) - }) + $('html, body').animate( + { + scrollTop: 0 + }, + 500 + ); + }); - managePostImages($) - makeImagesZoomable($, mediumZoom) + managePostImages($); + makeImagesZoomable($, mediumZoom); - window.addEventListener('scroll', onScrolling, { passive: true }) - window.addEventListener('resize', onResizing, { passive: true }) -}) + window.addEventListener('scroll', onScrolling, { passive: true }); + window.addEventListener('resize', onResizing, { passive: true }); +}); $(window).on('load', () => { - prepareProgressCircle() -}) - + prepareProgressCircle(); +}); diff --git a/src/js/vendor/content-api.min.js b/src/js/vendor/content-api.min.js index 2d4513b44..baad66cb8 100644 --- a/src/js/vendor/content-api.min.js +++ b/src/js/vendor/content-api.min.js @@ -1 +1 @@ -!function (t, e) { "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).GhostContentAPI = e() }(this, (function () { "use strict"; var t = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}; function e(t, e) { return t(e = { exports: {} }, e.exports), e.exports } var n = function (t) { return t && t.Math == Math && t }, r = n("object" == typeof globalThis && globalThis) || n("object" == typeof window && window) || n("object" == typeof self && self) || n("object" == typeof t && t) || function () { return this }() || Function("return this")(), o = function (t) { try { return !!t() } catch (t) { return !0 } }, i = !o((function () { return 7 != Object.defineProperty({}, 1, { get: function () { return 7 } })[1] })), a = {}.propertyIsEnumerable, c = Object.getOwnPropertyDescriptor, u = { f: c && !a.call({ 1: 2 }, 1) ? function (t) { var e = c(this, t); return !!e && e.enumerable } : a }, s = function (t, e) { return { enumerable: !(1 & t), configurable: !(2 & t), writable: !(4 & t), value: e } }, f = {}.toString, l = function (t) { return f.call(t).slice(8, -1) }, p = "".split, d = o((function () { return !Object("z").propertyIsEnumerable(0) })) ? function (t) { return "String" == l(t) ? p.call(t, "") : Object(t) } : Object, h = function (t) { if (null == t) throw TypeError("Can't call method on " + t); return t }, v = function (t) { return d(h(t)) }, g = function (t) { return "object" == typeof t ? null !== t : "function" == typeof t }, m = function (t, e) { if (!g(t)) return t; var n, r; if (e && "function" == typeof (n = t.toString) && !g(r = n.call(t))) return r; if ("function" == typeof (n = t.valueOf) && !g(r = n.call(t))) return r; if (!e && "function" == typeof (n = t.toString) && !g(r = n.call(t))) return r; throw TypeError("Can't convert object to primitive value") }, y = {}.hasOwnProperty, b = function (t, e) { return y.call(t, e) }, w = r.document, S = g(w) && g(w.createElement), j = function (t) { return S ? w.createElement(t) : {} }, E = !i && !o((function () { return 7 != Object.defineProperty(j("div"), "a", { get: function () { return 7 } }).a })), O = Object.getOwnPropertyDescriptor, T = { f: i ? O : function (t, e) { if (t = v(t), e = m(e, !0), E) try { return O(t, e) } catch (t) { } if (b(t, e)) return s(!u.f.call(t, e), t[e]) } }, x = function (t) { if (!g(t)) throw TypeError(String(t) + " is not an object"); return t }, C = Object.defineProperty, A = { f: i ? C : function (t, e, n) { if (x(t), e = m(e, !0), x(n), E) try { return C(t, e, n) } catch (t) { } if ("get" in n || "set" in n) throw TypeError("Accessors not supported"); return "value" in n && (t[e] = n.value), t } }, P = i ? function (t, e, n) { return A.f(t, e, s(1, n)) } : function (t, e, n) { return t[e] = n, t }, L = function (t, e) { try { P(r, t, e) } catch (n) { r[t] = e } return e }, R = r["__core-js_shared__"] || L("__core-js_shared__", {}), k = Function.toString; "function" != typeof R.inspectSource && (R.inspectSource = function (t) { return k.call(t) }); var N, M, U, q = R.inspectSource, B = r.WeakMap, I = "function" == typeof B && /native code/.test(q(B)), D = e((function (t) { (t.exports = function (t, e) { return R[t] || (R[t] = void 0 !== e ? e : {}) })("versions", []).push({ version: "3.7.0", mode: "global", copyright: "© 2020 Denis Pushkarev (zloirock.ru)" }) })), F = 0, _ = Math.random(), W = function (t) { return "Symbol(" + String(void 0 === t ? "" : t) + ")_" + (++F + _).toString(36) }, z = D("keys"), H = function (t) { return z[t] || (z[t] = W(t)) }, V = {}, G = r.WeakMap; if (I) { var X = R.state || (R.state = new G), J = X.get, K = X.has, $ = X.set; N = function (t, e) { return e.facade = t, $.call(X, t, e), e }, M = function (t) { return J.call(X, t) || {} }, U = function (t) { return K.call(X, t) } } else { var Y = H("state"); V[Y] = !0, N = function (t, e) { return e.facade = t, P(t, Y, e), e }, M = function (t) { return b(t, Y) ? t[Y] : {} }, U = function (t) { return b(t, Y) } } var Q, Z, tt = { set: N, get: M, has: U, enforce: function (t) { return U(t) ? M(t) : N(t, {}) }, getterFor: function (t) { return function (e) { var n; if (!g(e) || (n = M(e)).type !== t) throw TypeError("Incompatible receiver, " + t + " required"); return n } } }, et = e((function (t) { var e = tt.get, n = tt.enforce, o = String(String).split("String"); (t.exports = function (t, e, i, a) { var c, u = !!a && !!a.unsafe, s = !!a && !!a.enumerable, f = !!a && !!a.noTargetGet; "function" == typeof i && ("string" != typeof e || b(i, "name") || P(i, "name", e), (c = n(i)).source || (c.source = o.join("string" == typeof e ? e : ""))), t !== r ? (u ? !f && t[e] && (s = !0) : delete t[e], s ? t[e] = i : P(t, e, i)) : s ? t[e] = i : L(e, i) })(Function.prototype, "toString", (function () { return "function" == typeof this && e(this).source || q(this) })) })), nt = r, rt = function (t) { return "function" == typeof t ? t : void 0 }, ot = function (t, e) { return arguments.length < 2 ? rt(nt[t]) || rt(r[t]) : nt[t] && nt[t][e] || r[t] && r[t][e] }, it = Math.ceil, at = Math.floor, ct = function (t) { return isNaN(t = +t) ? 0 : (t > 0 ? at : it)(t) }, ut = Math.min, st = function (t) { return t > 0 ? ut(ct(t), 9007199254740991) : 0 }, ft = Math.max, lt = Math.min, pt = function (t) { return function (e, n, r) { var o, i = v(e), a = st(i.length), c = function (t, e) { var n = ct(t); return n < 0 ? ft(n + e, 0) : lt(n, e) }(r, a); if (t && n != n) { for (; a > c;)if ((o = i[c++]) != o) return !0 } else for (; a > c; c++)if ((t || c in i) && i[c] === n) return t || c || 0; return !t && -1 } }, dt = { includes: pt(!0), indexOf: pt(!1) }, ht = dt.indexOf, vt = function (t, e) { var n, r = v(t), o = 0, i = []; for (n in r) !b(V, n) && b(r, n) && i.push(n); for (; e.length > o;)b(r, n = e[o++]) && (~ht(i, n) || i.push(n)); return i }, gt = ["constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"], mt = gt.concat("length", "prototype"), yt = { f: Object.getOwnPropertyNames || function (t) { return vt(t, mt) } }, bt = { f: Object.getOwnPropertySymbols }, wt = ot("Reflect", "ownKeys") || function (t) { var e = yt.f(x(t)), n = bt.f; return n ? e.concat(n(t)) : e }, St = function (t, e) { for (var n = wt(e), r = A.f, o = T.f, i = 0; i < n.length; i++) { var a = n[i]; b(t, a) || r(t, a, o(e, a)) } }, jt = /#|\.prototype\./, Et = function (t, e) { var n = Tt[Ot(t)]; return n == Ct || n != xt && ("function" == typeof e ? o(e) : !!e) }, Ot = Et.normalize = function (t) { return String(t).replace(jt, ".").toLowerCase() }, Tt = Et.data = {}, xt = Et.NATIVE = "N", Ct = Et.POLYFILL = "P", At = Et, Pt = T.f, Lt = function (t, e) { var n, o, i, a, c, u = t.target, s = t.global, f = t.stat; if (n = s ? r : f ? r[u] || L(u, {}) : (r[u] || {}).prototype) for (o in e) { if (a = e[o], i = t.noTargetGet ? (c = Pt(n, o)) && c.value : n[o], !At(s ? o : u + (f ? "." : "#") + o, t.forced) && void 0 !== i) { if (typeof a == typeof i) continue; St(a, i) } (t.sham || i && i.sham) && P(a, "sham", !0), et(n, o, a, t) } }, Rt = Array.isArray || function (t) { return "Array" == l(t) }, kt = function (t) { return Object(h(t)) }, Nt = function (t, e, n) { var r = m(e); r in t ? A.f(t, r, s(0, n)) : t[r] = n }, Mt = !!Object.getOwnPropertySymbols && !o((function () { return !String(Symbol()) })), Ut = Mt && !Symbol.sham && "symbol" == typeof Symbol.iterator, qt = D("wks"), Bt = r.Symbol, It = Ut ? Bt : Bt && Bt.withoutSetter || W, Dt = function (t) { return b(qt, t) || (Mt && b(Bt, t) ? qt[t] = Bt[t] : qt[t] = It("Symbol." + t)), qt[t] }, Ft = Dt("species"), _t = function (t, e) { var n; return Rt(t) && ("function" != typeof (n = t.constructor) || n !== Array && !Rt(n.prototype) ? g(n) && null === (n = n[Ft]) && (n = void 0) : n = void 0), new (void 0 === n ? Array : n)(0 === e ? 0 : e) }, Wt = ot("navigator", "userAgent") || "", zt = r.process, Ht = zt && zt.versions, Vt = Ht && Ht.v8; Vt ? Z = (Q = Vt.split("."))[0] + Q[1] : Wt && (!(Q = Wt.match(/Edge\/(\d+)/)) || Q[1] >= 74) && (Q = Wt.match(/Chrome\/(\d+)/)) && (Z = Q[1]); var Gt, Xt = Z && +Z, Jt = Dt("species"), Kt = Dt("isConcatSpreadable"), $t = Xt >= 51 || !o((function () { var t = []; return t[Kt] = !1, t.concat()[0] !== t })), Yt = (Gt = "concat", Xt >= 51 || !o((function () { var t = []; return (t.constructor = {})[Jt] = function () { return { foo: 1 } }, 1 !== t[Gt](Boolean).foo }))), Qt = function (t) { if (!g(t)) return !1; var e = t[Kt]; return void 0 !== e ? !!e : Rt(t) }; Lt({ target: "Array", proto: !0, forced: !$t || !Yt }, { concat: function (t) { var e, n, r, o, i, a = kt(this), c = _t(a, 0), u = 0; for (e = -1, r = arguments.length; e < r; e++)if (Qt(i = -1 === e ? a : arguments[e])) { if (u + (o = st(i.length)) > 9007199254740991) throw TypeError("Maximum allowed index exceeded"); for (n = 0; n < o; n++, u++)n in i && Nt(c, u, i[n]) } else { if (u >= 9007199254740991) throw TypeError("Maximum allowed index exceeded"); Nt(c, u++, i) } return c.length = u, c } }); var Zt = function (t) { if ("function" != typeof t) throw TypeError(String(t) + " is not a function"); return t }, te = function (t, e, n) { if (Zt(t), void 0 === e) return t; switch (n) { case 0: return function () { return t.call(e) }; case 1: return function (n) { return t.call(e, n) }; case 2: return function (n, r) { return t.call(e, n, r) }; case 3: return function (n, r, o) { return t.call(e, n, r, o) } }return function () { return t.apply(e, arguments) } }, ee = [].push, ne = function (t) { var e = 1 == t, n = 2 == t, r = 3 == t, o = 4 == t, i = 6 == t, a = 5 == t || i; return function (c, u, s, f) { for (var l, p, h = kt(c), v = d(h), g = te(u, s, 3), m = st(v.length), y = 0, b = f || _t, w = e ? b(c, m) : n ? b(c, 0) : void 0; m > y; y++)if ((a || y in v) && (p = g(l = v[y], y, h), t)) if (e) w[y] = p; else if (p) switch (t) { case 3: return !0; case 5: return l; case 6: return y; case 2: ee.call(w, l) } else if (o) return !1; return i ? -1 : r || o ? o : w } }, re = { forEach: ne(0), map: ne(1), filter: ne(2), some: ne(3), every: ne(4), find: ne(5), findIndex: ne(6) }, oe = function (t, e) { var n = [][t]; return !!n && o((function () { n.call(null, e || function () { throw 1 }, 1) })) }, ie = Object.defineProperty, ae = {}, ce = function (t) { throw t }, ue = function (t, e) { if (b(ae, t)) return ae[t]; e || (e = {}); var n = [][t], r = !!b(e, "ACCESSORS") && e.ACCESSORS, a = b(e, 0) ? e[0] : ce, c = b(e, 1) ? e[1] : void 0; return ae[t] = !!n && !o((function () { if (r && !i) return !0; var t = { length: -1 }; r ? ie(t, 1, { enumerable: !0, get: ce }) : t[1] = 1, n.call(t, a, c) })) }, se = re.forEach, fe = oe("forEach"), le = ue("forEach"), pe = fe && le ? [].forEach : function (t) { return se(this, t, arguments.length > 1 ? arguments[1] : void 0) }; Lt({ target: "Array", proto: !0, forced: [].forEach != pe }, { forEach: pe }); var de, he = Object.keys || function (t) { return vt(t, gt) }, ve = i ? Object.defineProperties : function (t, e) { x(t); for (var n, r = he(e), o = r.length, i = 0; o > i;)A.f(t, n = r[i++], e[n]); return t }, ge = ot("document", "documentElement"), me = H("IE_PROTO"), ye = function () { }, be = function (t) { return "